1. 程式人生 > >極大似然估計法推出樸素貝葉斯法中的先驗概率估計公式如何理解

極大似然估計法推出樸素貝葉斯法中的先驗概率估計公式如何理解

下面的答案將先照《統計學習方法》一書將問題補充完整,以便手上沒這本書的人也能看明白,然後再給出推導過程。
設輸入空間為 n 維向量的集合,輸出空間為類標記集合 {c_{1} ,c_{2}, ... ,c_{k}}。輸入為特徵向量 x 屬於輸入空間,輸出為類標記 y 屬於輸出空間。X 是定義在輸入空間上的隨機向量,Y 是定義在輸出空間上的隨機向量。P(X,Y) 是 X 和 Y 的聯合概率分佈。訓練資料集

T={(x_{1}, y_{1}),(x_{2}, y_{2}),...,(x_{N}, y_{N})}

由 P(X,Y) 獨立同分布產生。
樸素貝葉斯通過訓練資料集學習聯合概率分佈 P(X,Y)。具體地,學習以下先驗概率分佈及條件概率分佈。先驗概率分佈

P(Y=c_{k} ), k=1,2,...,K

條件概率分佈

P(X=x|Y=c_{k} )=P(X^{(1)}=x^{(1)} ,...,X^{(n)}=x^{(n)} |Y=c_{k}  ), k=1,2,...,K

於是學習到聯合概率分佈 P(X,Y)。(注意上式中的上標表示的是向量的第 n 維,而不是第 n 個訓練資料點)
條件概率分佈 P(X=x|Y=c_{k} )

有指數級數量的引數,其估計實際是不可行的。假設x^{(j)}可取值有S_{j}個,j=1,2,...n,Y 可取值有 K 個,那麼引數個數為 K\prod_{j=1}^{n} S_{j}
樸素貝葉斯法對條件概率分佈作了條件獨立性的假設。

P(X=x|Y=c_{k} )=P(X^{(1)}=x^{(1)} ,...,X^{(n)}=x^{(n)}|Y=c_{k} )=\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_{k} )

樸素貝葉斯法分類時,對給定的輸入 x,通過學習到的模型計算後驗概率分佈P(Y=c_{k} |X=x),將後驗概率最大的類作為輸出。後驗概率計算根據貝葉斯定理進行:

P(Y=c_{k}|X=x )=\frac{P(X=x|Y=c_{k} )P(Y=c_{k} )}{\sum_{k=1}^{K}{P(X=x|Y=c_{k} )P(Y=c_{k} )} }

將條件獨立性假設代入上式得:

P(Y=c_{k}|X=x )=\frac{P(Y=c_{k} )\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_{k} )}{\sum_{k=1}^{K}{P(Y=c_{k} )\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_{k} )} }

這是樸素貝葉斯分類的基本公式。於是,樸素貝葉斯分類器可表示為:

y=f(x)=argmax_{c_{k} } \frac{P(Y=c_{k} )\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_{k} )}{\sum_{k=1}^{K}{P(Y=c_{k} )\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_{k} )} }

注意到分母對所有c_{k}都是相同的,所以

y=argmax_{c_{k} } P(Y=c_{k} )\prod_{j=1}^{n} P(X^{(j)}=x^{(j)}|Y=c_{k}   )

從上式可以看出,樸素貝葉斯法的學習也就是要估計先驗概率P(Y=c_{k} )和條件分佈概率P(X^{(j)}=x^{(j)}|Y=c_{k}   ),可以應用極大似然估計法估計相應的概率,下面先給出書上的答案,再寫推導過程。
先驗概率P(Y=c_{k} )

的極大似然估計是

P(Y=c_{k} )=\frac{\sum_{i=1}^{n}{I(y_{i}=c_{k}  )} }{N} ,k=1,2,...,K

設第 j 個特徵 x^{(j)}可能取值的集合為 {a_{j1} ,a_{j2},...,a_{jS_{j} }},條件概率 P(X^{(j)}=a_{jl}|Y=c_{k}   ) 的極大似然估計是

P(X^{(j)}=a_{jl}|Y=c_{k}   )=\frac{\sum_{i=1}^{N}{I(x_{i}^{j} =a_{jl} ,y_{i}=c_{k}  )} }{\sum_{i=1}^{N}{I(y_{i} =c_{k} )} }

j=1,2,...,n;l=1,2,...,S_{j} ;k=1,2,...,K

式中,x_{i}^{j} 是第 i 個樣本的第 j 個特徵;x_{jl}是第 j 個特徵可能取的第 l 個值;I 為指示函式。

推導過程

p(y=c_{k} )p(x^{(j)}=a_{jl}|y=c_{k}   ) 作為引數。

p(y)=\prod_{k=1}^{K} p(y=c_{k} )^{I(y=c_{k})}
p(x|y=c_{k} )=\prod_{j=1}^{n} p(x^{(j)}|y=c_{k}  )
=\prod_{j=1}^{n}\prod_{l=1}^{S_{j} }  p(x^{(j)}={a_{jl } } |y=c_{k}  )^{I(x^{(j)}={a_{jl } } ,y=c_{k}) }

為敘述方便起見,下面以 \varphi 代表引數集合 {p(y=c_{k} ),p(x^{(j)}=a_{jl}|y=c_{k}   )}。

首先寫出 log 似然函式

\iota (\varphi )=log\prod_{i=1}^{N} p(x_{i} ,y_{i};\varphi  )
=log\prod_{i=1}^{N} p(x_{i}|y_{i};\varphi   )p(y_{i};\varphi  )
=log\prod_{i=1}^{N} (\prod_{j=1}^{n} p(x_{i}^{(j)} |y_{i} ;\varphi   ))p(y_{i};\varphi  )
=\sum_{i=1}^{N}{(logp(y_{i} ,\varphi )+\sum_{j=1}^{n}{logp(x_{i}^{(j)}|y_{i};\varphi    )} )}
=\sum_{i=1}^{N}{[\sum_{k=1}^{K}{logp(y=c_{k} )}^{I(y_{i}=c_{k})} +\sum_{j=1}^{n}{\sum_{l=1}^{S_{j}}{logp(x^{(j)} =a_{jl} |y_{i}=c_{k})^{I(x_{i}^{(j)} =a_{jl},y_{i}=c_{k})}} } ]}
=\sum_{i=1}^{N}{[\sum_{k=1}^{K}{I(y_{i}=c_{k})logp(y=c_{k} )}+\sum_{j=1}^{n}{\sum_{l=1}^{S_{j}}{I(x_{i}^{(j)} =a_{jl},y_{i}=c_{k})logp(x^{(j)} =a_{jl} |y_{i}=c_{k})} } ]}

在上式中我們是把 {p(y=c_{k} ),p(x^{(j)}=a_{jl}|y=c_{k}   ),j=1,2,...,n;l=1,2,...,S_{j} ;k=1,2,...,K} 作為引數,有這麼多引數,當然因為有\sum_{k=1}^{K}{p(y=c_{k} )} =1等約束,實際引數會少一點,下面會有應用。
現在我們來求上式的極大似然估計的引數估計值。
先說先驗概率 p(y=c_{k}) 系列引數,上式中只有前半段含有 p(y=c_{k}),所以在求先驗概率估計值時就只管前半部分。

\frac{\partial \iota (\varphi )}{\partial p(y=c_{k})} =\frac{\partial \iota (\varphi )}{\partial p(y=c_{k})}\sum_{i=1}^{N}{[\sum_{k=1}^{K}{I(y_{i}=c_{k})logp(y=c_{k} )}]}

在繼續之前,需要把\sum_{k=1}^{K}{p(y=c_{k} )} =1

的約束加入上式中,我們把 p(y=c_{K} )=1-\sum_{k=1}^{K-1}{p(y=c_{k} )} 代入上式得:

\frac{\partial \iota (\varphi )}{\partial p(y=c_{k})} =\frac{\partial \iota (\varphi )}{\partial p(y=c_{k})}\sum_{i=1}^{N}{[\sum_{k=1}^{K-1}{I(y_{i}=c_{k})logp(y=c_{k} )+I(y_{i}=c_{K})logp(y=c_{K} )}]}
=\frac{\partial \iota (\varphi )}{\partial p(y=c_{k})}\sum_{i=1}^{N}{[\sum_{k=1}^{K-1}{I(y_{i}=c_{k})logp(y=c_{k} )+I(y_{i}=c_{K})log(1-\sum_{k=1}^{K-1}{p(y=c_{k} )} )}]}

現在我們來求 p(y=c_{1}) 的估計值。

0=\frac{\partial \iota (\varphi )}{\partial p(y=c_{1})}
=\frac{\partial \iota (\varphi )}{\partial p(y=c_{1})}\sum_{i=1}^{N}{[\sum_{k=1}^{K-1}{I(y_{i}=c_{k})logp(y=c_{k} )+I(y_{i}=c_{K})log(1-\sum_{k=1}^{K-1}{p(y=c_{k} )} )}]}
=\sum_{i=1}^{N}{[\frac{I(y_{i}=c_{1})}{p(y=c_{1})}-\frac{I(y_{i}=c_{K})}{1-\sum_{a=1}^{K-1}{p(y=c_{a})} }  ]}

=\sum_{i=1}^{N}{[\frac{I(y_{i}=c_{1})}{p(y=c_{1})}-\frac{I(y_{i}=c_{K})}{p(y=c_{K}) }  ]}

關於上式最後一步後半部分母的轉換 1-\sum_{k=1}^{K-1}{p(y=c_{k} )} =p(y=c_{K} ) ,可能有人會困惑,既然現在要轉回 p(y=c_{K} ) 原形,那之前為什麼要使用 1-\sum_{k=1}^{K-1}{p(y=c_{k} )} 的形式?
要注意這裡的 p(y=c_{K} ) 已經不是引數,而是由 p(y=c_{1} ),p(y=c_{2} ),...,p(y=c_{K-1} ) 決定的一個值,在此對 p(y=c_{1} ) 求偏導的函式中,p(y=c_{K} ) 是包含了 p(y=c_{1} ) 的,寫成 1-\sum_{k=1}^{K-1}{p(y=c_{k} )} 的形式是為了表明該表示式包含了 p(y=c_{1} ) ,以免求偏導時把 p(y=c_{K} ) 當作常數而誤消除。

好,繼續。

\sum_{i=1}^{N}{[\frac{I(y_{i}=c_{1})}{p(y=c_{1})}-\frac{I(y_{i}=c_{K})}{p(y=c_{K}) }  ]} =0
p(y=c_{K})\sum_{i=1}^{N}{I(y_{i}=c_{1})} -p(y=c_{1})\sum_{i=1}^{N}{I(y_{i}=c_{K})} =0

由上式可得:

p(y=c_{1})=\frac{\sum_{i=1}^{N}{I(y_{i}=c_{1})} }{\sum_{i=1}^{N}{I(y_{i}=c_{K})} } p(y=c_{K})

按照同樣的方法,可得:

p(y=c_{2})=\frac{\sum_{i=1}^{N}{I(y_{i}=c_{2})} }{\sum_{i=1}^{N}{I(y_{i}=c_{K})} } p(y=c_{K})

……

p(y=c_{K})=\frac{\sum_{i=1}^{N}{I(y_{i}=c_{K})} }{\sum_{i=1}^{N}{I(y_{i}=c_{K})} } p(y=c_{K})

上面所有式子左邊和右邊分別相加:

p(y=c_{1})+p(y=c_{2})+...+p(y=c_{K})=\frac{N}{\sum_{i=1}^{N}{I(y_{i}=c_{K})} } p(y=c_{K})

1=\frac{N}{\sum_{i=1}^{N}{I(y_{i}=c_{K})} } p(y=c_{K})

可得:

p(y=c_{K})=\frac{\sum_{i=1}^{N}{I(y_{i}=c_{K})} }{N}

把上式代入前面的 p(y=c_{k}),k=1,2,...,K-1,可得:

p(y=c_{k})=\frac{\sum_{i=1}^{N}{I(y_{i}=c_{k})} }{N} ,k=1,2,...,K-1

總之,先驗概率的 p(y=c_{k}) 的極大似然估計是:

p(y=c_{k})=\frac{\sum_{i=1}^{N}{I(y_{i}=c_{k})} }{N} ,k=1,2,...,K

至此,先驗概率的推導完畢。

同理,有興趣的同學可推導條件概率 p(x^{(j)}=a_{jl}|y=c_{k}   ) ,這裡不再贅述

轉自:

李航 統計學習基礎