先上問題吧,我們統計了14天的氣象數據(指標包括outlook,temperature,humidity,windy),並已知這些天氣是否打球(play)。如果給出新一天的氣象指標數據:sunny,cool,high,TRUE,判斷一下會不會去打球。
table 1
| outlook | temperature | humidity | windy | play |
| sunny | hot | high | FALSE | no |
| sunny | hot | high | TRUE | no |
| overcast | hot | high | FALSE | yes |
| rainy | mild | high | FALSE | yes |
| rainy | cool | normal | FALSE | yes |
| rainy | cool | normal | TRUE | no |
| overcast | cool | normal | TRUE | yes |
| sunny | mild | high | FALSE | no |
| sunny | cool | normal | FALSE | yes |
| rainy | mild | normal | FALSE | yes |
| sunny | mild | normal | TRUE | yes |
| overcast | mild | high | TRUE | yes |
| overcast | hot | normal | FALSE | yes |
| rainy | mild | high | TRUE | no |
這個問題可以用決策樹的方法來求解,當然我們今天講的是朴素貝葉斯法。這個一”打球“還是“不打球”是個兩類分類問題,實際上朴素貝葉斯可以沒有任何改變地解決多類分類問題。決策樹也一樣,它們都是有導師的分類方法。
朴素貝葉斯模型有兩個假設:所有變量對分類均是有用的,即輸出依賴於所有的屬性;這些變量是相互獨立的,即不相關的。之所以稱為“朴素”,就是因為這些假設從未被證實過。
注意上面每項屬性(或稱指標)的取值都是離散的,稱為“標稱變量”。
step1.對每項指標分別統計:在不同的取值下打球和不打球的次數。
table 2
| outlook | temperature | humidity | windy | play | |||||||||
| yes | no | yes | no | yes | no | yes | no | yes | no | ||||
| sunny | 2 | 3 | hot | 2 | 2 | high | 3 | 4 | FALSE | 6 | 2 | 9 | 5 |
| overcast | 4 | 0 | mild | 4 | 2 | normal | 6 | 1 | TRUR | 3 | 3 | ||
| rainy | 3 | 2 | cool | 3 | 1 | ||||||||
step2.分別計算在給定“證據”下打球和不打球的概率。
這里我們的“證據”就是sunny,cool,high,TRUE,記為E,E1=sunny,E2=cool,E3=high,E4=TRUE。
A、B相互獨立時,由:
![]()
得貝葉斯定理:
![]()
得:
![]()
![]()
又因為4個指標是相互獨立的,所以
![]()
我們只需要比較P(yes|E)和P(no|E)的大小,就可以決定打不打球了。所以分母P(E)實際上是不需要計算的。
P(yes|E)*P(E)=2/9×3/9×3/9×3/9×9/14=0.0053
P(no|E)*P(E)=3/5×1/5×4/5×3/5×5/14=0.0206
所以不打球的概率更大。
零頻問題
注意table 2中有一個數據為0,這意味着在outlook為overcast的情況下,不打球和概率為0,即只要為overcast就一定打球,這違背了朴素貝葉斯的基本假設:輸出依賴於所有的屬性。
數據平滑的方法很多,最簡單最古老的是拉普拉斯估計(Laplace estimator)--即為table2中的每個計數都加1。它的一種演變是每個計數都u(0<u<1)。
Good-Turing是平滑算法中的佼佼者,有興趣的可以了解下。我在作基於隱馬爾可夫的詞性標注時發現Good-Turing的效果非常不錯。
對於任何發生r次的事件,都假設它發生了r*次:
![]()
nr是歷史數據中發生了r次的事件的個數。
數值屬性
當屬性的取值為連續的變量時,稱這種屬性為“數值屬性“。通常我們假設數值屬性的取值服從正態分布。
| outlook | temperature | humidity | windy | play | |||||||||
| yes | no | yes | no | yes | no | yes | no | yes | no | ||||
| sunny | 2 | 3 | 83 | 85 | 86 | 85 | FALSE | 6 | 2 | 9 | 5 | ||
| overcast | 4 | 0 | 70 | 80 | 96 | 90 | TRUR | 3 | 3 | ||||
| rainy | 3 | 2 | 68 | 65 | 80 | 70 | |||||||
| 64 | 72 | 65 | 95 | ||||||||||
| 69 | 71 | 70 | 91 | ||||||||||
| 75 | 80 | ||||||||||||
| 75 | 70 | ||||||||||||
| 72 | 90 | ||||||||||||
| 81 | 75 | ||||||||||||
| sunny | 2/9 | 3/5 | mean value | 73 | 74.6 | mean value | 79.1 | 86.2 | FALSE | 6/9 | 2/5 | 9/15 | 5/14 |
| overcast | 4/9 | 0/5 | deviation | 6.2 | 7.9 | deviation | 10.2 | 9.7 | TRUR | 3/9 | 3/5 | ||
正態分布的概率密度函數為:
![]()
現在已知天氣為:outlook=overcast,temperature=66,humidity=90,windy=TRUE。問是否打球?
f(溫度=66|yes)=0.0340
f(濕度=90|yes)=0.0221
yes的似然=2/9×0.0340×0.0221×3/9×9/14=0.000036
no的似然=3/5×0.0291×0.0380×3/5×9/14=0.000136
不打球的概率更大一些。
用於文本分類
朴素貝葉斯分類是一種基於概率的有導師分類器。
詞條集合W,文檔集合D,類別集合C。
根據(1)式(去掉分母)得文檔d屬於類別cj的概率為:

p(cj)表示類別j出現的概率,讓屬於類別j的文檔數量除以總文檔數量即可。
而已知類別cj的情況下詞條wt出現的后驗概率為:類別cj中包含wt的文檔數目 除以 類別cj中包含的文檔總數目 。
結束語
實踐已多次證明,朴素貝葉斯在許多數據集上不遜於甚至優於一些更復雜的分類方法。這里的原則是:優先嘗試簡單的方法。
機器學習的研究者嘗試用更復雜的學習模型來得到良好的結果,許多年后發現簡單的方法仍可取得同樣甚至更好的結果。
