朴素贝叶斯和绝大多数分类算法不同。对于大多数分类算法,如决策树,KNN,逻辑回归,支持向量机等都是判别方法,直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X),要么是条件分布P(Y|X)。但是朴素贝叶斯是生成方法,直接找出特征输出Y和特征X的联合分布P(X,Y),然后得到条件概率分布P(Y|X)=P(X,Y)/P(X).
贝叶斯先验
统计学的主流一直是频率学派,以皮尔逊和费歇尔为代表,他们的中心思想是最大似然估计。
贝叶斯的思想概括为先验概率+数据=后验概率。他们的中心思想是最大后验概率估计。频率学派攻击的是先验概率,先验就是对于数据所在领域的历史经验,但是这个经验难以被量化或者模型化,于是贝叶斯学派大胆假设先验分布的模型,比如正态分布,beta分布等。这个假设没有特定依据,因此一直被频率学派认为荒谬。但在很多实际应用中,贝叶斯理论证明了真实有效,如垃圾邮件分类,文本分类等。
条件独立公式,如果X,Y相互独立:
条件概率公式:
综合上述可以写为:
接着看看全概率公式:
从上面很容易得到贝叶斯公式:
贝叶斯模型
假设通过数据,有m个样本,每个样本有n个特征,为
特征输出有K个类别,定义为C1,C2,...,Ck。
从样本中可以统计得到先验分布,接着学习
。
然后就可以用条件概率公式得到联合概率分布P(X,Y)。定义为
朴素贝叶斯为什么是naive,就是因为此时它做了一个大胆的假设,假设X的n个维度之间相互独立,这样就可以得出:
这样大大简化,但如果特征之间非常不独立,就尽量不要使用朴素贝叶斯,考虑其他分类方法比较好。
对于一个新样本,在贝叶斯模型中,使用后验概率最大来判断分类。计算所有K个条件概率,然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测。
最大似然与最大后验
考虑一个二项分布的事件,抛硬币。想知道正反出现的概率是多少(θ),假设出现正面的概率为θ。
抛了十次,得到的数据x0为:反正正正正反正正正反
那么这个似然函数(概率密度函数的联合概率密度函数)为
最大似然估计,顾名思义就是要通过θ的取值让上述函数值得到最大,通过计算发现θ=0.7时似然函数取得最大值。
即:抛十次硬币,发现7次硬币正面向上,频率学派认为正面向上的概率是0.7.
贝叶斯学派不服了:明明需要正常来说硬币是均匀的,正面向上的概率是0.5啊。于是就引入了先验概率。要考虑先验,为此就引入了最大后验概率估计。
后验概率可以简单理解为似然*先验。那最大后验就是在刚刚的最大似然函数里面,再乘上一个先验,也就是P(x0|θ)P(θ)。
其实MAP是在最大化,不够x0是确定的(即反正正正。。),这是一个可以由实验得到的常数,所有可以忽略分母,只关注分子。
刚刚说贝叶斯学派认为正面向上的概率是0.5,所以我们先验地认为θ服从一个均值为0.5,方差为0.1的正太分布。下面是它的概率密度函数,这里我们一定要注意,贝叶斯在处理连续变量时直接将概率密度当做概率来计算!
相关资料:https://www.zhihu.com/question/51992999
https://zh.wikipedia.org/wiki/%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%AE%9A%E7%90%86#cite_note-2
则将似然和先验相乘后,即P(x0|θ)P(θ):
此时已经发生了偏移,函数取最大值时不再是0.7。实际上在θ=0.558时函数取得了最大值。即用最大后验概率估计,得到θ=0.558.
这时贝叶斯派笑了,θ不再是0.7。那怎样说服贝叶斯派相信θ=0.7呢。如果做了1000次实验,700次都是正面向上,这时似然函数
还是乘以我们刚刚的先验(概率密度函数),则P(x0|θ)P(θ)为:
这时发现θ=0.696处,后验函数最大。这时考虑了先验的贝叶斯派也必须承认θ在0.7附近了。
PS:遇上顽固的贝叶斯派,认为P(θ=0.5)=1,也就是θ的概率密度函数图像类似于移到了0.5处的单位冲激函数。所以它们相乘后的图像也是移到了0.5处的单位冲激函数,此时后验函数在0.5取得最大。
最大似然估计与最大后验估计的区别
最大似然可以理解为,先验是均匀分布的最大后验(均匀分布的概率密度图像为一条横线)。
朴素贝叶斯算法过程
假设训练集为m个样本n个维度,如下:
共有K个特征输出类别,分别为,每个特征输出类别的样本个数为m1,m2...mk。
输出为实例X的分类。
算法流程
(1)如果没有Y的先验概率,则计算Y的K个先验概率:,这是因为做了拉普拉斯平滑,防止某些时候某些类别在样本中没有出现使概率为0,影响后验估计。
(2)分别计算第k个类别的第j维特征的第I个取值条件概率:
若是离散值:
对于稀疏二项离散值,可以假设Xj符合伯努利分布,即特征Xj出现记为1,不出现记为0。这样得到是在样本类别Ck中,Xj出现的频率吗,其中Xj取值为0和1:
若是连续值,直接求正态分布的参数:
(3)对于实例X,分别计算
(4)确定实例X和分类C_result
从上面可以发现没有复杂的求导和矩阵运算,因此效率很高。
小结
主要优点:
(1)比较稳定,能够处理多分类任务,对小数据的表现很好,当数据量超出内存时,可以一批批去增量训练。
(2)对缺失数据不太敏感,算法简单,常用于文本分类。
主要缺点:
(1)实际应用中,往往属性类别比较多,且相关性较大,分类效果不好。因为朴素贝叶斯假设属性之间相互独立,在属性相关性较小时,朴素贝叶斯性能最为良好,
(2)有时因为假设的先验概率的问题导致预测效果不佳。
(3)对输入数据的表达形式很敏感。