朴素贝叶斯分类器笔记
朴素贝叶斯分类器是基于贝叶斯定理和特征属性条件独立性假设的分类算法。算法对样本的特征属性做了条件独立性假设,这个假设简单粗暴,忽略特征属性之间的相关性,因此很“朴素”,但是在实际应用中貌似还是很高效。
1、基础知识准备
(1)贝叶斯定理
贝叶斯定理描述的是两个条件概率的关系,条件概率P(A|B)为事件B发生的条件下A发生的概率,同理P(B|A)为事件A发生的条件下B发生的概率,又P(AB)=P(A)P(B|A)=P(B)P(A|B),则得到贝叶斯定理公式:
(2)独立分布
如果事件A和事件B相互独立,则有P(AB)=P(A)P(B)
2、朴素贝叶斯算法
算法的大致思想:对于给定训练数据集,首先基于特征条件独立性假设学习输入/输出的联合概率分布(或者说类别先验概率和特征条件概率);然后基于此模型,对于给定的输入x,利用贝叶斯定理求出所有类别的后验概率,取概率最大的作为其预测类别。下面详细展开:
假设X是训练样本特征向量的集合,Y是样本对应标签的集合,
,其中,特征向量有k维;
, ,总共有m类。
则此训练数据集可以表示为比较好理解的方式:
1)、模型构建
朴素贝叶斯分类器建模首先需要通过训练集学习联合概率分布
通过前面的基础知识知,该联合概率可表示为
那么具体地就是求先验概率P(Y)和先验条件概率P(X|Y),具体表达式:
在训练数据集中这个很好计算,接下按照特征的条件独立假设(假设样本的特征向量中特征在类确定的条件下都是条件独立的)来计算P(X|Y):
2)、模型预测
预测阶段,对于输入样本的特征向量x,由贝叶斯定理计算其后验概率:
其中m为类别数,k为特征维度。
由于分母对于所有类别为常数,则最后的预测函数为:
最后取后验概率最大的类别作为输入样本的预测类别。
3)、算法流程总结
(1)根据给定的训练样本集计算每个类别的先验概率:
(2)计算训练样本特征向量中每个特征在各个类别下的条件概率:
除开统计数量的计算,可以看到需要计算的量为m*k。
(3)对于待预测样本x计算其每个类别的后验概率,取后验概率最大的类别作为预测结果。
3、具有连续性数值的特征
当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。即:
这个时候计算该属性在某类别下的条件概率就比较方便了,计算公式为:
在计算时需要统计计算出在cj类别内该属性值的均值与方差,然后再预测阶段就可以根据这个计算对应属性值的条件概率值。
4、朴素贝叶斯分类应用案例
朴素贝叶斯分类算法的案例在网上可以找到很多,也可以在《统计学习方法》这本书中查看给出的应用案例。这里不再重复赘述了
详情参看这篇良心博主的案例:SNS社区中不真实账号检测案例
http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html
另外对于《统计学习方法》这本书有一个有心人实现了所有其中的所有算法,很有意义,这本书可是我入门机器学习算法的启蒙,自己学习过程也有实现了一些,可是这位大神居然全部实现完毕,膜拜!python3.6实现《统计学习方法》所有算法的链接:
https://github.com/fengdu78/lihang-code