樸素貝葉斯分類和預測演算法的原理及實現

hunhun1122發表於2018-03-28

決策樹和樸素貝葉斯是最常用的兩種分類演算法,本篇文章介紹樸素貝葉斯演算法。貝葉斯定理是以英國數學家貝葉斯命名,用來解決兩個條件概率之間的關係問題。簡單的說就是在已知P(A|B)時如何獲得P(B|A)的概率。樸素貝葉斯(Naive Bayes)假設特徵P(A)在特定結果P(B)下是獨立的。

600px-BayesEvol-1-568x322

 

1.   概率基礎:

在開始介紹貝葉斯之前,先簡單介紹下概率的基礎知識。概率是某一結果出現的可能性。例如,拋一枚勻質硬幣,正面向上的可能性多大?概率值是一個0-1之間的數字,用來衡量一個事件發生可能性的大小。概率值越接近1,事件發生的可能性越大,概率值越接近0,事件越不可能發生。我們日常生活中聽到最多的是天氣預報中的降水概率。概率的表示方法叫維恩圖。下面我們通過維恩圖來說明貝葉斯公式中常見的幾個概率。

維恩圖

在維恩圖中:

  • S:S是樣本空間,是所有可能事件的總和。
  • P(A):是樣本空間S中A事件發生的概率,維恩圖中綠色的部分。
  • P(B):是樣本空間S中B事件發生的概率,維恩圖中藍色的部分。
  • P(A∩B):是樣本空間S中A事件和B事件同時發生的概率,也就是A和B相交的區域。
  • P(A|B):是條件概率,是B事件已經發生時A事件發生的概率。

對於條件概率,還有一種更清晰的表示方式叫概率樹。下面的概率樹表示了條件概率P(A|B)。與維恩圖中的P(A∩B)相比,可以發現兩者明顯的區別。P(A∩B)是事件A和事件B同時發現的情況,因此是兩者相交區域的概率。而事件概率P(A|B)是事件B發生時事件A發生的概率。這裡有一個先決條件就是P(B)要首先發生。

概率樹B

因為條件概率P(A|B)是在事件B已經發生的情況下,事件A發生的概率,因此P(A|B)可以表示為事件A與B的交集與事件B的比率。

step2

該公式還可以轉換為以下形式,以便我們下面進行貝葉斯公式計算時使用。

step3

2.   貝葉斯公式:

貝葉斯演算法通過已知的P(A|B),P(A),和P(B)三個概率計算P(B|A)發生的概率。假設我們現在已知P(A|B),P(A)和P(B)三個概率,如何計算P(B|A)呢?通過前面的概率樹及P(A|B)的概率可知,P(B|A)的概率是在事件A發生的前提下事件B發生的概率,因此P(B|A)可以表示為事件B與事件A的交集與事件A的比率。

step6

該公式同樣可以轉化為以下形式:

step5

到這一步,我們只需要證明P(A∩B)= P(B∩A)就可以證明在已知P(A|B)的情況下可以通過計算獲得P(B|A)的概率。我們將概率樹轉化為下面的概率表,分別列出P(A|B),P(B|A),P(A),和P(B)的概率。

Bayes_theorem_visualisation

通過計算可以證明P(A|B)*P(B)和P(B|A)*P(A)最後求得的結果是概率表中的同一個區域的值,因此:

step4

我們通過P(A∩B)= P(B∩A)證明了在已知P(A|B),P(A),和P(B)三個概率的情況下可以計算出P(B|A)發生的概率。整個推導和計算過程可以說得通。但從統計學的角度來看,P(A|B)和P(B|A)兩個條件概率之間存在怎樣的關係呢?我們從貝葉斯推斷裡可以找到答案。

 

3.   貝葉斯推斷:

貝葉斯推斷可以說明貝葉斯定理中兩個條件概率之間的關係。換句話說就是我們為什麼可以通過P(A|B),P(A),和P(B)三個概率計算出P(B|A)發生的概率。

step7

在貝葉斯推斷中,每一種概率都有一個特定的名字:

  • P(B)是”先驗概率”(Prior probability)。
  • P(A)是”先驗概率”(Prior probability),也作標準化常量(normalized constant)。
  • P(A|B)是已知B發生後A的條件概率,叫做似然函式(likelihood)。
  • P(B|A)是已知A發生後B的條件概率,是我們要求的值,叫做後驗概率。
  • P(A|B)/P(A)是調整因子,也被稱作標準似然度(standardised likelihood)。

貝葉斯推斷貝葉斯推斷中有幾個關鍵的概念需要說明下:

  • 第一個是先驗概率,先驗概率是指我們主觀通過事件發生次數對概率的判斷。
  • 第二個是似然函式,似然函式是對某件事發生可能性的判斷,與條件概率正好相反。通過事件已經發生的概率推算事件可能性的概率。

維基百科中對似然函式與概率的解釋:

概率:是給定某一引數值,求某一結果的可能性

例如,拋一枚勻質硬幣,拋10次,6次正面向上的可能性多大?

似然函式:給定某一結果,求某一引數值的可能性。

例如,拋一枚硬幣,拋10次,結果是6次正面向上,其是勻質的可能性多大?

  • 第三個是調整因子:調整因子是似然函式與先驗概率的比值,這個比值相當於一個權重,用來調整後驗概率的值,使後驗概率更接近真實概率。調整因子有三種情況,大於1,等於1和小於1。
  1. 調整因子P(A|B)/P(A)>1:說明事件可能發生的概率要大於事件已經發生次數的概率。
  2. 調整因子P(A|B)/P(A)=1:說明事件可能發生的概率與事件已經發生次數的概率相等。
  3. 調整因子P(A|B)/P(A)<1:說明事件可能發生的概率與事件小於已經發生次數的概率。

因此,貝葉斯推斷可以理解為通過先驗概率和調整因子來獲得後驗概率。其中調整因子是根據事件已經發生的概率推斷事件可能發生的概率(通過硬幣正面出現的次數來推斷硬幣均勻的可能性),並與已經發生的先驗概率(硬幣正面出現的概率)的比值。通過這個比值調整先驗概率來獲得後驗概率。

後驗概率 = 先驗概率 x 調整因子

 

4.   例項1:垃圾郵件分類

貝葉斯分類器比較有名的實驗場景是對垃圾郵件進行分類和過濾。這裡我們簡單介紹下通過貝葉斯演算法過濾垃圾郵件的過程。貝葉斯分類器需要依賴歷史資料進行學習,假定包含關鍵詞”中獎”的就算作垃圾郵件。我們先經過人工篩選找出10封郵件,並對包含關鍵詞”中獎“的郵件標註為垃圾郵件(Spam)。

垃圾郵件資料表

我們將普通郵件和垃圾郵件中出現“中獎”關鍵詞的頻率進行彙總,分別記錄普通郵件中出現和未出現該關鍵詞的次數和垃圾郵件中出現和未出現該關鍵詞的次數,並分別進行彙總。

垃圾郵件頻率表

根據頻率表計算出貝葉斯演算法中所需的關鍵概率值,這裡我們已知普通郵件的概率P(Email),垃圾郵件的概率P(Spam),出現關鍵詞的概率P(Yes),未出現關鍵詞的概率P(No),以及垃圾郵件出現關鍵詞的概率P(Yes|Spam)。

 垃圾郵件概率表

 

按照貝葉斯公式,已知P(B|A),P(A)和P(B)的概率。求P(A|B)的概率。

 step1

 我們將貝葉斯公式套用到垃圾郵件分類中,已知垃圾郵件中出現“中獎”關鍵詞的概率,和垃圾郵件及“中獎”關鍵詞的概率,求出現“中獎”關鍵詞是垃圾郵件的概率。

  • P(A)=P(垃圾郵件)=0.40
  • P(B)=P(出現關鍵詞)=0.40
  • P(B|A)=P(出現關鍵詞|垃圾郵件)=0.75
  • P(A|B)=P(垃圾郵件|出現關鍵詞)

垃圾郵件分類公式

垃圾郵件分類結果

 

5.   例項2:病情預測

除了垃圾郵件分類,再來看一個病情預測的例項。通過歷史資料已知幾類疾病的病症及 患病人職業。那麼如果新來的一位打噴嚏的建築工人,如何通過貝葉斯演算法通過歷史資料來預測這位打噴嚏的建築工人患感冒的概率呢?以下是6位歷史病例的資料。

病情原始表

根據疾病的種類,我們分別對不同病症和不同職業患病的頻率進行了統計。以下分別是不同症狀與對應疾病發生的頻率表,和不同職業與所對應疾病發生的頻率表。

病情1頻率表

病情2頻率表

根據兩個頻率表分佈計算出貝葉斯演算法中所需的概率值,這裡我們已知每種疾病的概率,不同職業和不同症狀的概率,以及患感冒後打噴嚏和職業為建築工人的概率。

病情1概率表

病情2概率表

按照貝葉斯公式,已知P(B*C|A),P(A)和P(B*C)的概率。求P(A|B*C)的概率。

樸素貝葉斯1

我們假設護士和打噴嚏這兩個特徵在感冒這個結果下是獨立的,因此,上面的貝葉斯公式可以轉化為樸素貝葉斯公式:

樸素貝葉斯2

我們將貝葉斯公式套用到疾病預測中:

  • P(A)=P(感冒)=0.5
  • P(B)=P(打噴嚏)=0.5
  • P(C)=P(建築工人)=0.33
  • P(B|A)= P(打噴嚏|感冒)=0.67
  • P(C|A)= P(建築工人|感冒)=0.33

病情預測樸素貝葉斯公式

病情預測樸素貝葉斯結果

 

相關文章