1. 程式人生 > >基於樸素貝葉斯分類器的文字分類演算法(上)

基於樸素貝葉斯分類器的文字分類演算法(上)

轉載請保留作者資訊:

作者:phinecos(洞庭散人)

 Preface

本文緣起於最近在讀的一本書-- Tom M.Mitchell書中第6章詳細講解了貝葉斯學習的理論知識,為了將其應用到實際中來,參考了網上許多資料,從而得此文。文章將分為兩個部分,第一部分將介紹貝葉斯學習的相關理論()。第二部分講如何將貝葉斯分類器應用到中文文字分類,隨文附上示例程式碼。

 Introduction

我們在《概率論和數理統計》這門課的第一章都學過貝葉斯公式和全概率公式,先來簡單複習下:

條件概率

定義 A, B是兩個事件,且P(A)>0 P(BA)=P(AB)/P(A)為在條件A下發生的條件事件

B發生的條件概率。

乘法公式 P(A)>0 則有P(AB)=P(BA)P(A)

全概率公式和貝葉斯公式

定義 S為試驗E的樣本空間,B1, B2, …BnE的一組事件,若BiBj=Ф, i≠j, i, j=1, 2, …,n; B1B2Bn=S則稱B1, B2, …, Bn為樣本空間的一個劃分。

定理 設試驗E的樣本空間為,AE的事件,B1, B2, …,Bn為的一個劃分,且P(Bi)>0 (i=1, 2, …n),則P(A)=P(AB1)P(B1)+P(AB2)+ …+P(ABn)P(Bn)稱為全概率公式。

定理 設試驗俄E的樣本空間為SAE的事件,

B1, B2, …,Bn為的一個劃分,則

P(BiA)=P(ABi)P(Bi)/∑P(BAj)P(Aj)=P(BAi)P(Ai)/P(B)

稱為貝葉斯公式。說明:ij均為下標,求和均是1n  

 下面我再舉個簡單的例子來說明下。

示例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.03P(陰性|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時可能性最大的假設hh屬於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的目標值(yesno).

由上面的公式可以得到:

可以得到:

      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——訓練文字集合中經過踢出無用詞去除文字預處理之後關鍵字的數量。