基于樸素貝葉斯分類(lèi)器的文本分類(lèi)算法(上)
轉載請保留作者信息:
作者:phinecos(洞庭散人)
Blog:http://phinecos.cnblogs.com/
Email:phinecos@163.com
Preface
本文緣起于最近在讀的一本書(shū)-- Tom M.Mitchell的《機器學(xué)習》,書(shū)中第6章詳細講解了貝葉斯學(xué)習的理論知識,為了將其應用到實(shí)際中來(lái),參考了網(wǎng)上許多資料,從而得此文。文章將分為兩個(gè)部分,第一部分將介紹貝葉斯學(xué)習的相關(guān)理論(如果你對理論不感興趣,請直接跳至第二部分<<基于樸素貝葉斯分類(lèi)器的文本分類(lèi)算法(下)>>)。第二部分講如何將貝葉斯分類(lèi)器應用到中文文本分類(lèi),隨文附上示例代碼。
Introduction
我們在《概率論和數理統計》這門(mén)課的第一章都學(xué)過(guò)貝葉斯公式和全概率公式,先來(lái)簡(jiǎn)單復習下:
條件概率
定義 設A, B是兩個(gè)事件,且P(A)>0 稱(chēng)P(B∣A)=P(AB)/P(A)為在條件A下發(fā)生的條件事件B發(fā)生的條件概率。
乘法公式 設P(A)>0 則有P(AB)=P(B∣A)P(A)
全概率公式和貝葉斯公式
定義 設S為試驗E的樣本空間,B1, B2, …Bn為E的一組事件,若BiBj=Ф, i≠j, i, j=1, 2, …,n; B1∪B2∪…∪Bn=S則稱(chēng)B1, B2, …, Bn為樣本空間的一個(gè)劃分。
定理 設試驗E的樣本空間為,A為E的事件,B1, B2, …,Bn為的一個(gè)劃分,且P(Bi)>0 (i=1, 2, …n),則P(A)=P(A∣B1)P(B1)+P(A∣B2)+ …+P(A∣Bn)P(Bn)稱(chēng)為全概率公式。
定理 設試驗俄E的樣本空間為S,A為E的事件,B1, B2, …,Bn為的一個(gè)劃分,則
P(Bi∣A)=P(A∣Bi)P(Bi)/∑P(B|Aj)P(Aj)=P(B|Ai)P(Ai)/P(B)
稱(chēng)為貝葉斯公式。說(shuō)明:i,j均為下標,求和均是1到n
下面我再舉個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明下。
示例1
考慮一個(gè)醫療診斷問(wèn)題,有兩種可能的假設:(1)病人有癌癥。(2)病人無(wú)癌癥。樣本數據來(lái)自某化驗測試,它也有兩種可能的結果:陽(yáng)性和陰性。假設我們已經(jīng)有先驗知識:在所有人口中只有0.008的人患病。此外,化驗測試對有病的患者有98%的可能返回陽(yáng)性結果,對無(wú)病患者有97%的可能返回陰性結果。
上面的數據可以用以下概率式子表示:
P(cancer)=0.008,P(無(wú)cancer)=0.992
P(陽(yáng)性|cancer)=0.98,P(陰性|cancer)=0.02
P(陽(yáng)性|無(wú)cancer)=0.03,P(陰性|無(wú)cancer)=0.97
假設現在有一個(gè)新病人,化驗測試返回陽(yáng)性,是否將病人斷定為有癌癥呢?我們可以來(lái)計算極大后驗假設:
P(陽(yáng)性|cancer)p(cancer)=0.98*0.008 = 0.0078
P(陽(yáng)性|無(wú)cancer)*p(無(wú)cancer)=0.03*0.992 = 0.0298
因此,應該判斷為無(wú)癌癥。
貝葉斯學(xué)習理論
貝葉斯是一種基于概率的學(xué)習算法,能夠用來(lái)計算顯式的假設概率,它基于假設的先驗概率,給定假設下觀(guān)察到不同數據的概率以及觀(guān)察到的數據本身(后面我們可以看到,其實(shí)就這么三點(diǎn)東西,呵呵)。
我們用P(h)表示沒(méi)有訓練樣本數據前假設h擁有的初始概率,也就稱(chēng)為h的先驗概率,它反映了我們所擁有的關(guān)于h是一個(gè)正確假設的機會(huì )的背景知識。當然如果沒(méi)有這個(gè)先驗知識的話(huà),在實(shí)際處理中,我們可以簡(jiǎn)單地將每一種假設都賦給一個(gè)相同的概率。類(lèi)似,P(D)代表將要觀(guān)察的訓練樣本數據D的先驗概率(也就是說(shuō),在沒(méi)有確定某一個(gè)假設成立時(shí)D的概率)。然后是P(D/h),它表示假設h成立時(shí)觀(guān)察到數據D的概率。在機器學(xué)習中,我們感興趣的是P(h/D),也就是給定了一個(gè)訓練樣本數據D,判斷假設h成立的概率,這也稱(chēng)之為后驗概率,它反映了在看到訓練樣本數據D后假設h成立的置信度。(注:后驗概率p(h/D)反映了訓練數據D的影響,而先驗概率p(h)是獨立于D的)。

P(h|D) = P(D|h)P(h)/p(D),從貝葉斯公式可以看出,后驗概率p(h/D)取決于P(D|h)P(h)這個(gè)乘積,呵呵,這就是貝葉斯分類(lèi)算法的核心思想。我們要做的就是要考慮候選假設集合H,并在其中尋找當給定訓練數據D時(shí)可能性最大的假設h(h屬于H)。
簡(jiǎn)單點(diǎn)說(shuō),就是給定了一個(gè)訓練樣本數據(樣本數據已經(jīng)人工分類(lèi)好了),我們應該如何從這個(gè)樣本數據集去學(xué)習,從而當我們碰到新的數據時(shí),可以將新數據分類(lèi)到某一個(gè)類(lèi)別中去。那可以看到,上面的貝葉斯理論和這個(gè)任務(wù)是吻合的。
樸素貝葉斯分類(lèi)

也許你覺(jué)得這理論還不是很懂,那我再舉個(gè)簡(jiǎn)單的例子,讓大家對這個(gè)算法的原理有個(gè)快速的認識。(注:這個(gè)示例摘抄自《機器學(xué)習》這本書(shū)的第三章的表3-2.)
假設給定了如下訓練樣本數據,我們學(xué)習的目標是根據給定的天氣狀況判斷你對PlayTennis這個(gè)請求的回答是Yes還是No。
| Day | Outlook | Temperature | Humidity | Wind | PlayTennis |
| D1 | Sunny | Hot | High | Weak | No |
| D2 | Sunny | Hot | High | Strong | No |
| D3 | Overcast | Hot | High | Weak | Yes |
| D4 | Rain | Mild | High | Weak | Yes |
| D5 | Rain | Cool | Normal | Weak | Yes |
| D6 | Rain | Cool | Normal | Strong | No |
| D7 | Overcast | Cool | Normal | Strong | Yes |
| D8 | Sunny | Mild | High | Weak | No |
| D9 | Sunny | Cool | Normal | Weak | Yes |
| D10 | Rain | Mild | Normal | Weak | Yes |
| D11 | Sunny | Mild | Normal | Strong | Yes |
| D12 | Overcast | Mild | High | Strong | Yes |
| D13 | Overcast | Hot | Normal | Weak | Yes |
| D14 | Rain | Mild | High | Strong | No |
可以看到這里樣本數據集提供了14個(gè)訓練樣本,我們將使用此表的數據,并結合樸素貝葉斯分類(lèi)器來(lái)分類(lèi)下面的新實(shí)例:
(Outlook = sunny,Temprature = cool,Humidity = high,Wind = strong)
我們的任務(wù)就是對此新實(shí)例預測目標概念PlayTennis的目標值(yes或no).
由上面的公式可以得到:

可以得到:
P(PlayTennis =yes) = 9/14 = 0.64,P(PlayTennis=no)=5/14 = 0.36
P(Wind=Stong| PlayTennis =yes)=3/9=0.33,p(Wind=Stong| PlayTennis =no)=3/5 = 0.6
其他數據類(lèi)似可得,代入后得到:
P(yes)P(Sunny|yes)P(Cool|yes)P(high|yes)P(Strong|yes) = 0.0053
P(no)P(Sunny|no)P(Cool|no)P(high|no)P(Strong|no)=0.0206
因此應該分類(lèi)到no這一類(lèi)中。
貝葉斯文本分類(lèi)算法
好了,現在開(kāi)始進(jìn)入本文的主旨部分:如何將貝葉斯分類(lèi)器應用到中文文本的分類(lèi)上來(lái)?
根據聯(lián)合概率公式(全概率公式)

