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

相关推荐
小兵张健8 小时前
35岁程序员的春天来了
人工智能
大怪v8 小时前
AI抢饭?前端佬:我要验牌!
前端·人工智能·程序员
冬奇Lab8 小时前
OpenClaw 深度解析(六):节点、Canvas 与子 Agent
人工智能·开源
刀法如飞9 小时前
AI提示词框架深度对比分析
人工智能·ai编程
IT_陈寒11 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
1G12 小时前
openclaw控制浏览器/自动化的playwright MCP + Mcporter方案实现
人工智能
踩着两条虫12 小时前
VTJ.PRO 双向代码转换原理揭秘
前端·vue.js·人工智能
扉川川12 小时前
OpenClaw 架构解析:一个生产级 AI Agent 是如何设计的
前端·人工智能
Flittly12 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(3)TodoWrite (待办写入)
python·agent
星浩AI12 小时前
让模型自己写 Skills——从素材到自动生成工作流
人工智能·后端·agent