前言
這部分的公式推導較多,涉及到了極大似然估計和貝葉斯估計,要看懂貝葉斯算法一定要明白極大似然估計。
其中貝葉斯算法基於貝葉斯公式,並不作爲重點,重點在樸素貝葉斯算法,這裏的公式推導很詳細,一步步看下來一定會整明白的!!
一、貝葉斯算法
先理解下貝葉斯算法要解決的問題:
-
正向概率: 假設袋子裏面有N個白球,M個黑球,伸手進去摸一把,摸出黑球的概率有多大?很簡單:M/(N+M)
-
逆向概率: 如果事先並不知道袋子裏黑白球的比例,而是閉着眼睛摸出一個(或好幾個)球,觀察這些取出來的球的顏色之後,那麼就可以對此袋子裏面的黑白球的比例作出什麼樣的推測
體會這兩個概率問題的不同:正向概率問題已經事先知道概率分佈,而逆向概率問題卻不知道,那麼貝葉斯算法就能派上用場了。
再舉個計算題來體會貝葉斯算法(後面還會有一個):
-
有一個人羣,男人佔60%,女人佔40%,男人總是穿長褲,女人則有一半穿長褲一半穿裙子。
正向概率: 隨機選取一個人,他(她)穿長褲子的概率和穿裙子的概率多大?
逆向概率: 迎面走來一個穿長褲的學生,只看得見他(她)穿的是長褲,而無法判斷其性別,推斷出其是女生的概率?
解:假設該羣體有U個人,
穿長褲的男人的個數:U*P(男)*P(穿長褲|男)
其中,由題意可知P(男)=0.6,P(穿長褲|男)=1(男人全部穿長褲)
穿長褲的女人個數:U*P(女)*P(穿長褲|女)
-----------------------------------------------------------------------
那麼對於正向概率問題——穿長褲的概率和穿裙子的概率分貝爲:
P(穿長褲) = P(男)+P(女) * 0.5=0.6 + 0.4 * 0.5 = 0.8
P(穿裙子)=1-P(穿長褲)=P(女)*0.5= 0.2
------------------------------------------------------------------------
對於逆向問題——求該穿長褲的是女生的概率:
穿長褲總數:U*P(男)*P(穿長褲|男)+U*P(女)*P(穿長褲|女)
那麼該穿長褲的是女生的概率P(女|穿長褲)=U*P(女)*P(穿長褲|女)/穿長褲總數=U*P(女)*P(穿長褲|女)/(U*P(男)*P(穿長褲|男)+U*P(女)*P(穿長褲|女))
注意到上面的逆向問題中,最後的結果是與總人數(U)無關的(分子分母約分),那麼最後的結果可以寫成
P(女∣穿長褲)=P(男)∗P(穿長褲∣男)+P(女)∗P(穿長褲∣女)P(女)∗P(穿長褲∣女)(1)
化簡下(1)式,觀察(1)發現其分母就是穿長褲的概率P(穿長褲),分子P(穿長褲,女),那麼此處就可以給出貝葉斯公式了:
P(A∣B)=P(B)P(B∣A)P(A)(2)
通俗的說直接求P(A∣B)困難,那麼就用上式轉換下,換成好求的值(大白話)。
那麼講些官話:
貝葉斯定理是隨機事件A和B的條件概率:
P(A∣B)=P(B)P(B∣A)P(A)
其中P(A|B)是在 B 發生的情況下 A 發生的可能性。
成分定義如下:
- P(A)是 A 的先驗概率,之所以稱爲“先驗”是因爲它不考慮任何 B 方面的因素。
- P(A|B)是已知 B 發生後 A 的條件概率,也由於得自 B 的取值而被稱作 A 的後驗概率。
- P(B|A)是已知 A 發生後 B 的條件概率,也由於得自 A 的取值而被稱作 B 的後驗概率。
- P(B)是 B 的先驗概率,也作標淮化常量(normalizing constant)。
根據上面的定義,貝葉斯定理可表述爲:
後驗概率=(似然∗先驗概率)/標淮化常量
算法示例
這裏借用其他博文的一個例子吧(不同任務算法不同,這裏就不要臉的抄了):
假設有兩個各裝了100個球的箱子,甲箱子中有70個紅球,30個綠球,乙箱子中有30個紅球,70個綠球。假設隨機選擇其中一個箱子,從中拿出一個球記下球色再放回原箱子,如此重複12次,記錄得到8次紅球,4次綠球。問題來了,你認爲被選擇的箱子是甲箱子的概率有多大?
剛開始選擇甲乙兩箱子的先驗概率都是50%,因爲是隨機二選一(這是貝葉斯定理二選一的特殊形式)。即有:
P(甲) = 0.5, P(乙) = 1 - P(甲);
這時在拿出一個球是紅球的情況下,我們就應該根據這個信息來更新選擇的是甲箱子的先驗概率:
P(甲|紅球1) = P(紅球|甲) × P(甲) / (P(紅球|甲) × P(甲) + (P(紅球|乙) × P(乙)))
P(紅球|甲):甲箱子中拿到紅球的概率
P(紅球|乙):乙箱子中拿到紅球的概率
因此在出現一個紅球的情況下,選擇的是甲箱子的先驗概率就可被修正爲:
P(甲|紅球1) = 0.7 × 0.5 / (0.7 × 0.5 + 0.3 × 0.5) = 0.7
即在出現一個紅球之後,甲乙箱子被選中的先驗概率就被修正爲:
P(甲) = 0.7, P(乙) = 1 - P(甲) = 0.3
代碼:
def bayesFunc(pIsBox1, pBox1, pBox2):
return (pIsBox1 * pBox1)/((pIsBox1 * pBox1) + (1 - pIsBox1) * pBox2)
def redGreenBallProblem():
pIsBox1 = 0.5
# consider 8 red ball
for i in range(1, 9):
pIsBox1 = bayesFunc(pIsBox1, 0.7, 0.3)
print ("拿到 %d 個球是紅球是甲箱子的先驗概率: %f" % (i, pIsBox1))
# consider 4 green ball
for i in range(1, 5):
pIsBox1 = bayesFunc(pIsBox1, 0.3, 0.7)
print ("拿到 %d 個球是綠球是甲箱子的先驗概率: %f" % (i, pIsBox1))
redGreenBallProblem()
結果:
還有一個貝葉斯手寫字體識別示例
二、樸素貝葉斯分類器
1、貝葉斯決策論
先定義一些變量:
- 假設一個數據集有N種標記(標籤),即γ={c1,c2,...,cN}
- 用λij表示將一個真實標記爲cj的樣本誤分類爲ci所產生的損失
- 基於後驗概率P(ci∣x)可獲得將樣本x分類爲cj所產生的期望損失,也是在樣本x上的條件風險:R(ci∣x)=j=1∑NλijP(cj∣x)(3)
貝葉斯算法的目的就是最小化(3)式損失、風險,即找到一個算法h∗,使得總體風險最小化:
R(h)=Ex[R(h(x)∣x)](4)
若h能最小化每個樣本xi的條件風險R(h(x)∣x),則總體風險R(h)也將是最小的。這就產生了貝葉斯判定準則: 爲了最小化總體風險,只需在每個樣本上選擇那個能使條件風險R(c∣x)最小的類別標記,即:
h∗(x)=c∈γargminR(c∣x)(5)
(一定要看懂(5)式,這裏再強調下,R(c∣x)是對單個樣本來說所產生的條件風險,而算法h∗(x)的輸入也是單個樣本,也就是說,給算法h∗(x)傳入一個樣本,輸出的是一個類別標記,而這個類別標記滿足使得條件風險R(c∣x)最小的要求)
此時,h∗被稱爲貝葉斯最優分類器,R(h∗)稱爲貝葉斯風險,1−R(h∗)反映了分類器所能達到的最好性能。(5)式只能最爲求解貝葉斯最優分類器h∗的理論指導,並不能據此直接求解出h∗,所以要進一步推進!
下面進一步討論條件風險::::::::::::::
從(3)式可知條件風險的計算公式爲:
R(ci∣x)=j=1∑NλP(cj∣x)
若目標是最小化分類錯誤率,則誤判損失λij
對應爲0/1損失,即:
λij={01,ifi=j,otherwise(6)
將(6)帶入(3)式:
R(c∣x)=λi1∗P(c1∣x)+λi12∗P(c2∣x)+...+λii∗P(ci∣x)+λii+1∗P(ci+1∣x)+...+λiN∗P(cN∣x)=1∗P(c1∣x)+...+1∗P(ci−1∣x)+0∗P(ci∣x)+1∗P(ci+1∣x)+...+1∗P(cN∣x)(7)
(7)式中去掉乘0項,並由P(c1∣x)+P(c2∣x)+...+P(cN∣x)=1得:
R(c∣x)=P(c1∣x)+...+P(ci−1∣x)+P(ci+1∣x)+...+P(cN∣x)=1−P(ci∣x)(8)
那麼由貝葉斯最優分類器的判定準則可知,最小化錯誤率的貝葉斯最優分類器爲:
h∗(x)=c∈γargminR(c∣x)=c∈γargmin(1−P(c∣x))=c∈γargmaxP(c∣x)
這樣看來,最開始要根據風險最小找最優貝葉斯分類器,那麼就等價於使得後驗概率P(c∣x)最大化。所以下面就開始求最大的後驗概率P(c∣x)。
2、多元正太分佈參數的極大似然估計
如果關於極大似然估計不瞭解,可以看我的另一篇博文——極大似然估計和貝葉斯估計
至於這塊爲什麼突然來了個“多元正太分佈參數的極大似然估計”,因爲後面的樸素貝葉斯算法會用到,所以這塊也要推明白。
已知對數似然函數爲:
LL(θc)=x∈Dc∑logP(x∣θc)(9)
注意上式中兵沒有規定對數函數的底數是多少,但是隻要保證這個對數函數是單調遞增的就可以,所以在這裏取自然常數e,那麼此時的對數似然函數可以寫成:
LL(θc)=x∈Dc∑lnP(x∣θc)(10)
這裏已經假設數據集服從多元正態分佈的,即:
P(x∣θc)=P(x∣c)∼N(μc,σc2)(11)
所以有
P(x∣θc)=(2π)d∣Σc∣1exp[−21(x−μc)TΣc−1(x−μc)](12)
(12)式不太好理解,這裏解釋一下。先看整體是正態分佈的形式,而且這是多元函數的正太分佈;再分別看:其中d表示x的維數,Σc=σc2爲對稱正定協方差矩陣,∣Σc∣表示Σc的行列式。
將式(12)帶入(10)中:
LL(θc)=x∈Dc∑ln[(2π)d∣Σc∣1exp(−21(x−μc)TΣc−1(x−μc))](13)
令∣Dc∣=N(表示屬於c類別的集合的樣本總數),則對數似然函數可化爲:
LL(θc)=i=1∑Nln[(2π)d∣Σc∣1exp(−21(xi−μc)TΣc−1(xi−μc))]=i=1∑Nln[(2π)d1∣Σc∣1exp(−21(xi−μc)TΣc−1(xi−μc))]=i=1∑N[ln(2π)d1+ln∣Σc∣1+ln[exp(−21(xi−μc)TΣc−1(xi−μc))]]=i=1∑N[−2dln(2π)−21ln∣Σc∣−21((xi−μc)TΣc−1(xi−μc))]=−2Ndln(2π)−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)(14)
這裏的參數θ就是指μc和Σc,所以下面分別求導數:
∂μc∂LL(θc)=∂μc∂[−2Ndln(2π)−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=∂μc∂[−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=−21i=1∑N∂μc∂[(xi−μc)TΣc−1(xi−μc)]=−21i=1∑N∂μc∂[(xiT−μcT)Σc−1(xi−μc)]=−21i=1∑N∂μc∂[(xiT−μcT)(Σc−1xi−Σc−1μc)]=−21i=1∑N∂μc∂[xiTΣc−1Txi−xiTΣc−1μc−μcTΣc−1xi+μcTΣc−1μc](15)
由於xiTΣc−1μc的計算結果爲標量,並且Σc爲實對稱矩陣,所以:xiTΣc−1μc=(xiTΣc−1μc)T=xiT(Σc−1)Tμc=xiT(ΣcT)−1μc=μcTΣc−1xi(16)
所以式(15)可以化簡如下:
∂μc∂LL(θc)=−21i=1∑N∂μc∂[xiTΣc−1xi−2xiTΣc−1μc+μcTΣc−1μc]=−21i=1∑N[0−(2xiTΣc−1)T+(Σc−1+(Σc−1)T)μc]=−21i=1∑N[−(2(Σc−1)Txi)+(Σc−1+(Σc−1)T)μc]=−21i=1∑N[−(2Σc−1xi)+2Σc−1μc]=i=1∑NΣc−1xi−NΣc−1μc(17)
令上式等於0,可得:
∂μc∂LL(θc)=i=1∑NΣc−1xi−NΣc−1μc=0(18)
即:NΣc−1μc=i=1∑NΣc−1xi=Σc−1i=1∑Nxi(19)
上式兩邊同乘Σc,得:Nμc=i=1∑Nxi(20)
那麼最後可得μc:
μc=N1i=1∑Nxi(21)
下面開始求Σc:
∂Σc∂LL(θc)=∂Σc∂[−2Ndln(2π)−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=∂Σc∂[−2Nln∣Σc∣−21i=1∑N(xi−μc)TΣc−1(xi−μc)]=−2N∂Σc∂(ln∣Σc∣)−21i=1∑N∂Σc∂[(xi−μc)TΣc−1(xi−μc)](22)
上式涉及到矩陣求偏導,由矩陣微分公式∂X∂∣X∣=∣X∣(X−1)T,∂X∂aTX−1b=−X−TabTX−T可得:
∂Σc∂LL(θc)=−2N∣Σc∣1∣Σc∣(Σc−1)T−21i=1∑N[−Σc−T(xi−μc)(xi−μc)TΣc−T]=−2N(Σc−1)T−21i=1∑N[−Σc−T(xi−μc)(xi−μc)TΣc−T]=−2NΣc−1+21i=1∑N[Σc−1(xi−μc)(xi−μc)TΣc−1](23)
令上式偏導數等於0,可得:
∂Σc∂LL(θc)=−2NΣc−1+21i=1∑N[Σc−1(xi−μc)(xi−μc)TΣc−1]=0(24)
下面開始化簡式(24),由(24)式可知:
NΣc−1=i=1∑N[Σc−1(xi−μc)(xi−μc)TΣc−1](25)
將等式右邊的Σc−1提出來:
NΣc−1=Σc−1[i=1∑N(xi−μc)(xi−μc)T]Σc−1(26)
上式左右兩邊同乘Σc,得:
N=Σc−1[i=1∑N(xi−μc)(xi−μc)T](27)
那麼最終得到Σc爲:
Σc=N1i=1∑N(xi−μc)(xi−μc)T(28)
3、樸素貝葉斯分類器
已知最小化分類錯誤率的貝葉斯最優分類器爲:
h∗(x)=c∈γargmaxP(c∣x)(29)
又由貝葉斯定理可知:
P(c∣x)=P(x)P(x,c)=P(x)P(c)P(x∣c)(30)
把式(30)帶入到(29)中
h∗(x)=c∈γargmaxP(x)P(c)P(x∣c)=c∈γargmaxP(c)P(x∣c)(31)
這裏需要明白,爲什麼上式中的分母P(x)可以不計呢?還是回到貝葉斯判定準則,即找到使風險最小的標記c,那麼這裏的P(x)的分佈是與標記c無關的,在變動c的時候P(x)是恆定不變的,所以可以去掉。
式(31)是普通貝葉斯最優分類器的表達式,那麼樸素貝葉斯分類器就是在此基礎上加上一個屬性條件獨立性假設,這也是所謂的“樸素”體現所在.
下面開始推導樸素貝葉斯分類器:
已知屬性條件獨立性假設爲:
P(x∣c)=P(x1,x2,...,xd∣c)=i=1∏dP(xi∣c)(32)
所以:
h∗(x)=c∈γargmaxP(c)i=1∏dP(xi∣c)(33)
式(33)即爲樸素貝葉斯分類器表達式。
現在解釋下式(32),根據概率論的知識可以知道,式(32)表達了x1,x2,...,xd是相互獨立的、相互不相關的,而這顯然是不符合實際情形的,因爲任何一個物品屬性之間多多少少都應該有或多或少的關係,並不能說完全獨立、完全不相關的。那麼爲什麼要做屬性之間相互獨立的這種很強的假設呢?目的就是爲了簡便計算,也就是犧牲準確率,來換取效率。那麼它是怎麼簡便計算的呢?下面舉個簡單地例子來說明:
假設某個數據集只有兩個屬性x1,x2,其中x1=(a,b,c),x2=(d,e,f),其對應的類別標記爲c=(1,2,3),現在想學習一個分類器,要把所有的參數都學習出來。這裏所謂的所有的參數都學習出來,就是指各種屬性取值前提下的聯合概率,一共有27種聯合概率(333)。現在有兩種計算方案,其一是假設屬性之間不獨立,其二是假設屬性之間是獨立的。如果不獨立的話就需要計算27次,而假設獨立的前提下18次。(這塊需要點概率論基礎,看不懂的可以在下面評論,但是不懂也罷,只需要知道樸素貝葉斯可以降低計算量就可以了)
下面推導樸素貝葉斯的參數估計,怎樣求先驗概率P(c)和似然概率P(xi∣c):
對於先驗概率P(c):
它表示的是樣本空間中各類樣本所佔比例,根據大數定理,當訓練集包含充足的獨立同分布樣本時,P(c)可通過各類樣本出現的頻率來進行估計,即:P(c)=∣D∣∣Dc∣(34)
其中,D表示訓練集,|D|表示D中樣本個數,Dc表示訓練集中第c類樣本組成的集合,∣Dc∣表示集合Dc中樣本的個數
對於似然概率P(xi∣c)(這裏以一元爲例,多元正太分佈的參數求解上面有)
這裏需要分兩種情況討論:連續型和離散型。
若樣本的第i個屬性xi取值爲連續值,假設該屬性的取值服從正態分佈:
P(xi∣c)∼N(xc,i,σc,i2)=>P(xi∣c)=2πσc,i1exp(−2σc,i2(xi−μc,i)2)(35)
其中正態分佈的參數可以用極大似然估計(區別於由大數定理得到的頻率值)法推得:μc,i和σc,i2即爲第c類樣本在第i個屬性上取值的均值和方差。
若樣本的第i個屬性xi取值爲離散值,同樣根據極大似然估計法,用其頻率值作爲其概率值的估計值,即:
P(x∣c)=∣Dc∣∣Dc,xi∣(36)
其中,Dc,xi表示Dc中第i 個屬性上取值爲xi的樣本組成的集合。
那麼到此關於貝葉斯和樸素貝葉斯算法已經說完了,公式全部是手敲,這部分的算法公式又多,難免會存在遺漏、敲錯等現象,還望指正!