- Python机器学习
- 首页
- 基础知识
- Python生态系统
- 机器学习方法
- 机器学习项目的数据加载
- 用统计学理解数据
- 用可视化理解数据
- 数据准备
- 数据特征选择
- 机器学习算法 - 分类
- 介绍
- 逻辑回归
- 支持向量机 (SVM)
- 决策树
- 朴素贝叶斯
- 随机森林
- 机器学习算法 - 回归
- 随机森林
- 线性回归
- 机器学习算法 - 聚类
- 概述
- K均值算法
- 均值漂移算法
- 层次聚类
- 机器学习算法 - KNN算法
- 寻找最近邻
- 性能指标
- 自动化工作流程
- 提升机器学习模型性能
- 提升机器学习模型性能(续…)
- Python机器学习 - 资源
- Python机器学习 - 快速指南
- Python机器学习 - 资源
- Python机器学习 - 讨论
分类算法 - 朴素贝叶斯
朴素贝叶斯算法介绍
朴素贝叶斯算法是一种分类技术,它基于贝叶斯定理,并假设所有预测变量相互独立。简单来说,这个假设是指一个特征在一个类别中的存在与同一类别中任何其他特征的存在无关。例如,一部手机如果具有触摸屏、互联网功能、良好的摄像头等,则可以被认为是智能手机。虽然所有这些特征都是相互依赖的,但它们独立地影响着这部手机是智能手机的概率。
在贝叶斯分类中,主要目标是找到后验概率,即给定一些观察到的特征后标签的概率,𝑃(𝐿 | 𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠)。借助贝叶斯定理,我们可以将其用定量形式表示如下:
$$P(L |features)= \frac{P(L)P(features |L)}{𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠)}$$这里,𝑃(𝐿 | 𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠) 是类的后验概率。
𝑃(𝐿) 是类的先验概率。
𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠 | 𝐿) 是似然度,即给定类别的预测变量的概率。
𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠) 是预测变量的先验概率。
使用Python构建朴素贝叶斯模型
Python库Scikit-learn是最有用的库,可以帮助我们在Python中构建朴素贝叶斯模型。在Scikit-learn Python库下,我们有以下三种类型的朴素贝叶斯模型:
高斯朴素贝叶斯
这是最简单的朴素贝叶斯分类器,它假设每个标签的数据都来自简单的正态分布。
多项式朴素贝叶斯
另一个有用的朴素贝叶斯分类器是多项式朴素贝叶斯,其中假设特征来自简单的多项分布。这种朴素贝叶斯最适合表示离散计数的特征。
伯努利朴素贝叶斯
另一个重要的模型是伯努利朴素贝叶斯,其中假设特征是二元的(0和1)。带有“词袋”模型的文本分类可以作为伯努利朴素贝叶斯的应用。
示例
根据我们的数据集,我们可以选择上面解释的任何朴素贝叶斯模型。在这里,我们正在Python中实现高斯朴素贝叶斯模型:
我们将从所需的导入开始:
import numpy as np import matplotlib.pyplot as plt import seaborn as sns; sns.set()
现在,通过使用Scikit-learn的`make_blobs()`函数,我们可以生成具有高斯分布的点块:
from sklearn.datasets import make_blobs X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5) plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
接下来,为了使用GaussianNB模型,我们需要导入并创建它的对象:
from sklearn.naive_bayes import GaussianNB model_GBN = GaussianNB() model_GNB.fit(X, y);
现在,我们必须进行预测。这可以在生成一些新数据后完成:
rng = np.random.RandomState(0) Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2) ynew = model_GNB.predict(Xnew)
接下来,我们绘制新数据以找到其边界:
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer') lim = plt.axis() plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1) plt.axis(lim);
现在,借助以下几行代码,我们可以找到第一个和第二个标签的后验概率:
yprob = model_GNB.predict_proba(Xnew) yprob[-10:].round(3)
输出
array([[0.998, 0.002], [1. , 0. ], [0.987, 0.013], [1. , 0. ], [1. , 0. ], [1. , 0. ], [1. , 0. ], [1. , 0. ], [0. , 1. ], [0.986, 0.014]] )
优缺点
优点
以下是使用朴素贝叶斯分类器的一些优点:
朴素贝叶斯分类易于实现且速度快。
它比逻辑回归等判别模型收敛更快。
它需要较少的训练数据。
它具有高度的可扩展性,或者它们随预测变量和数据点的数量线性扩展。
它可以进行概率预测,并且可以处理连续数据和离散数据。
朴素贝叶斯分类算法既可以用于二元分类问题,也可以用于多类分类问题。
缺点
以下是使用朴素贝叶斯分类器的一些缺点:
朴素贝叶斯分类最重要的缺点之一是其强烈的特征独立性假设,因为在现实生活中,几乎不可能拥有一组完全相互独立的特征。
朴素贝叶斯分类的另一个问题是其“零频率”问题,这意味着如果一个类别变量有一个类别但在训练数据集中没有观察到,则朴素贝叶斯模型将为其分配零概率,并且将无法进行预测。
朴素贝叶斯分类的应用
以下是朴素贝叶斯分类的一些常见应用:
实时预测 - 由于其易于实现和快速计算,它可以用于进行实时预测。
多类预测 - 朴素贝叶斯分类算法可以用来预测目标变量多个类的后验概率。
文本分类 - 由于具有多类预测的功能,朴素贝叶斯分类算法非常适合文本分类。这就是为什么它也用于解决垃圾邮件过滤和情感分析等问题的原因。
推荐系统 - 与协同过滤等算法一起,朴素贝叶斯构成了一个推荐系统,可用于过滤未见信息,并预测用户是否会喜欢给定的资源。