轉載請保留做者信息:算法
做者:phinecos(洞庭散人)機器學習
Blog:http://phinecos.cnblogs.com/ide
Email:phinecos@163.com學習
Preface測試
本文緣起於最近在讀的一本書-- Tom M.Mitchell的《機器學習》,書中第6章詳細講解了貝葉斯學習的理論知識,爲了將其應用到實際中來,參考了網上許多資料,從而得此文。文章將分爲兩個部分,第一部分將介紹貝葉斯學習的相關理論(若是你對理論不感興趣,請直接跳至第二部分<<基於樸素貝葉斯分類器的文本分類算法(下)>>)。第二部分講如何將貝葉斯分類器應用到中文文本分類,隨文附上示例代碼。spa
Introductionorm
咱們在《機率論和數理統計》這門課的第一章都學過貝葉斯公式和全機率公式,先來簡單複習下:xml
條件機率 blog
定義 設A, B是兩個事件,且P(A)>0 稱P(B∣A)=P(AB)/P(A)爲在條件A下發生的條件事件B發生的條件機率。事件
乘法公式 設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則稱B1, B2, …, Bn爲樣本空間的一個劃分。
定理 設試驗E的樣本空間爲,A爲E的事件,B1, B2, …,Bn爲的一個劃分,且P(Bi)>0 (i=1, 2, …n),則P(A)=P(A∣B1)P(B1)+P(A∣B2)+ …+P(A∣Bn)P(Bn)稱爲全機率公式。
定理 設試驗俄E的樣本空間爲S,A爲E的事件,B1, B2, …,Bn爲的一個劃分,則
P(Bi∣A)=P(A∣Bi)P(Bi)/∑P(B|Aj)P(Aj)=P(B|Ai)P(Ai)/P(B)
稱爲貝葉斯公式。說明:i,j均爲下標,求和均是1到n
下面我再舉個簡單的例子來講明下。
示例1
考慮一個醫療診斷問題,有兩種可能的假設:(1)病人有癌症。(2)病人無癌症。樣本數據來自某化驗測試,它也有兩種可能的結果:陽性和陰性。假設咱們已經有先驗知識:在全部人口中只有0.008的人患病。此外,化驗測試對有病的患者有98%的可能返回陽性結果,對無病患者有97%的可能返回陰性結果。
上面的數據能夠用如下機率式子表示:
P(cancer)=0.008,P(無cancer)=0.992
P(陽性|cancer)=0.98,P(陰性|cancer)=0.02
P(陽性|無cancer)=0.03,P(陰性|無cancer)=0.97
假設如今有一個新病人,化驗測試返回陽性,是否將病人判定爲有癌症呢?咱們能夠來計算極大後驗假設:
P(陽性|cancer)p(cancer)=0.98*0.008 = 0.0078
P(陽性|無cancer)*p(無cancer)=0.03*0.992 = 0.0298
所以,應該判斷爲無癌症。
貝葉斯學習理論
貝葉斯是一種基於機率的學習算法,可以用來計算顯式的假設機率,它基於假設的先驗機率,給定假設下觀察到不一樣數據的機率以及觀察到的數據自己(後面咱們能夠看到,其實就這麼三點東西,呵呵)。
咱們用P(h)表示沒有訓練樣本數據前假設h擁有的初始機率,也就稱爲h的先驗機率,它反映了咱們所擁有的關於h是一個正確假設的機會的背景知識。固然若是沒有這個先驗知識的話,在實際處理中,咱們能夠簡單地將每一種假設都賦給一個相同的機率。相似,P(D)表明將要觀察的訓練樣本數據D的先驗機率(也就是說,在沒有肯定某一個假設成立時D的機率)。而後是P(D/h),它表示假設h成立時觀察到數據D的機率。在機器學習中,咱們感興趣的是P(h/D),也就是給定了一個訓練樣本數據D,判斷假設h成立的機率,這也稱之爲後驗機率,它反映了在看到訓練樣本數據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)這個乘積,呵呵,這就是貝葉斯分類算法的核心思想。咱們要作的就是要考慮候選假設集合H,並在其中尋找當給定訓練數據D時可能性最大的假設h(h屬於H)。
簡單點說,就是給定了一個訓練樣本數據(樣本數據已經人工分類好了),咱們應該如何從這個樣本數據集去學習,從而當咱們碰到新的數據時,能夠將新數據分類到某一個類別中去。那能夠看到,上面的貝葉斯理論和這個任務是吻合的。
樸素貝葉斯分類
也許你以爲這理論還不是很懂,那我再舉個簡單的例子,讓你們對這個算法的原理有個快速的認識。(注:這個示例摘抄自《機器學習》這本書的第三章的表3-2.)
假設給定了以下訓練樣本數據,咱們學習的目標是根據給定的天氣情況判斷你對PlayTennis這個請求的回答是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個訓練樣本,咱們將使用此表的數據,並結合樸素貝葉斯分類器來分類下面的新實例:
(Outlook = sunny,Temprature = cool,Humidity = high,Wind = strong)
咱們的任務就是對此新實例預測目標概念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
其餘數據相似可得,代入後獲得:
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
所以應該分類到no這一類中。
貝葉斯文本分類算法
好了,如今開始進入本文的主旨部分:如何將貝葉斯分類器應用到中文文本的分類上來?
根據聯合機率公式(全機率公式)
M——訓練文本集合中通過踢出無用詞去除文本預處理以後關鍵字的數量。