1. 程式人生 > >樸素貝葉斯原理及實現

樸素貝葉斯原理及實現

一、理論基礎 (一)樸素貝葉斯定理

簡單的說:一個樣本屬於某個類別的概率是:這個類別出現的概率 * 已知這個類別出現的情況下各個屬性出現的概率的乘積

根據貝葉斯定理,事件X發生時,類別Ci發生的後驗概率為:

而P(X)對於所有的CI都是相等的,且假設X的各個屬性之間是獨立的(樸素假設),則可得: 即符合X特徵變數的類別Ci的後驗概率可由上述公式計算出來,然後比較各個Ci的大小,最大的那個類別即最有可能發生的。 (二)示例 1、訓練資料 2、需要預測的資料為 X={age=youth,income=medium,student=yes,credit_rating} 計算此使用者購買computer的可能性。
3、計算為YES的概念 (1)購買使用者的總概率。從表中可見14人中有9個購買了電腦,因此概率為: (2)在購買使用者的9人中符合X特徵中的age=youth的有2人,比例為: (3)在購買使用者的9人中符合X特徵中的income=medium的有4人,比例為: (4)在購買使用者的9人中符合X特徵中的student=yes的有6人,比例為 (5)在購買使用者的9人中符合X特徵中的credit_rating的有6人,比例為 根據樸素貝葉斯定理, 其中: P(X)對所有分類都相等 符合X={age=youth,income=medium,student=yes,credit_rating}的情況下,Ci={buys_computer=yes}的後驗熬概率為:
3、使用同樣的方法,可以計算出符 合X的情況下,Cj=(buys_computer=no)的後驗概率為: 4、結論:由上面的計算結果可知,樸素貝葉斯分類預測元組X的類為buy_computer=yes。 (三)三種常見的模型

1、伯努利模型

與多項式模型一樣,伯努利模型適用於離散特徵的情況,所不同的是,伯努利模型中每個特徵的取值只能是1和0(以文字分類為例,某個單詞在文件中出現過,則其特徵值為1,否則為0). 伯努利模型中,條件概率P(xi|yk)的計算方式是: 當特徵值xi為1時,P(xi|yk)=P(xi=1|yk) 當特徵值xi為0時,P(xi|yk)=1P(xi=1
|yk)

2、多項式模型

當特徵是離散的時候,使用多項式模型。多項式模型在計算先驗概率P(yk)和條件概率P(xi|yk)時,會做一些平滑處理,具體公式為: P(yk)=Nyk+αN+kα
N是總的樣本個數,k是總的類別個數,Nyk是類別為yk的樣本個數,α是平滑值。
P(xi|yk)=Nyk,xi+αNyk+nα
Nyk是類別為yk的樣本個數,n是特徵的維數,Nyk,xi是類別為yk的樣本中,第i維特徵的值是xi的樣本個數,α是平滑值。
α=1時,稱作Laplace平滑,當0<α<1時,稱作Lidstone平滑,α=0時不做平滑。 如果不做平滑,當某一維特徵的值xi沒在訓練樣本中出現過時,會導致P(xi|yk)=0,從而導致後驗概率為0。加上平滑就可以克服這個問題。

3、高斯模型

當特徵是連續變數的時候,運用多項式模型就會導致很多P(xi|yk)=0(不做平滑的情況下),此時即使做平滑,所得到的條件概率也難以描述真實情況。所以處理連續的特徵變數,應該採用高斯模型。 下面是一組人類身體特徵的統計資料。 性別 身高(英尺) 體重(磅) 腳掌(英寸) 6 180 12 5.92 190 11 5.58 170 12 5.92 165 10 5 100 6 5.5 150 8 5.42 130 7 5.75 150 9 已知某人身高6英尺、體重130磅,腳掌8英寸,請問該人是男是女? 根據樸素貝葉斯分類器,計算下面這個式子的值。
P(身高|性別) x P(體重|性別) x P(腳掌|性別) x P(性別)
這裡的困難在於,由於身高、體重、腳掌都是連續變數,不能採用離散變數的方法計算概率。而且由於樣本太少,所以也無法分成區間計算。怎麼辦? 這時,可以假設男性和女性的身高、體重、腳掌都是正態分佈,通過樣本計算出均值和方差,也就是得到正態分佈的密度函式。有了密度函式,就可以把值代入,算出某一點的密度函式的值。 比如,男性的身高是均值5.855、方差0.035的正態分佈。所以,男性的身高為6英尺的概率的相對值等於1.5789(大於1並沒有關係,因為這裡是密度函式的值,只用來反映各個值的相對可能性)。 對於腳掌和體重同樣可以計算其均值與方差。有了這些資料以後,就可以計算性別的分類了。 P(身高=6|男) x P(體重=130|男) x P(腳掌=8|男) x P(男)     = 6.1984 x e-9  P(身高=6|女) x P(體重=130|女) x P(腳掌=8|女) x P(女)     = 5.3778 x e-4 1 2 3 4 1 2 3 4 可以看到,女性的概率比男性要高出將近10000倍,所以判斷該人為女性。
  • 總結
高斯模型假設每一維特徵都服從高斯分佈(正態分佈): P(xi|yk)=12πσ2yk,ie(xiμyk,i)22σ2yk,i μyk,i表示類別為yk的樣本中,第i維特徵的均值。 σ2yk,i表示類別為yk的樣本中,第i維特徵的方差。 4、簡單總結 (1)多項式模型:適用於屬性值為有限的多個數值的情況,如收入分為高中低三個層次。 (2)高斯模型:適用於屬性值為連續的情況,如收入的具體數值,觀看某個電視劇的次數等。當然也可以將這些值劃分到一定的區間,然後使用多項式模型,但這樣就沒這麼精確了。 (3)伯努利模型:適用於屬性值只是2個的情況。如性別作為標籤,值只是男和女。其實這只是一種特殊的二項式。 (4)如果一個訓練集資料足夠多且是高斯分佈的話;利用多項式分佈進行訓練的話,訓練出的模型會逼近高斯分佈。也就是說資料量大大多於屬性值的數量時,完全可以用多項式模型代替高斯模型。這是spark mllib目前未實現高斯分佈的一個原因。另一個可能的原因是資料分佈在各個節點,無法算方差,最終還是要落在一個節點上進行計算。 二、spark實現 (一)二項式及多項式模型1、訓練資料 說明: (1)樸素貝葉斯要求各個屬性間是獨立的,但事實上這些資料的屬性是不獨立的,比如年齡和是否學生就不是獨立的屬性。這裡只是作為一個示例 (2)上述屬性中,是否學生符合伯努利模型,其餘3個屬性均符合二項式模型。 三、spark mllib API使用