引言
bayes在统计学上是一个非常重要的概念,直接导致了一个流派的诞生,本章我们首先回顾一下bayes公式,以及其在统计学上的一些概念,然后将其引入到机器学习中,引出朴素贝叶斯算法。朴素贝叶斯算法在垃圾邮件过滤等问题上应用广泛,是一个很简单且很实用的算法。
Bayes定理
在数学上,我们用贝叶斯定理表示随机事件的条件概率,即 P(A|B) P ( A | B ) 表示事件B发生的情况下A发生的概率。
通过下图,我们可以得到下面的公式
P(A|B)P(B)=P(B|A)P(A) P ( A | B ) P ( B ) = P ( B | A ) P ( A )
这个简单的公式就是bayes公式。
将上面的公式做一下变化,可以得到
P(Ai|B)=P(B|Ai)P(Ai)∑ni=1P(B|Ai)P(Ai) P ( A i | B ) = P ( B | A i ) P ( A i ) ∑ i = 1 n P ( B | A i ) P ( A i )
其中 P(Ai) P ( A i ) 我们称之为先验概率, P(Ai|B) P ( A i | B ) 我们称之为 给定条件B下的 Ai A i 的后验概率。
这个公式就有意义了,我们就将后验概率和先验概率以及条件概率结合到了一起了。
那么这个公式有什么用呢?我们继续向下看。
朴素贝叶斯
所谓的朴素贝叶斯就是指满足了两个基本条件假设的算法:
1) 贝叶斯定理
2) 特征条件独立
为什么要强调特征独立假设呢?其实这个是朴素贝叶斯和贝叶斯的本质区别,我们继续向下看。
假设给定训练数据 {(x1,y1),(x2,y2),...,(xN,yN)} { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } 其中 x x 表示特征, y y 为标签,假设取值为 {c1,c2,...,cK} { c 1 , c 2 , . . . , c K } ,那么我们希望得到下面的模型,即给定特征 x x ,求标签 y y ,即最大化概率 P(Y=ck|Xn=(x1,x2,...,xn)) P ( Y = c k | X n = ( x 1 , x 2 , . . . , x n ) ) 。
根据Bayes定理,有:
P(Y=ck|X=(x1,x2,...,xn))=P(X=(x1,x2,...,xn)|Y=ck)P(Y=ck)P(X=(x1,x2,...,xn))=P(X=(x1,x2,...,xn)|Y=ck)P(Y=ck)∑kP(X=(x1,x2,...,xn)|Y=ck)P(Y=ck) P ( Y = c k | X = ( x 1 , x 2 , . . . , x n ) ) = P ( X = ( x 1 , x 2 , . . . , x n ) | Y = c k ) P ( Y = c k ) P ( X = ( x 1 , x 2 , . . . , x n ) ) = P ( X = ( x 1 , x 2 , . . . , x n ) | Y = c k ) P ( Y = c k ) ∑ k P ( X = ( x 1 , x 2 , . . . , x n ) | Y = c k ) P ( Y = c k )
而根据之前的特征独立假设,有:
P(X=(x1,x2,...,xn)|Y=ck)=∏nj=1P(xj|Y=ck) P ( X = ( x 1 , x 2 , . . . , x n ) | Y = c k ) = ∏ j = 1 n P ( x j | Y = c k )
所以有:
P(Y=ck|X=(x1,x2,...,xn))=P(Y=ck)∏nj=1P(xj|Y=ck)∑kP(Y=ck)∏nj=1P(xj|Y=ck) P ( Y = c k | X = ( x 1 , x 2 , . . . , x n ) ) = P ( Y = c k ) ∏ j = 1 n P ( x j | Y = c k ) ∑ k P ( Y = c k ) ∏ j = 1 n P ( x j | Y = c k )
因为分母相等,所以实际上 max(P(Y=ck|X=(x1,x2,...,xn))) m a x ( P ( Y = c k | X = ( x 1 , x 2 , . . . , x n ) ) ) 取决于分子 P(Y=ck)∏nj=1P(xj|Y=ck) P ( Y = c k ) ∏ j = 1 n P ( x j | Y = c k ) ,因此我们只要计算出先验概率 P(Y=ck) P ( Y = c k ) 以及条件概率的累积 ∏nj=1P(xj|Y=ck) ∏ j = 1 n P ( x j | Y = c k ) ,就可以算出来特征属于每一个类别的概率大小顺序,那么概率最大对应的标签就是特征的对应的类别。
因此问题转化为了最大化下面的公式:
y=argmaxck(P(Y=ck)∏nj=1P(xj|Y=ck)) y = a r g m a x c k ( P ( Y = c k ) ∏ j = 1 n P ( x j | Y = c k ) )
那么问题就转化为了需要估计参数 P(Y=ck) P ( Y = c k ) 和 P(xj|Y=ck) P ( x j | Y = c k )
极大似然估计
这里我们用极大似然估计来计算上面的两个概率,这两个概率就是朴素贝叶斯模型中的参数
P(Y=ck)=∑Ni=1I(yi=ck)N,k=1,2,...,K P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , . . . , K
假设特征 xj x j 的取值范围为 {aj1,aj2,...ajSj} { a j 1 , a j 2 , . . . a j S j } ,则有:
P(xj=ajl|Y=ck)=∑Ni=1I(xj=ajl,yi=ck)∑Ni=1I(yi=ck) P ( x j = a j l | Y = c k ) = ∑ i = 1 N I ( x j = a j l , y i = c k ) ∑ i = 1 N I ( y i = c k )
bayes估计
上面我们用了极大似然估计,然而极大似然估计可能会出现概率值为0的情况,这个影响后验概率的计算,因此引入贝叶斯估计,即条件概率改为如下的公式:
P(xj=ajl|Y=ck)=∑Ni=1I(xj=ajl,yi=ck)+λ∑Ni=1I(yi=ck)+Sjλ P ( x j = a j l | Y = c k ) = ∑ i = 1 N I ( x j = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ
先验概率修改为:
P(Y=ck)=∑Ni=1I(yi=ck)+λN+Sjλ,k=1,2,...,K P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + S j λ , k = 1 , 2 , . . . , K
一般情况下可以取 λ=1 λ = 1
朴素贝叶斯算法
有了上面的推导,我们可以得到朴素贝叶斯的算法,如下所示:
1) 根据训练数据求取先验概率和条件概率
P(Y=ck)=∑Ni=1I(yi=ck)N,k=1,2,...,K P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , . . . , K
P(xj=ajl|Y=ck)=∑Ni=1I(xj=ajl,yi=ck)∑Ni=1I(yi=ck) P ( x j = a j l | Y = c k ) = ∑ i = 1 N I ( x j = a j l , y i = c k ) ∑ i = 1 N I ( y i = c k )
(这里也可以采用贝叶斯估计的公式)
2) 根据给定特征,计算
P(Y=ck)∏nj=1P(xj|Y=ck) P ( Y = c k ) ∏ j = 1 n P ( x j | Y = c k )
3) 确定特征的类别
y=argmaxck(P(Y=ck)∏nj=1P(xj|Y=ck)) y = a r g m a x c k ( P ( Y = c k ) ∏ j = 1 n P ( x j | Y = c k ) )