機器學習系列【分類】scikit-learn(一)

  樸素貝葉斯是經典的機器學習算法之一,同時也是爲數不多的基於概率論的分類算法。不過樸素貝葉斯算法相對而言,還是很簡單,很容易理解的。用一句話概括理解就是:通過已知數據判定未知數據的一個概率問題,多用於文本分類,比如垃圾郵件過濾等。
本篇主要從以下幾方面來總結:

  • 基本概念
  • 基於前提
  • 三種實現方式
  • 優化改進
  • 延伸
    宏觀見如下思維導圖:
    樸素貝葉斯

一、基本概念:

1、定義

樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法。

2、“樸素”的含義

各樣本特徵間相互獨立;
在這裏插入圖片描述
就比如體重和身高是有直接關係的,但是我們在這裏就可以很天真的假設兩者是沒有任何關係的。樸素其實就是各樣本特徵間保持相互獨立。

二、基於前提

1、貝葉斯公式

在這裏插入圖片描述
根據如上可愛的圖,我們可以得到很多有用信息

P(BA)=P(AB)P(A)P(B|A)=\frac{P(A∩B)}{P(A)} 在A發生的條件下,B發生的概率(A∩B的部分)

P(AB)=P(AB)P(B)P(A|B)=\frac{P(A∩B)}{P(B)} 在B發生的條件下,A發生的概率(A∩B的部分)

推斷可得到:(貝葉斯公式)

P(BA)=P(AB)P(B)P(A)P(B|A)=\frac{P(A|B)*P(B)}{P(A)}

P(AB)=P(BA)P(A)P(B)P(A|B)=\frac{P(B|A)*P(A)}{P(B)}

  • 先驗概率:P(A), P(B)
  • 條件概率:P(A|B) ,P(B|A)

2、相互獨立

  獨立的定義有多種表達方式。在討論概率問題時,獨立性是一種重要的基礎概念。常用的幾種表達如下:

  1. A與B獨立
  2. (條件概率與條件無關)P(A|B)=P(A|非B)
  3. (添加或去除條件不受影響)P(A|B)=P(A)
  4. (聯和概率之比相同)P(B|A):P(B|非A)=P(非B,A):P(非B,非A)
  5. ※(聯和概率是邊緣概率的乘積)P(B,A)=P(B)P(A)

我們可以舉一個很簡單明瞭的例子,見如下表格:

Y=松 Y=竹 Y=梅
X=優 148\frac{1}{48} 248\frac{2}{48} 348\frac{3}{48}
X=良 248\frac{2}{48} 448\frac{4}{48} 648\frac{6}{48}
X=中 548\frac{5}{48} 1048\frac{10}{48} 1548\frac{15}{48}

X 與Y是否相互獨立?
優:148\frac{1}{48} :248\frac{2}{48}:348\frac{3}{48}=1:2:3

良:248\frac{2}{48} :448\frac{4}{48}:648\frac{6}{48}=1:2:3

中:548\frac{5}{48} :1048\frac{10}{48}:1548\frac{15}{48}=1:2:3

  根據第4種表達方式,聯合概率之比相同,松竹梅之間的比例和優良中是毫無關係的。這種比值的方式是最能直接了當看明白的。但是方式5是最能體現相互獨立的,計算流程如下:

P(松,優)=148\frac{1}{48}

P(松)=148\frac{1}{48}+248\frac{2}{48}+548\frac{5}{48}=848\frac{8}{48}

P(優)=148\frac{1}{48}+248\frac{2}{48}+348\frac{3}{48}=648\frac{6}{48}

P(松)P(優)=848\frac{8}{48}648\frac{6}{48}=148\frac{1}{48} 滿足P(松,優)=P(松)*P(優)

P(松,良)=248\frac{2}{48}

P(良)=248\frac{2}{48}+448\frac{4}{48}+648\frac{6}{48}=1248\frac{12}{48}

P(松)P(良)=848\frac{8}{48}1248\frac{12}{48}=248\frac{2}{48} 滿足P(松,良)=P(松)*P(良)

P(松,中)=548\frac{5}{48}

P(中)=548\frac{5}{48}+1048\frac{10}{48}+1548\frac{15}{48}=3048\frac{30}{48}

P(松)P(中)=848\frac{8}{48}3048\frac{30}{48}=548\frac{5}{48} 滿足P(松,中)=P(松)*P(中)

同理:
P(竹,優)=P(竹)*P(優)
P(竹,良)=P(竹)*P(良)
P(竹,中)=P(竹)*P(中)
P(梅,優)=P(梅)*P(優)
P(梅,良)=P(梅)*P(良)
P(梅,中)=P(梅)*P(中)

  看到以上計算流程,發現若是人工計算的話,居然還挺麻煩。但是最後一條便於計算,也是很合理的。(詳細可參考 《程序員的數學-概率論》)

三、三種常用模型

(2019年06月17日14:59:49-後期博客詳細說明)

  • 基於伯努利模型,即先驗爲伯努利分佈的樸素貝葉斯
  • 基於多項式模型,即先驗爲多項式分佈的樸素貝葉斯
  • 基於高斯模型,即先驗爲高斯分佈的樸素貝葉斯

四、公式

從一個很簡單的下例子入手,然後理解公式。

掛科了(Y) 玩遊戲(X1) 喝酒(X2) 學習(X3)
1 1 1 0
0 0 0 1
1 1 0 1
1 0 1 0
0 0 1 1
0 1 0 1
0 0 1 0
1 0 0 1

問題:我們來判定一個人,沒有玩遊戲,沒有喝酒,還學習了,掛科的概率?
通過如上的表格,我們可以得到如下的基本概率:

掛科了的概率:P(Y=1)=48P(Y=1)=\frac{4}{8}

不掛科的概率:P(Y=0)=48P(Y=0)=\frac{4}{8}

玩遊戲的概率:P(X1=1)=38P(X1=1)=\frac{3}{8}

不玩遊戲的概率:P(X1=0)=58P(X1=0)=\frac{5}{8}

喝酒了的概率:P(X2=1)=48P(X2=1)=\frac{4}{8}

沒喝酒的概率:P(X2=0)=48P(X2=0)=\frac{4}{8}

學習了的概率:P(X3=1)=58P(X3=1)=\frac{5}{8}

沒學習的概率:P(X3=0)=38P(X3=0)=\frac{3}{8}

玩遊戲了且掛科的概率:P(YX1)=28P(Y \cap X1)=\frac{2}{8}

喝酒了且掛科的概率:P(YX2)=28P(Y \cap X2)=\frac{2}{8}

學習了且掛科的概率:P(YX3)=28P(Y \cap X3)=\frac{2}{8}

條件概率:玩遊戲了且掛科的概率:P(YX1)=P(YX1)P(X1)=23P(Y|X1)=\frac{P(Y \cap X1)}{P(X1)}=\frac{2}{3}

喝酒了且掛科的概率:P(YX2)=P(YX2)P(X2)=12P(Y|X2)=\frac{P(Y \cap X2)}{P(X2)}=\frac{1}{2}

學習了且掛科的概率:P(YX3)=P(YX3)P(X3)=25P(Y|X3)=\frac{P(Y \cap X3)}{P(X3)}=\frac{2}{5}

對於貝葉斯推論,由於上邊已經證明,所以這邊不多做描述。
我們可以通過X1舉例得到一個貝葉斯公式:

P(YX1)=P(X1Y)P(Y)P(X1)P(Y|X1)=\frac{P(X1|Y)P(Y)}{P(X1)}

我們此刻重寫貝葉斯準則,其不僅僅與X1有關,而且與X2,X3都有關。
把X1替換成X1,X2,X3,即

P(YX1,X2,X3)=P(X1,X2,X3Y)P(Y)P(X1,X2,X3)P(Y|X1,X2,X3)=\frac{P(X1,X2,X3|Y)P(Y)}{P(X1,X2,X3)}

X1,X2,X3之間是相互獨立的,在樸素貝葉斯中,假設所有條件都是相互獨立的,該假設也稱作條件獨立性假設,
意味着可以使用P(X1|Y)P(X2|Y)P(X3|Y)來計算 P(X1,X2,X3|Y)P(Y),也就是說

P(X1,X2,X3|Y)P(Y)≈P(X1|Y)P(X2|Y)P(X3|Y)

其中P(X1Y)=P(YX1)P(Y)P(X1)P(X1|Y)=\frac{P(Y|X1)P(Y)}{P(X1)}

P(X2Y)=P(YX2)P(Y)P(X2)P(X2|Y)=\frac{P(Y|X2)P(Y)}{P(X2)}

P(X3Y)=P(YX3)P(Y)P(X3)P(X3|Y)=\frac{P(Y|X3)P(Y)}{P(X3)}

所以P(Y|X1,X2,X3)≈P(X1|Y)P(X2|Y)P(X3|Y)P(Y),在此忽略了P(X1,X2,X3)
最終需要的問題是求:沒有玩遊戲,麼有喝酒,還學習了,掛科的概率是多少。

P(Y=0|X1=0,X2=0,X3=1)=528\frac{5}{28}

將如上的X1,X2,X3換成W,W爲一個向量,即它由多個數值組成,這就是我們的樸素貝葉斯公式

P(YW)=P(WY)P(Y)P(W)P(Y|W)=\frac{P(W|Y)P(Y)}{P(W)}

五、優化方式

1、拉普拉斯平滑

比如上邊的掛科的例子,我們來計算沒玩遊戲,沒喝酒,還學習了掛科與不掛科的概率

P(Y=0|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)=12\frac{1}{2}12\frac{1}{2}12\frac{1}{2}*12\frac{1}{2}=116\frac{1}{16}

P(Y=1|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)=34\frac{3}{4}12\frac{1}{2}34\frac{3}{4}*12\frac{1}{2}=964\frac{9}{64}

  所以通過以上概率,我們可以分析得到,若不玩遊戲,不喝酒,還學習了,不掛科的概率比較大。
但是用極大似然估計法,有可能會出現所要估計的概率值爲0的情況,這會影響後驗概率的計算結果。這種情況我們則引入貝葉斯估計的情況,也就是專業術語,拉普拉斯平滑,加入一個參數λ,進行調和,來避免0的情況的發生。當λ=1的時候,就是拉普拉蘇平滑;當λ=0的時候,也就是極大似然估計。
在這裏插入圖片描述
  其中K就是表示有幾種類別,我們都知道樸素貝葉斯算法是適用於標稱型數據的,也就是隻存在是和否兩種情況,掛科與否的例子,我們用了1和0兩種,所以K=2.加入λ的取值,我們計算的結果如下:

P(Y=1)=4+18+2=510P(Y=1)=\frac{4+1}{8+2}=\frac{5}{10}

P(Y=0)=4+18+2=510P(Y=0)=\frac{4+1}{8+2}=\frac{5}{10}

P(Y=0|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)=1+12+2\frac{1+1}{2+2}1+12+2\frac{1+1}{2+2}1+12+2\frac{1+1}{2+2}*510\frac{5}{10}=116\frac{1}{16}

P(Y=1|X1=0,X2=0,X3=1)=P(X1|Y)P(X2|Y)P(X3|Y)P(Y)=3+14+2\frac{3+1}{4+2}1+12+2\frac{1+1}{2+2}3+14+2\frac{3+1}{4+2}*510\frac{5}{10}=19\frac{1}{9}

計算結果是不一樣的。

2、條件概率對數化

  另一個遇到的問題則是下溢出,就依舊取值上述的例子,當P(X1|Y)P(X2|Y)P(X3|Y)太小時,當用python語言計算的時候會出現下溢出或者得不到正確的答案,這時候我們則可以通過取對數的方式來解決出錯的問題。(在手動計算是沒有問題的)
在這裏插入圖片描述
  由上邊的圖我們可以瞭解到,f(x)與In(f(x))在相同的區域內會同時增加或者減少,並且在相同點上取到極值,取值雖然不同,但是由於樸素貝葉斯是一種分類的算法,所以並不影響最後的結果。

六、延伸 貝葉斯網絡

  樸素貝葉斯是基於各特徵之間相互獨立的,直接計算條件概率進行分類,是最簡單的一種貝葉斯算法。而實際情況下,各特徵獨立這個條件是難以滿足的,此時需要使用貝葉斯網絡進行分類。本篇不多做介紹,後期學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章