github:代碼實現
本文算法均使用python3實現
1. 樸素貝葉斯是什麼
依據《統計學方法》上介紹:
樸素貝葉斯法(Naive Bayes)是基於貝葉斯定理與特徵條件獨立假設的分類方法。對於給定的訓練數據集,首先基於特徵條件獨立假設學習輸入/輸出的聯合概率分佈;然後基於此模型,對給定的輸入 xx ,利用貝葉斯定理求出後驗概率最大的輸出 yy 。
可能讀完上面這段話仍舊沒辦法理解樸素貝葉斯法到底是什麼,又是怎樣進行分類的。下面我儘可能詳細且直觀地描述樸素貝葉斯法的工作原理。首先我們需要知道的是,樸素貝葉斯是基於概率論的分類算法。然後我們來了解幾個統計學小概念。(我們將使用以下這個例子來貫穿全文進行講解。)
在夏季,某公園男性穿涼鞋的概率爲 1/2 ,女性穿涼鞋的概率爲 2/3 ,並且該公園中男女比例通常爲 2:1 ,問題:若你在公園中隨機遇到一個穿涼鞋的人,請問他的性別爲男性或女性的概率分別爲多少?
1.1 先驗概率
先驗概率(prior probability)是指根據以往經驗和分析得到的概率,如全概率公式(後面會講)。
我們使用以上例子來解釋一下什麼是先驗概率。根據以上例子我們設定:假設某公園中一個人是男性爲事件 Y=ymen ,是女性則是 Y=ywomen ;一個人穿涼鞋爲事件 X=x1 ,未穿涼鞋爲事件 X=x0 。而一個人的性別與是否穿涼鞋這兩個事件之間是相互獨立的。
於是我們可以看到該例子中存在四個先驗概率:
P(X=x1)與P(X=x0)
P(Y=ymen)與P(Y=ywomen)
其中 P(Y=ymen)與P(Y=ywomen)P(Y=ymen)與P(Y=ywomen) 可以根據例子中“該公園中男女比例通常爲 2:1 ” 這一以往經驗求得:P(Y=ymen)=2/3 以及 P(Y=ywomen)=1/3 。而先驗概率 P(Y=ymen)與P(Y=ywomen)P(Y=ymen)與P(Y=ywomen) 並不能直接得出,需要根據全概率公式來求解。在學習全概率公式之前,我們先了解一下條件概率。
1.2 條件概率
條件概率是指在事件 Y=y 已經發生的條件下,事件 X=x 發生的概率。條件概率可表示爲: P(X=x|Y=y)。而條件概率計算公式爲:
P(X=x|Y=y)=P(X=x,Y=y)/P(Y=y)
其中 P(X=x,Y=y)P(X=x,Y=y) 是聯合概率,也就是兩個事件共同發生的概率。而 P(Y=y)以及P(X=x) 是先驗概率。
我們用例子來說明一下就是: “某公園男性穿涼鞋的概率爲 1/2 ”,也就是說“是男性的前提下,穿涼鞋的概率是 1/2 ”,此概率爲條件概率,即 P(X=x1|Y=ymen)=1/2。同理“女性穿涼鞋的概率爲 2/3 ” 爲條件概率 P(X=x1|Y=ywomen)=1/2。
1.3 全概率公式
全概率公式是指:如果事件 Y=y1,Y=y2,...,Y=ynY=y1,Y=y2,...,Y=yn 可構成一個完備事件組,即它們兩兩互不相容,其和爲全集。則對於事件 X=x 有:
因此對於上面的例子,我們可以根據全概率公式求得:
P(X=x1)=P(Y=ymen)P(X=x1|Y=ymen)+P(Y=ywomen)P(X=x1|Y=ywomen)=2/3×1/2+1/3×2/3=5/9
P(X=x0)=P(Y=ymen)P(X=x0|Y=ymen)+P(Y=ywomen)P(X=x0|Y=ywomen)=2/3×1/2+1/3×1/3=4/9
也就是說不考慮性別的情況下,公園中穿脫鞋的概率爲 5/9 ,不穿拖鞋的概率爲 4/9 。
1.4 後驗概率
後驗概率是指,某事件 X=x 已經發生,那麼該事件是因爲事件 Y=y 的而發生的概率。也就是上例中所需要求解的“在知道一個人穿拖鞋的前提下,這個人是男性的概率或者是女性的概率是多少”。後驗概率形式化便是:
P(Y=ymen|X=x1)。
後驗概率的計算要以先驗概率爲基礎。後驗概率可以根據通過貝葉斯公式,用先驗概率和似然函數計算出來。
貝葉斯公式如下:
而樸素貝葉斯算法正是利用以上信息求解後驗概率,並依據後驗概率的值來進行分類。
使用上面的例子來進行理解,後驗概率爲:
P(Y=ymen|X=x1)=P(X=x1|Y=ymen)P(Y=ymen)P(X=x1)=(1/2×2/3) /(5/9)=3/5
P(Y=ywomen|X=x1)=P(X=x1|Y=ywomen)P(Y=ywomen)P(X=x1)=(2/3×1/3)/(5/9)=2/5
也就是說,在知道一個人穿拖鞋的前提下,這個人是男性的概率是 3/5 ,是女性的概率是 2/5 。如果問題是“判斷該人是男性還是女性”,此問題就是一個分類問題。由於依據貝葉斯公式計算的後驗概率是男性的概率大於是女性的概率,即由於 P(Y=ymen|X=x1)>P(Y=ywomen|X=x1),那麼我們就可以將其分類爲男性(實際在使用樸素貝葉斯進行分類時,不需要求解分母 P(X=x1))。
到此,我們已經使用例子來講解了使用樸素貝葉斯進行分類的基本步驟以及簡單的原理了。接下來我們將對樸素貝葉斯的原理進行詳細地探討。
2. 樸素貝葉斯的推導
對於樣本集:
D={(x(1)1,x(1)2,...,x(1)n,y1),(x(2)1,x(2)2,...,x(2)n,y2),...,(x(m)1,x(m)2,...,x(m)n,ym)
其中 mm 表示有 mm 個樣本, nn 表示有 nn 個特徵。 yi,i=1,2,..,m 表示樣本類別,取值爲 {C1,C2,...,CK} 。
先驗概率爲:
P(Y=Ck),k=1,2,...,K
條件概率爲(依據條件獨立假設):
4. 樸素貝葉斯算法過程
以參數估計爲極大似然估計爲例:
樣本集爲:
D={(x(1)1,x(1)2,...,x(1)n,y1),(x(2)1,x(2)2,...,x(2)n,y2),...,(x(m)1,x(m)2,...,x(m)n,ym)}D={(x1(1),x2(1),...,xn(1),y1),(x1(2),x2(2),...,xn(2),y2),...,(x1(m),x2(m),...,xn(m),ym)}
其中 yi,i=1,2,..,myi,i=1,2,..,m 表示樣本類別,取值爲 {C1,C2,...,CK}{C1,C2,...,CK} 。
(1)計算先驗概率:求出樣本類別的個數 KK 。對於每一個樣本 Y=CkY=Ck ,計算出 P(Y=Ck)P(Y=Ck) 。其爲類別 CkCk 在總樣本集中的頻率。
(2)計算條件概率:將樣本集劃分成 KK 個子樣本集,分別對屬於 CkCk 的子樣本集進行計算,計算出其中特徵 Xj=ajlXj=ajl 的概率: P(Xj=ajl|Y=Ck)P(Xj=ajl|Y=Ck)。其爲該子集中特徵取值爲 ajlajl 的樣本數與該子集樣本數的比值。
(3)針對待預測樣本 xtestxtest ,計算其對於每個類別 CkCk 的後驗概率:P(Y=Ck|X=xtest)=P(Y=Ck)∏nj=1P(Xj=xtestj|Y=Ck)P(Y=Ck|X=xtest)=P(Y=Ck)∏j=1nP(Xj=xjtest|Y=Ck) 。概率值最大的類別即爲待預測樣本的預測類別。
5. 樸素貝葉斯算法分析
該小節參考博文[4]
優點:
(1)樸素貝葉斯模型發源於古典數學理論,有穩定的分類效率。
(2)對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練,尤其是數據量超出內存時,我們可以一批批的去增量訓練。
(3)對缺失數據不太敏感,算法也比較簡單,常用於文本分類。
缺點:
(1)理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因爲樸素貝葉斯模型給定輸出類別的情況下,假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。而在屬性相關性較小時,樸素貝葉斯性能最爲良好。對於這一點,有半樸素貝葉斯之類的算法通過考慮部分關聯性適度改進。
(2)需要知道先驗概率,且先驗概率很多時候取決於假設,假設的模型可以有很多種,因此在某些時候會由於假設的先驗模型的原因導致預測效果不佳。
(3)由於我們是通過先驗和數據來決定後驗的概率從而決定分類,所以分類決策存在一定的錯誤率。
(4)對輸入數據的表達形式很敏感。
引用及參考:
[1] 《統計學習方法》李航著
[2] 《機器學習實戰》Peter Harrington著
[3] 《機器學習》周志華著
[4] https://www.cnblogs.com/pinard/p/6069267.html
[5] https://blog.csdn.net/zengxiantao1994/article/details/72787849
[6] https://www.cnblogs.com/csguo/p/7804355.html
轉載自:https://www.cnblogs.com/lliuye/p/9178090.html