1. 程式人生 > >大資料分類演算法——樸素貝葉斯演算法

大資料分類演算法——樸素貝葉斯演算法

七、零頻問題

注意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

不打球的概率更大一些。

用於文字分類

一、基本公式

貝葉斯文字分類就是基於這個公式,利用先驗概率來得到文字的分類。

naive-bayes-2
其中P(Ci) 為第i個文字類別出現的概率, P(w1,w2…wn|Ci)為文字類別為Ci時出現特徵向量(w1,w2…wn)的概率,P(w1,w2…wn)為特徵向量出現的概率。一般的假設特徵——詞,在文字中出現的概率是獨立的,也就是說詞和詞之間是不相關的(雖然這個不一定成立,但是為了簡化計算往往又不得不這麼做),那麼這時候的聯合概率就可以表示為乘積的形式,如下:
naive-bayes-3
對於特定的訓練集合來說,上式中P(w1)P(w2)…P(wn)是一個固定的常數,那麼在進行分類計算的時候可以省略掉這個分母的計算,如是得到: naive-bayes-4

二.樸素貝葉斯的兩種模型

樸素貝葉斯分類器是一種有監督學習,常見有兩種模型。
1.多項式模型(multinomial model)即為詞頻型。
2.伯努利模型(Bernoulli model)即文件型。

二者的計算粒度不一樣,多項式模型以單詞為粒度伯努利模型以檔案為粒度,因此二者的先驗概率和類條件概率的計算方法都不同。計算後驗概率時,對於一個文件d,多項式模型中,只有在d中出現過的單詞,才會參與後驗概率計算,伯努利模型中,沒有在d中出現,但是在全域性單詞表中出現的單詞,也會參與計算,不過是作為“反方”參與的。

多項式模型和貝努利模型的關鍵區別:

1.貝努利模型是以“文件”為統計單位,即統計某個特徵詞出現在多少個文件當中 (最大似然方法估計條件概率p(x(i)|c)的時候),當某個特徵詞在某一個文件中出現多次的時候,貝努利模型忽略了出現的次數,只算作一次。而多項式模型是以“詞”為統計單位,當某個特徵詞在某個文件中多次出現的時候,與貝努利模型相反,它算作多次——這個更符合做NLP人的想法。

2.對特徵向量中0值維度的處理。對於某個新的輸入樣本,當某個維度的取值是0的時候(也就是該特徵詞不出現在輸入樣本中),貝努利模型是要計算 p( x(i,0) | c(0)) 的值。而多項式模型直接忽略這樣的特徵,即只用 p( x(i,1) | c(0) ) 的值來進行計算,從而區分各個類別。

注意:樸素貝葉斯假設事物屬性之間相互條件獨立為前提。

三.多項式模型

1.基本原理

在多項式模型中, 設某文件d=(t1,t2,…,tk),tk是該文件中出現過的單詞,允許重複,則

先驗概率P(c)= 類c下單詞總數/整個訓練樣本的單詞總數

類條件概率P(tk|c)=(類c下單詞tk在各個文件中出現過的次數之和+1)/(類c下單詞總數+|V|)

V是訓練樣本的單詞表(即抽取單詞,單詞出現多次,只算一個),|V|則表示訓練樣本包含多少種單詞。 P(tk|c)可以看作是單詞tk在證明d屬於類c上提供了多大的證據,而P(c)則可以認為是類別c在整體上佔多大比例(有多大可能性)。

2.舉例

給定一組分好類的文字訓練資料,如下:
naive-bayes-5
給定一個新樣本Chinese Chinese Chinese Tokyo Japan,對其進行分類。該文字用屬性向量表示為d=(Chinese, Chinese, Chinese, Tokyo, Japan),類別集合為Y={yes, no}。

類yes下總共有8個單詞(5個Chinese+1個Beijing+1個Shanghai+1個Macao),類no下總共有3個單詞(1個Tokyo+1個Japan+1個Chinese),訓練樣本單詞總數為11,因此P(yes)=8/11, P(no)=3/11。類條件概率計算如下:

//|V|表示訓練樣本包含多少種單詞,即為:Chinese Beijing Shanghai Macao Tokyo Japan 共6個
P(Chinese | yes)=(5+1)/(8+6)=6/14=3/7
 
P(Japan | yes)=P(Tokyo | yes)= (0+1)/(8+6)=1/14
 
P(Chinese|no)=(1+1)/(3+6)=2/9
 
P(Japan|no)=P(Tokyo| no) =(1+1)/(3+6)=2/9

分母中的8,是指yes類別下所有詞出現的總數,也即訓練樣本的單詞總數,6是指訓練樣本有Chinese,Beijing,Shanghai, Macao, Tokyo, Japan 共6種單詞,3是指no類下共有3個單詞。

有了以上類條件概率,開始計算後驗概率:

P(yes | d)=P(Chinese|yes)×P(Japan|yes)×P(Tokyo|yes)*P(c)=(3/7)3次×1/14×1/14×8/11=108/184877≈0.00058417

 P(no | d)= P(Chinese|no)×P(Japan|no)×P(Tokyo|no)*P(c)=(2/9)3次×2/9×2/9×3/11=32/216513≈0.00014780

比較大小,即可知道這個文件屬於類別china。

四.伯努利模型

1.基本原理
以檔案為粒度,或者說是採用二項分佈模型,伯努利實驗即N次獨立重複隨機實驗,只考慮事件發生/不發生,所以每個單詞的表示變數是布林型的類條件概率。

P(c)= 類c下檔案總數/整個訓練樣本的檔案總數

P(tk|c)=(類c下包含單詞tk的檔案數+1)/(類c下檔案總數+2)

備註:P(tk|c) 中的(類c下檔案總數+2) 不是網上流傳的(類c下單詞總數+2)。

2.舉例

繼續以前面的例子為例,使用伯努利模型計算文字分類。d=(Chinese, Chinese, Chinese, Tokyo, Japan)

類yes下總共有3個檔案,類no下有1個檔案,訓練樣本檔案總數為4,因此P(yes)=3/4, P(Chinese | yes)=(3+1)/(3+2)=4/5,條件概率如下:

//分子:Japan 在yes分類中出現的檔案數為0 即0+1,分母:yes分類下檔案總數為3 ,即3+2.
//Tokyo 同理 
P(Japan | yes)=P(Tokyo | yes)=(0+1)/(3+2)=1/5
P(Chinese | yes)=(3+1)/(3+2)=4/5
//分子:Beijing 在yes分類中出現的檔案數為1 即1+1,分母:yes分類下檔案總數為3 ,即3+2.
//Macao,Shanghai 同理
P(Beijing | yes)= P(Macao|yes)= P(Shanghai |yes)=(1+1)/(3+2)=2/5
 
P(Chinese|no)=(1+1)/(1+2)=2/3
 
P(Japan|no)=P(Tokyo| no) =(1+1)/(1+2)=2/3
 
P(Beijing| no)= P(Macao| no)= P(Shanghai | no)=(0+1)/(1+2)=1/3

有了以上類條件概率,開始計算後驗概率,

P(yes | d)=P(yes)×P(Chinese|yes) ×P(Japan|yes) ×P(Tokyo|yes)×(1-P(Beijing|yes)) ×(1-P(Shanghai|yes))×(1-P(Macao|yes))
<P(yes | d)=3/4×4/5×1/5×1/5×(1-2/5) ×(1-2/5)×(1-2/5)=81/15625≈0.005
P(no | d)= 1/4×2/3×2/3×2/3×(1-1/3)×(1-1/3)×(1-1/3)=16/729≈0.022

因此,這個文件不屬於類別china。

結束語

    雖然後續還會提到其它分類演算法,不過這裡我想先提一下如何評價分類器的質量

首先要定義,分類器的正確率指分類器正確分類的專案佔所有被分類專案的比率。

通常使用迴歸測試來評估分類器的準確率,最簡單的方法是用構造完成的分類器對訓練資料進行分類,然後根據結果給出正確率評估。但這不是一個好方法,因為使用訓練資料作為檢測資料有可能因為過分擬合而導致結果過於樂觀,所以一種更好的方法是在構造初期將訓練資料一分為二,用一部分構造分類器,然後用另一部分檢測分類器的準確率。

實踐已多次證明,樸素貝葉斯在許多資料集上不遜於甚至優於一些更復雜的分類方法。這裡的原則是:優先嚐試簡單的方法。

機器學習的研究者嘗試用更復雜的學習模型來得到良好的結果,許多年後發現簡單的方法仍可取得同樣甚至更好的結果。