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

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

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

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

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

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

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值