监督学习、生成模型、多类分类
特点:
使用先验知识得到后验概率,由期望风险最小化得到后验概率最大化。
场景举例:情感分析、消费者分类
优点:
小规模数据集表现好,适合多分类
对于在小数据集上有显著特征的相关对象,朴素贝叶斯方法可对其进行快速分类
缺点:
需要条件独立假设,会牺牲一定准确率,分类性能不一定高
适用数据类型:
标称型数据
1. 概念
条件概率(又称后验概率)
事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”。
频率主义学派
认为参数虽然未知,但却是客观存在的固定值,因此,可以通过优化似然函数等准则来确定参数值,
贝叶斯学派
认为参数是未观察到的随机变量,其本身也可有分布,因此,可假定参数服从一个先验分布,然后基于观测到的数据来计算参数的后验分布。
极大似然估计
根据数据采样来估计概率分布参数的经典方法
拉普拉斯修正
为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”,在估计概率值时通常进行“平滑”。
在先验概率中,分子加1,分母加N*1的情况。
在某个事件已经发生的情况下,为了计算出另一个相同事件发生的概率,我们使用贝叶斯定理。根据某些变量的给定值,要想计算某个结果的概率,也就是根据我们的已知知识(d)计算假设(h)为真的概率,我们这样使用贝叶斯定理:
$$P(h|d)= (P(d|h) * P(h)) / P(d)$$
其中:
$$P(h|d)$$ =后验概率。假设h的概率为真,给定数据为d,那么 P(h|d)= P(d1| h) P(d2| h)….P(dn| h) P(d)
$$P(d|h)$$ =可能性。假设 h 为真时,数据 d 的概率。
$$P(h)$$ = 类的先验概率。假设 h 的概率为真(不管数据 d 的情况)。
$$P(d) = Predictor$$ 的先验概率。数据 d 的概率(不管假设 h 的情况)。
2. 基本思路
提取所有文档中的词条并进行去重
获取文档的所有类别
计算每个类别中的文档数目
对每篇训练文档:
对每个类别:
如果词条出现在文档中–>增加该词条的计数值(for循环或者矩阵相加)
增加所有词条的计数值(此类别下词条总数)
对每个类别:
对每个词条:
将该词条的数目除以总词条数目得到的条件概率(P(词条|类别))
返回该文档属于每个类别的条件概率(P(类别|文档的所有词条))
模型特点
特征与类别联合概率分布,条件独立假设
学习策略
极大似然估计,极大后验概率估计
学习的损失函数
对数似然损失
学习方法
概率计算公式,EM算法
3. 使用
3.1 一般流程
收集数据: 可以使用任何方法。
准备数据: 需要数值型或者布尔型数据。
分析数据: 有大量特征时,绘制特征作用不大,此时使用直方图效果更好。
训练算法: 计算不同的独立特征的条件概率。
测试算法: 计算错误率。
使用算法: 一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。
4. 代码实现
4.1 核心算法
1 | def _trainNB0(trainMatrix, trainCategory): |
4.2 sklearn实现
1 | # GaussianNB_高斯朴素贝叶斯 |
4.3 《机器学习实战》(python3.x)
5. 补充
为什么朴素贝叶斯如此“朴素”?
因为它假定所有的特征在数据集中的作用是同样重要和独立的。
正如我们所知,这个假设在现实世界中是很不真实的,因此,说朴素贝叶斯真的很“朴素”。
非朴素的贝叶斯方法
1、半监督贝叶斯
2、EM算法,含有隐藏元素