朴素贝叶斯算法的基本思想是建立特征X与输出 Y 之间的联合概率分布 P(X,Y) ,在对给定的特征进行预测时,通过贝叶斯定理求出所有可能的输出 P(X∣Y) ,取其中最大的作为预测结果。其优点是模型简单,效率高,在很多领域有广泛的使用。
生成学习算法与判别学习算法
生成学习算法与判别学习算法是监督学习的两种方式,今天要说的朴素贝叶斯算法是生成算法的一种,而之前讲的逻辑回归与后面将要学习的SVM则是属于判别学习方法,我们首先要搞清楚两种算法的区别。
贴一张图片,我觉得可以很直观的看出两种学习算法的区别。

对于监督学习来说,我们的目标始终是求出 P(Y∣X) ,判别学习算法会直接对P(Y∣X)进行建模,例如在逻辑回归中 P(Y∣X;θ)=hθ(x)y(1−hθ(x))1−y ,当有一组需要预测的样本时,我们可以直接判别出他的输出类别,在图中可以明显看出,实际上判别算法是生成了一条判别边界的,在边界的两边会输出不同结果。生成学习算法是对 P(X,Y)进行建模,在右图中,并不存在一个判别边界,而是对两类样本分别建模,当有一个红色小三角的输入时,根据条件概率公式分别计算出小三角属于蓝色以及黄色的概率,取较大的那个作为小三角的类别。
统计学理论基础
在了解朴素贝叶斯算法之前,我们需要一些统计学知识作为基础,下面的公式部分摘自《概率论与数理统计》,只是把其中的A,B换成了X,Y以方便理解。
假设X, Y是两个事件,以下公式表示事件X发生的条件(前提)下,事件Y发生的概率。
P(Y∣X)=P(X)P(XY)
P(x1,x2,...,xn)=P(x1)i=2∏nP(xi∣x1,...,xi−1)
假设X, Y是两个事件,若满足以下等式则称事件X,Y相互独立。
P(XY)=P(X)P(Y)
如果事件Y1、Y2、Y3…Yn 构成一个完备事件组,即它们两两互不相容,其和为全集,则对任一事件X有
P(X)=n∑P(X∣Yn)P(Yn)
由条件概率公式可得
P(XY)=P(X)P(Y∣X)=P(Y)P(X∣Y)
P(Y∣X)=P(X)P(X∣Y)P(Y)
将全概率公式带入,即得贝叶斯公式
P(Yn∣X)=∑nP(X∣Yn)P(Yn)P(X∣Yn)P(Yn)
算法原理
假设我们有训练集:
{x1(1),x2(1),...,xn(1),y(1)}
{x1(2),x2(2),...,xn(2),y(2)}
...
{x1(m),x2(m),...,xn(m),y(m)}
其中,n 表示特征数, m 表示样本数,假设 {y(1),y(2),...,y(m)}∈{c1,c2,...,cK} ,分类结果有 K 种取值可能。
下面对其中一个类别进行建模,考虑 y=ck 的一般情况。
P(X,Y=ck)=P(x1,x2,...,xn,Y=ck)
将上式用条件概率的链式法则打开,得到
P(X,Y=ck)=P(x1,x2,...,xn,Y=ck)=P(Y=ck)∙P(x1∣Y=ck)∙P(x2∣Y=ck,x1)∙...
注意到,后面的条件概率非常复杂(复杂到我都不想写了),有指数级数量的参数,这在实际中显然不可行,所以贝叶斯算法引入了一个非常强的假设,就是所有的特征都是条件独立的,这也是朴素两字的意思,上面的式子就可以简化为
=P(Y=ck)∙P(x1∣Y=ck)∙P(x2∣Y=ck)∙...∙P(xn∣Y=ck)
=P(Y=ck)i=1∏nP(xi∣Y=ck)
根据贝叶斯公式,我们要求的
P(Y=ck∣X)=∑j=1KP(X∣Y=cj)P(Y=cj)P(Y=ck)∏i=1nP(xi∣Y=ck)
算法预测过程
在给定训练集的情况下,假设需要预测的数据特征为 {f1,f2,...,fn} ,我们需要计算它属于每个类别的概率,并取最大值,即求:
argmaxckP(Y=ck∣X)
而P(Y=ck∣X) 的分母对每个 ck 都是相同的,为了简化计算,舍去分母:
argmaxckP(Y=ck)i=1∏nP(xi=fi∣Y=ck)
下面详细介绍上式各项怎么求出
P(Y=ck) ,表示类别为 ck 的概率,在样本数充足的情况下,可用 样本总数类别为ck的样本数 求得。
P(xi=fi∣Y=ck)表示在类别为ck的情况下,类别取 fi 的概率。
第一种情况,若 xi 为离散属性, 可以用
类别为ck的样本总数在类别为ck的样本中第i个属性为fi的样本数
求得,需要注意的是,如果需要预测的数据中出现了训练数据集中没有出现过的特征,那么这个概率就会是0,将造成无法预测的情况,这显然不是我们想看到的。于是会在分子分母上各加上一个数,这个操作叫做拉普拉斯平滑,则上面的式子会变为 :
类别为ck的样本总数+第i个特征可能的取值数在类别为ck的样本中第i个特征为fi的样本数+1
第二种情况,若 xi 为连续属性,则考虑概率密度函数,假设在该类别上这个特征符合高斯分布,即 P(xi∣Y=ck)∼ℵ(μ,σ2),其中 μ 和 σ2 分别是类别为 ck 的样本中第 i 个特征取值的均值和方差。由此可以求出
P(xi=fi∣Y=ck)=2πσ1exp(−2σ2(xi−μ)2)
至此,算法的原理基本总结完毕,下面举个例子希望可以帮助大家理解。
举例说明
这个例子摘自西瓜书,具体说明了朴素贝叶斯算法的预测过程,还是具体的例子好理解啊,很棒!
训练集:

需要预测的样本:

各个概率的计算:

离散型特征:

连续型特征:

最后判断:

至此,朴素贝叶斯算法的原理总结就结束了,其实还有半朴素贝叶斯算法的,等以后遇到了研究一下再补上吧。如果你觉得有用的话不妨点个赞哦。
参考:
《机器学习》-周志华
《统计学习方法》-李航