【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,特别是包含很多非零特征的数据集上。

相关推荐
a程序小傲6 分钟前
京东Java面试被问:ZGC的染色指针如何实现?内存屏障如何处理?
java·后端·python·面试
辛勤的程序猿6 分钟前
改进的mamba核心块—Hybrid SS2D Block(适用于视觉)
人工智能·深度学习·yolo
serve the people8 分钟前
如何区分什么场景下用机器学习,什么场景下用深度学习
人工智能·深度学习·机器学习
xjxijd14 分钟前
Serverless 3.0 混合架构:容器 + 事件驱动,AI 服务弹性伸缩响应快 3 倍
人工智能·架构·serverless
csdn_aspnet18 分钟前
如何用爬虫、机器学习识别方式屏蔽恶意广告
人工智能·爬虫·机器学习
weixin_4577600024 分钟前
RNN(循环神经网络)原理
人工智能·rnn·深度学习
大连好光景30 分钟前
批量匿名数据重识别(debug记录)
开发语言·python
暴风鱼划水35 分钟前
算法题(Python)哈希表 | 2.两个数组的交集
python·算法·哈希表
清水白石00837 分钟前
《深入 Celery:用 Python 构建高可用任务队列的实战指南》
开发语言·python
代码AI弗森38 分钟前
意图识别深度原理解析:从向量空间到语义流形
人工智能