朴素贝叶斯算法与贝叶斯估计

在看贝叶斯算法的相关内容时,你一定被突如其来的数学概念搞得头昏脑涨。比如极大似然估计(Maximum likelihood estimation ),极大后验概率估计(Maximum a posteriori estimation),先验概率(Prior probability),后验概率(Posteriori probability)等。所以后面我就本着先学会用,再谈概念的路线来进行。

1. 朴素贝叶斯算法

先说结论: 朴素贝叶斯就是用贝叶斯公式外加“朴素”的条件来求解样本所属类别的概率

1.1 理解朴素贝叶斯

先不予证明的给出条件概率公式,以及贝叶斯定理(公式)
P ( A ∣ B ) = P ( A B ) P ( B ) (1.1) \begin{aligned} &P(A|B)=\frac{P(AB)}{P(B)} \end{aligned}\tag{1.1} P(AB)=P(B)P(AB)(1.1)

P ( A i ∣ B ) = P ( A i ) P ( B ∣ A i ) ∑ i = 1 n P ( A i ) P ( B ∣ A i ) (1.2) \begin{aligned} &P(A_i|B)=\frac{P(A_i)P(B|A_i)}{\sum_{i=1}^nP(A_i)P(B|A_i)} \end{aligned}\tag{1.2} P(AiB)=i=1nP(Ai)P(BAi)P(Ai)P(BAi)(1.2)

设输入空间 X ⊆ R n \mathcal{X}\subseteq R^n XRn,为 n n n维向量的集合,输出空间为类标记 Y = { c 1 , c 2 , . . . , c m } \mathcal{Y}=\{c_1,c_2,...,c_m\} Y={c1,c2,...,cm}.输入为特征向量 x ∈ X x\in\mathcal{X} xX,输出为类标记 y ∈ Y y\in \mathcal{Y} yY X X X是定义在输入空间 X \mathcal{X} X上的随机向量, Y Y Y是定义在输出空间 Y \mathcal{Y} Y上的随机变量。也就是说 X X X是一个 m × n m\times n m×n的矩阵, y y y为类标签。训练集:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} T={(x1,y1),(x2,y2),...,(xm,ym)}

则有:
P ( Y = c k ) = # c k m , k = 1 , 2 , . . . , K (1.3) \begin{aligned} &P(Y=c_k) = \frac{\#c_k}{m},k=1,2,...,K \end{aligned}\tag{1.3} P(Y=ck)=m#ck,k=1,2,...,K(1.3)

( # c k 表示该类别一共有多少个样本 ) P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , . . . , X ( n ) = x ( n ) ∣ Y = c k ) (1.4) \begin{aligned} &(\#c_k\textrm{表示该类别一共有多少个样本})\\[2ex] &P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=c_k) \end{aligned}\tag{1.4} (#ck表示该类别一共有多少个样本)P(X=xY=ck)=P(X(1)=x(1),...,X(n)=x(n)Y=ck)(1.4)

又因为朴素贝叶斯对条件概率分布做了条件独立性假设,即有 P ( A B ∣ D ) = P ( A ∣ D ) P ( B ∣ D ) P(AB|D)=P(A|D)P(B|D) P(ABD)=P(AD)P(BD),而这也是“朴素”一词的由来,因此公式 ( 1.4 ) (1.4) (1.4)可写成如下形式:
P ( X = x ∣ Y = c k ) = ∏ i = 1 n P ( X ( i ) = x ( i ) ∣ Y = c k ) (1.5) P(X=x|Y=c_k)=\prod_{i=1}^nP(X^{(i)}=x^{(i)}|Y=c_k)\tag{1.5} P(X=xY=ck)=i=1nP(X(i)=x(i)Y=ck)(1.5)

由贝叶斯公式 ( 1.2 ) (1.2) (1.2)可知:
P ( Y = c k ∣ X = x ) P ( X = x ∣ Y = c k ) P ( Y = c k ) ∑ i = 1 n P ( X = x ∣ Y = c i ) P ( Y = c i ) (1.6) P(Y=c_k|X=x)\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{i=1}^nP(X=x|Y=c_i)P(Y=c_i)}\tag{1.6} P(Y=ckX=x)i=1nP(X=xY=ci)P(Y=ci)P(X=xY=ck)P(Y=ck)(1.6)

根据公式 ( 1.6 ) (1.6) (1.6)我们可以计算出任一样本 x i x_i xi属于类别 c k c_k ck的概率,选择其中概率最大者便可作为其分类的类标。但我们发现, ( 1.6 ) (1.6) (1.6)中,对于每个样本的计算都有相同的分母,因此可以略去。则再代入公式 ( 1.5 ) (1.5) (1.5),可化简为:
y = a r g max ⁡ c k P ( Y = c k ) ∏ i = 1 n P ( X ( i ) = x ( i ) ∣ Y = c k ) (1.7) y=arg\max_{c_k}P(Y=c_k)\prod_{i=1}^nP(X^{(i)}=x^{(i)}|Y=c_k)\tag{1.7} y=argckmaxP(Y=ck)i=1nP(X(i)=x(i)Y=ck)(1.7)

注: y = a r g max ⁡ c k y=arg\max_{c_k} y=argmaxck的含义是,取使得y最大时的 c k c_k ck的值


说了这么多,可能还是云里雾里的,举个例子就明白了:

试由下表的训练集学习一个朴素贝叶斯分类器,并确定 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T的类标记 y y y。表中 X ( 1 ) , X ( 2 ) X^{(1)},X^{(2)} X(1),X(2)为特征,取值集合分别为 A 1 = { 1 , 2 , 3 } , A 2 = { S , M , L } , Y A_1=\{1,2,3\},A_2=\{S,M,L\},Y A1={1,2,3},A2={S,M,L},Y为类标记, Y ∈ C = { 1 , 0 } Y\in C=\{1,0\} YC={1,0}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 X ( 1 ) 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 X ( 2 ) S M M S S S M M L L L M M L L Y 0 0 1 1 0 0 0 1 1 1 1 1 1 1 0 \begin{array}{c|lr} & 1&2&3&4&5&6&7&8&9&10&11&12&13&14&15\\ \hline X^{(1)}&1&1&1&1&1&2&2&2&2&2&3&3&3&3&3\\ X^{(2)}&S&M&M&S&S&S&M&M&L&L&L&M&M&L&L \\ Y&0&0&1&1&0&0&0&1&1&1&1&1&1&1&0 \end{array} X(1)X(2)Y11S021M031M141S151S062S072M082M192L1102L1113L1123M1133M1143L1153L0

易知:
P ( Y = 1 ) = 9 15 , P ( Y = 0 ) = 6 15 P ( X ( 1 ) = 1 ∣ Y = 1 ) = 2 9 , P ( X ( 1 ) = 2 ∣ Y = 1 ) = 3 9 , P ( X ( 1 ) = 3 ∣ Y = 1 ) = 4 9 P ( X ( 2 ) = S ∣ Y = 1 ) = 1 9 , P ( X ( 2 ) = M ∣ Y = 1 ) = 4 9 , P ( X ( 2 ) = L ∣ Y = 1 ) = 4 9 P ( X ( 1 ) = 1 ∣ Y = 0 ) = 3 6 , P ( X ( 1 ) = 2 ∣ Y = 0 ) = 2 6 , P ( X ( 1 ) = 3 ∣ Y = 0 ) = 1 6 P ( X ( 2 ) = S ∣ Y = 0 ) = 3 6 , P ( X ( 2 ) = M ∣ Y = 0 ) = 2 6 , P ( X ( 2 ) = L ∣ Y = 0 ) = 1 6 \begin{aligned} &P(Y=1)=\frac{9}{15},P(Y=0)=\frac{6}{15}\\[1ex] &P(X^{(1)}=1|Y=1)=\frac{2}{9},P(X^{(1)}=2|Y=1)=\frac{3}{9},P(X^{(1)}=3|Y=1)=\frac{4}{9}\\[1ex] &P(X^{(2)}=S|Y=1)=\frac{1}{9},P(X^{(2)}=M|Y=1)=\frac{4}{9},P(X^{(2)}=L|Y=1)=\frac{4}{9}\\[1ex] &P(X^{(1)}=1|Y=0)=\frac{3}{6},P(X^{(1)}=2|Y=0)=\frac{2}{6},P(X^{(1)}=3|Y=0)=\frac{1}{6}\\[1ex] &P(X^{(2)}=S|Y=0)=\frac{3}{6},P(X^{(2)}=M|Y=0)=\frac{2}{6},P(X^{(2)}=L|Y=0)=\frac{1}{6} \end{aligned} P(Y=1)=159,P(Y=0)=156P(X(1)=1Y=1)=92,P(X(1)=2Y=1)=93,P(X(1)=3Y=1)=94P(X(2)=SY=1)=91,P(X(2)=MY=1)=94,P(X(2)=LY=1)=94P(X(1)=1Y=0)=63,P(X(1)=2Y=0)=62,P(X(1)=3Y=0)=61P(X(2)=SY=0)=63,P(X(2)=MY=0)=62,P(X(2)=LY=0)=61

以上的计算过程,就是用训练集训练好一个模型的参数,下面进行预测。

对于给定的 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T:
P ( Y = 1 ) P ( X ( 1 ) = 2 ∣ Y = 1 ) P ( X ( 2 ) = S ∣ Y = 1 ) = 9 15 3 9 1 9 = 1 45 P ( Y = 0 ) P ( X ( 1 ) = 2 ∣ Y = 0 ) P ( X ( 2 ) = S ∣ Y = 0 ) = 6 15 2 6 3 6 = 1 15 \begin{aligned} &P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)=\frac{9}{15}\frac{3}{9}\frac{1}{9}=\frac{1}{45}\\[1ex] &P(Y=0)P(X^{(1)}=2|Y=0)P(X^{(2)}=S|Y=0)=\frac{6}{15}\frac{2}{6}\frac{3}{6}=\frac{1}{15} \end{aligned} P(Y=1)P(X(1)=2Y=1)P(X(2)=SY=1)=1599391=451P(Y=0)P(X(1)=2Y=0)P(X(2)=SY=0)=1566263=151

于是我们可以知道,样本 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T属于 y = 0 y=0 y=0.

1.2 概念解释

  • 先验概率: 所谓先验概率指的就是根据以往经验得出来的概率;
    例如,可以通过西瓜的颜色,敲的声音来判断是否成熟;因为你已经有了通过颜色和声音来判断的“经验”,不管这个经验是你自己学习的还是别人告诉你的。又如在上面的例子中,在拿到一个新样本的时候,事先上面也不做,我们就可以通过训练集这一历史数据来得出 P ( Y = 0 ) = 6 15 , P ( Y = 1 ) = 9 15 P(Y=0)=\frac{6}{15},P(Y=1)=\frac{9}{15} P(Y=0)=156,P(Y=1)=159,因为这是我们通过已有的经验得到的;最后举个例子,办公室失窃了,理论上每个人都可能是小偷;但我们可以根据对每个人的了解,人品分析得出一个可能性,比如张三偷的可能性为20%,李四偷的可能性为30%,而这就被称之为先验概率,是通过历史经验得来的。

  • 后验概率: 所谓后验概率指的就是贝叶斯定理(公式)求解的结果;
    例如,上面说的办公室失窃,我们可以通过先验概率知道,张三偷的可能性为20%,李四偷的可能性为30%,但事实是多少呢?那就得通过贝叶斯公式来进行计算了。

  • 极大似然概率估计: 所谓极大似然概率估计,就是求解满足某个样本最有可能出现时的概率以及此时的参数值。详见

1.3 求解步骤

输入:
训练数据 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} T={(x1,y1),(x2,y2),...,(xm,ym)},其中 x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T xi=(xi(1),xi(2),...,xi(n))T x i ( j ) x_i^{(j)} xi(j)是第 i i i个样本的第 j j j维特征, x i ( j ) ∈ { a j 1 , a j 2 , . . . , a j S j } x_i^{(j)}\in\{a_{j1},a_{j2},...,a_{jS_j}\} xi(j){aj1,aj2,...,ajSj} a j l a_{jl} ajl是第 j j j维特征可能取得第 l l l个值, j = 1 , 2 , . . . , n ;      l = 1 , 2 , . . . , S j ;      y i ∈ { c 1 , c 2 , . . . , c k } j=1,2,...,n;\;\;l=1,2,...,S_j;\;\;y_i\in\{c_1,c_2,...,c_k\} j=1,2,...,n;l=1,2,...,Sj;yi{c1,c2,...,ck} S j S_j Sj表示第j为特征可取值个数;
输出:实例 x x x的分类

(1)用极大似然估计计算先验概率及条件概率:
P ( Y = c k ) = ∑ i = 1 m I ( y i = c k ) m , k = 1 , 2 , . . . , K (1.8) \begin{aligned} &P(Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(y_i=c_k)}{m},k=1,2,...,K\tag{1.8}\\[2ex] \end{aligned} P(Y=ck)=mi=1mI(yi=ck),k=1,2,...,K(1.8)

P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 m I ( x i ( j ) = a j l , y i = c k ) ∑ i = 1 m I ( y i = c k ) j = 1 , 2 , . . . , n ;      l = 1 , 2 , . . . , S j ;      k = 1 , 2 , . . . , K (1.9) \begin{aligned} &P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(x_i^{(j)}=a_{jl,}y_i=c_k)}{\displaystyle\sum_{i=1}^mI(y_i=c_k)}\tag{1.9}\\[1ex] &j=1,2,...,n;\;\;l=1,2,...,S_j;\;\;k=1,2,...,K \end{aligned} P(X(j)=ajlY=ck)=i=1mI(yi=ck)i=1mI(xi(j)=ajl,yi=ck)j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K(1.9)

注:最好是结合着前面的例子来看公式

(2)对于给定的实例 x = ( x ( 1 ) , x ( 2 ) , . . . , x ( n ) ) T x=(x^{(1)},x^{(2)},...,x^{(n)})^T x=(x(1),x(2),...,x(n))T

P ( Y = c k ) ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) , k = 1 , 2 , . . . , K (1.10) \begin{aligned} P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k),k=1,2,...,K\tag{1.10} \end{aligned} P(Y=ck)j=1nP(X(j)=x(j)Y=ck),k=1,2,...,K(1.10)

(3)确定实例 x x x的类别
y = a r g max ⁡ c k P ( Y = c k ) ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) (1.11) \begin{aligned} y = arg\max_{c_k}P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)\tag{1.11} \end{aligned} y=argckmaxP(Y=ck)j=1nP(X(j)=x(j)Y=ck)(1.11)

2. 贝叶斯估计

从上面我们可以算是大致了解了朴素贝叶斯的过程,但是有一个不能忽略的问题就是:在训练集不充分的情况下,缺少某个维度的条件概率时,(例如,如果 P ( X ( 1 ) = 1 ∣ Y = 1 ) P(X^{(1)}=1|Y=1) P(X(1)=1Y=1)为0的话)那么在预测的时候,将会产生很大的错差。解决这个问题的办法就是在各个估计中加入平滑项,即贝叶斯估计

P λ ( Y = c k ) = ∑ i = 1 m I ( y i = c k ) + λ m + K λ (2.1) \begin{aligned} &P_{\lambda}(Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(y_i=c_k)+\lambda}{m+K\lambda}\tag{2.1} \end{aligned} Pλ(Y=ck)=m+Kλi=1mI(yi=ck)+λ(2.1)
P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 m I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 m I ( y i = c k ) + S j λ (2.2) \begin{aligned} &P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(x_i^{(j)}=a_{jl,}y_i=c_k)+\lambda}{\displaystyle\sum_{i=1}^mI(y_i=c_k)+S_j\lambda}\tag{2.2} \end{aligned} Pλ(X(j)=ajlY=ck)=i=1mI(yi=ck)+Sjλi=1mI(xi(j)=ajl,yi=ck)+λ(2.2)

式中 λ ≥ 0 \lambda\geq0 λ0.当 λ = 0 \lambda=0 λ=0时,就是极大似然估计;当 λ = 1 \lambda=1 λ=1时,称为拉普拉斯平滑(Laplace smoothing),这也是常用的做法。

我们将上面的例子用拉普拉斯平滑( λ = 1 \lambda=1 λ=1)再来计算一次。在计算之前我们知道,此时 K K K为类别数2, S j S_j Sj表示第 j j j个维度可能取值的个数,即 S 1 = 3 , S 2 = 3 S_1=3,S_2=3 S1=3,S2=3

易知:
P ( Y = 1 ) = 10 17 , P ( Y = 0 ) = 7 17 P ( X ( 1 ) = 1 ∣ Y = 1 ) = 3 12 , P ( X ( 1 ) = 2 ∣ Y = 1 ) = 4 12 , P ( X ( 1 ) = 3 ∣ Y = 1 ) = 5 12 P ( X ( 2 ) = S ∣ Y = 1 ) = 2 12 , P ( X ( 2 ) = M ∣ Y = 1 ) = 5 12 , P ( X ( 2 ) = L ∣ Y = 1 ) = 5 12 P ( X ( 1 ) = 1 ∣ Y = 0 ) = 4 9 , P ( X ( 1 ) = 2 ∣ Y = 0 ) = 3 9 , P ( X ( 1 ) = 3 ∣ Y = 0 ) = 2 9 P ( X ( 2 ) = S ∣ Y = 0 ) = 4 9 , P ( X ( 2 ) = M ∣ Y = 0 ) = 3 9 , P ( X ( 2 ) = L ∣ Y = 0 ) = 2 9 \begin{aligned} &P(Y=1)=\frac{10}{17},P(Y=0)=\frac{7}{17}\\[1ex] &P(X^{(1)}=1|Y=1)=\frac{3}{12},P(X^{(1)}=2|Y=1)=\frac{4}{12},P(X^{(1)}=3|Y=1)=\frac{5}{12}\\[1ex] &P(X^{(2)}=S|Y=1)=\frac{2}{12},P(X^{(2)}=M|Y=1)=\frac{5}{12},P(X^{(2)}=L|Y=1)=\frac{5}{12}\\[1ex] &P(X^{(1)}=1|Y=0)=\frac{4}{9},P(X^{(1)}=2|Y=0)=\frac{3}{9},P(X^{(1)}=3|Y=0)=\frac{2}{9}\\[1ex] &P(X^{(2)}=S|Y=0)=\frac{4}{9},P(X^{(2)}=M|Y=0)=\frac{3}{9},P(X^{(2)}=L|Y=0)=\frac{2}{9} \end{aligned} P(Y=1)=1710,P(Y=0)=177P(X(1)=1Y=1)=123,P(X(1)=2Y=1)=124,P(X(1)=3Y=1)=125P(X(2)=SY=1)=122,P(X(2)=MY=1)=125,P(X(2)=LY=1)=125P(X(1)=1Y=0)=94,P(X(1)=2Y=0)=93,P(X(1)=3Y=0)=92P(X(2)=SY=0)=94,P(X(2)=MY=0)=93,P(X(2)=LY=0)=92

以上的计算过程,就是用训练集训练好一个模型的参数,下面进行预测。

对于给定的 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T:
P ( Y = 1 ) P ( X ( 1 ) = 2 ∣ Y = 1 ) P ( X ( 2 ) = S ∣ Y = 1 ) = 10 17 4 12 2 13 = 5 153 P ( Y = 0 ) P ( X ( 1 ) = 2 ∣ Y = 0 ) P ( X ( 2 ) = S ∣ Y = 0 ) = 7 17 3 9 4 9 = 28 459 \begin{aligned} &P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)=\frac{10}{17}\frac{4}{12}\frac{2}{13}=\frac{5}{153}\\[1ex] &P(Y=0)P(X^{(1)}=2|Y=0)P(X^{(2)}=S|Y=0)=\frac{7}{17}\frac{3}{9}\frac{4}{9}=\frac{28}{459} \end{aligned} P(Y=1)P(X(1)=2Y=1)P(X(2)=SY=1)=1710124132=1535P(Y=0)P(X(1)=2Y=0)P(X(2)=SY=0)=1779394=45928

于是我们可以知道,样本 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T属于 y = 0 y=0 y=0.

3. 概念辨析

对于不同的书,对于一些算法或算法行为有着不同的称谓,有的概念名称甚至连原书作者也拿捏不准,这也导致我们在初学翻阅各种资料时候发现一会儿又多了这个概念,一会儿又多了那个概念,及其痛苦。但是名称不重要,重要的是我们知道所指代的具体东西就行。下面就整理出笔者在学习中遇到过的各种“叫法”,仅供参考。

这里写图片描述
所有的算法都称之为贝叶斯分类器,朴素贝叶斯有三种叫法,加入平滑项后叫贝叶斯估计

4.示例

示例见此处

参考

  • 《统计学习》
  • 《Python与机器学习实战》
  • 《Python机器学习及实践》
  • 《机器学习实战》
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页