【Python机器学习】朴素贝叶斯分类器

朴素贝叶斯分类器是与线性模型非常相似的一种分类器,它的训练速度往往更快,但是泛化能力比线性分类器稍差。

朴素贝叶斯分类器高效的原因是:通过单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据。

scikit-learn中实现了3中朴素贝叶斯分类器:GaussianNB、BernoulliNB、MultinomialNB。GaussianNB可用于任意连续数据,BernoulliNB假定输入数据为二分类数据,MultinomialNB假定输入数据为计数数据,也就是每个特征代表某个对象的整数计数。BernoulliNB、MultinomialNB主要用于文本数据的分类。

BernoulliNB分类器计算每个类别中每个特征不为0的元素个数,举例:

python 复制代码
import numpy as np

X=np.array([[0,1,0,1]
            ,[1,0,1,1]
            ,[0,0,0,1]
            ,[1,0,1,0]])
y=np.array([0,1,0,1])
counts={}
for label in np.unique(y):
    counts[label]=X[y==label].sum(axis=0)
print('特征数:\n{}'.format(counts))

上述例子中,先对数据点分类,第1、3个数据点为类别0,其他的为类别1。

在类别0里,特征为1 的个数分别为0、1、0、2个;

类别1里,特征为1的个数分别为2、0、2、1个。

MultinomialNB和GaussianNB计算的统计数据类型略有不同,MultinomialNB计算的是每个类别中每个特征的平均值,GaussianNB会保存每个类别中每个特征的平均值和标准差。

MultinomialNB和BernoulliNB预测公式的形式与线性模型完全相同,但是朴素贝叶斯模型coef_的含义与线性模型稍有不同。

MultinomialNB和BernoulliNB都只有一个参数alpha,用于控制模型复杂度。alpha的原理是,算法向数据中添加alpha这么多的虚拟数据点,这些数据点对所有特征取正值,这样将统计数据平滑化。alpha越大,平滑性越强,模型复杂度越低。alpha值对模型性能不重要,但是调整这个参数通常会使精度略有提高。

GaussianNB主要用于高维数据,而另外两种广泛用在稀疏计数数据,比如文本数据。MultinomialNB性能通常优于BernoulliNB,特别是包含很多非零特征的数据集上。

相关推荐
TuringAcademy3 小时前
AAAI爆款:目标检测新范式,模块化设计封神之作
论文阅读·人工智能·目标检测·论文笔记
The Open Group6 小时前
英特尔公司Darren Pulsipher 博士:以架构之力推动政府数字化转型
大数据·人工智能·架构
喂完待续6 小时前
【Tech Arch】Spark为何成为大数据引擎之王
大数据·hadoop·python·数据分析·spark·apache·mapreduce
Ronin-Lotus6 小时前
深度学习篇---卷积核的权重
人工智能·深度学习
.银河系.7 小时前
8.18 机器学习-决策树(1)
人工智能·决策树·机器学习
敬往事一杯酒哈7 小时前
第7节 神经网络
人工智能·深度学习·神经网络
三掌柜6667 小时前
NVIDIA 技术沙龙探秘:聚焦 Physical AI 专场前沿技术
大数据·人工智能
2502_927161287 小时前
DAY 42 Grad-CAM与Hook函数
人工智能
Hello123网站7 小时前
Flowith-节点式GPT-4 驱动的AI生产力工具
人工智能·ai工具
王者鳜錸7 小时前
PYTHON让繁琐的工作自动化-猜数字游戏
python·游戏·自动化