1. 程式人生 > >01 貝葉斯演算法 - 樸素貝葉斯

01 貝葉斯演算法 - 樸素貝葉斯

引子:

1、孩子的性別問題

已知一對夫妻生了2個孩子,其中一個是女孩,那麼另一個也是女孩的概率的多少?
普遍大家會覺得生男生女都一樣,所以另一個也是女孩的概率是1/2。而另一部分稍微聰明一點的人認為:根據排列組合,兩個孩子生男生女一共有4種可能性,所以都是女生的概率是1/4。
然而恭喜你們,完美得避開了正確答案。
我們來看看這究竟是怎麼一回事,不考慮數學公式,我們來看看兩個孩子中其中一個是女孩的可能性有哪些。

首先,小夫妻生了老大和老二,但題幹中並沒有說明哪個是女孩。
給出所有生孩子可能出現的情況:
(老大,老二) = { 男男, 女女, 男女, 女男 };
在其中,出現女孩的情況有三個:
{女女, 男女, 女男 };
在這三種情況裡,滿足__其中一個是女孩,那麼另一個也是女孩的__情況只有一種。
所以__正確答案是1/3__;

用條件公式概率公式來描述:

思路1:
$color{red}{P(A|B) = P(2個都是女孩 | 其中一個是女孩) = 1/3}$
即:在其中一個是女孩的情況下,夫妻生的雙胞胎都是女孩的概率是1/3。

思路2:
P(AB) :表示兩個都是女孩的概率 = 1/4;
P(B):其中一個是女孩 = 3/4;
$\color{red}{P(A|B) =P(AB)/P(B) = 1/3}$

請將這兩個紅色的公式深深得植入大腦後開始本章的學習。


2、古典概率中著名的三門問題

參賽者會看見三扇關閉了的門,其中一扇的後面有一輛汽車,選中後面有車的那扇門可贏得該汽車,另外兩扇門後面則各藏有一隻山羊。當參賽者選定了一扇門,但未去開啟它的時候,節目主持人開啟剩下兩扇門的其中一扇,露出其中一隻山羊。主持人其後會問參賽者要不要換另一扇仍然關上的門。問題是:換另一扇門會否增加參賽者贏得汽車的機率?

推薦一個非常鬼畜的動畫來幫助大家理解這個問題:
https://mp.weixin.qq.com/s/7XqjBR4xUUOtuWyzL5v2ig

數學公式分析:

第一次選中車,第二次中選車的__聯合概率__,用公式表達:
$color{red}{P(1車,2車) 這是一個聯合概率。}$

P(1車,2車) = 第一次選中車的概率 × (第一次選中車的條件下,第二次還選中車的概率);用公式表達:
$color{red}{P(1車,2車) = P(1車) × P(2車|1車)}$
__分析:__第一次抽到車的概率1/3,第二次如果換抽到車的概率是0。

同理:第一次選中羊,第二次選中車的__聯合概率公式__:
$color{red}{P(1羊,2車) = P(1羊) × P(2車|1羊)}$
__分析:__第一次抽到羊的概率2/3,第二次抽如果換,必然抽到車。

獲獎概率:P(2車) - 如果第二次換門,抽獎獲得車的概率。
$color{red}{P(2車) = P(1車,2車) + P(1羊,2車)}$
$color{red}{= P(1車) × P(2車|1車) + P(1羊) × P(2車|1羊)}$
$color{red}{= 1/3×0 + 2/3×1 = 2/3}$

同理,如果第二次換門,抽獎獲得羊的概率:P(2羊)
$color{red}{P(2羊) = P(1羊,2羊) + P(1車,2羊)}$
$color{red}{= P(1羊) × P(2羊|1羊) + P(1車) × P(2羊|1車)}$
$color{red}{= 2/3×0 + 1/3×1 = 1/3}$

結論:從概率角度來看,換個門是有價值的。

衍生一個問題:一共1000個門裡,有999只草泥馬,只有一輛勞斯萊斯。
你選了一扇門後,我去掉了另外998個裝有草泥馬的門。
現在剩下一扇你剛才選的門,以及另外一扇沒有開啟的門。

現在你換不換?

傻子才不換...


例子想要說明的重點:

在給定條件的情況下,很多生活中看似顯而易見的概率問題會發生重大的變化。

在模型求解的過程中,會遇到2種問題:__判別式模型__和__生成式模型__。
判別式模型: P(Y|X) - 條件概率,即在發生了X的條件下,生成了Y的概率。
生成式模型: P(X,Y) - 聯合概率,即考慮X和Y同時發生的概率。
很多模型都是基於判別式和生成式進行構建的。很多__分類__的問題用的是__判別式__模型。__聚類__問題多數採用__生成式__模型。


一、貝葉斯定理相關公式

先驗概率P(A):在不考慮任何情況下,A事件發生的概率。
條件概率P(B|A):A事件發生的情況下,B事件發生的概率。
後驗概率P(A|B):在B事件發生之後,對A事件發生的概率的重新評估。

有時候 P(B|A) 不太好求,但右邊式子中的情況都比較好求,這時候可以通過貝葉斯公式轉化問題:
P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A)

貝葉斯公式


全概率:如果A和A'(A的補集)構成樣本空間的一個劃分,那麼事件B的概率為:A和A'的概率分別乘以B對這兩個事件的概率之和。

例子中的:$color{red}{P(2車) = P(1車,2車) + P(1羊,2車)}$ 就是求全概率的一種情況。
即: $color{red}{全集=A+A的補集}$;

基於條件概率的貝葉斯定律數學公式:


例子:後驗概率問題 - P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A);
有兩個碗,第一個碗中裝有30個水果糖和10個巧克力糖,第二個碗中裝有20個水果糖和20個巧克力糖,現在隨機選擇一個碗,從中取出一顆糖,發現是水果糖,請求出這顆水果糖來自一號碗的概率有多大?

思路:
1、已知每個碗中取出水果糖的概率,已知每次選碗也是隨機。
2、那麼先求出隨機取碗條件下,取出是水果糖的__全概率__。
3、再根據P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A) 公式反推後驗概率問題:水果糖來自一號碗的概率有多大。


二、樸素貝葉斯演算法

樸素貝葉斯(Naive Bayes, NB)是基於“__特徵之間是獨立的__”這一樸素假設,應用貝葉斯定理的監督學習演算法。__樸素貝葉斯本質就是一個分類演算法。__

對應給定的樣本X的特徵向量x1,x2,...,xn;該樣本X的類別y的概率可以由貝葉斯公式得到:


樸素貝葉斯演算法推導:

特徵屬性之間是獨立的,所以得到:

在給定樣本的情況下,P(x1,x2,...,xm)是常數,所以得到:

P(x1,x2,xn)是一個定值,所以式子左右成正比

從而:

用TF-IDF分詞和詞袋法來分析上述公式的應用:

分析 - 樸素貝葉斯演算法


樸素貝葉斯演算法流程/定義如下:

1、設x={a1,a2,...,an}為待分類項,其中a為x的一個特徵屬性。
2、類別集合為C={y1,y2,...,yn};
3、分別計算P(y1|x),P(y2|x),....,P(yn|x)的值(貝葉斯公式)
4、如果P(yk|x)=max{P(y1|x),P(y2|x),....,P(yn|x)},那麼認為x為yk型別。


三、高斯樸素貝葉斯

Gaussian Naive Bayes是指當特徵屬性為連續值時,而且分佈服從高斯分佈,那麼在計算P(x|y)的時候可以直接使用高斯分佈的概率公式:

因此只需要計算出各個類別中此特徵項劃分的各個均值和標準。

P(xk|yk) 怎麼求?

1、先找到yk這個分類結果的樣本,找到這些樣本對應的xk屬性,求這些xk的均值和標準差,最後代入g(x,η,σ);

2、分別計算P(x1|yk)× ....× P(xn|yk) × P(yk)的值,這個公式和P(yk|x1,x2,...,xn)成正比;

3、當分類個數為m個時,分別計算k=1~m的 P(x1|yk)× ....× P(xn|yk) × P(yk)的值,取其中最大概率時的K值,即最終的分類結果。


四、伯努利樸素貝葉斯

Bernoulli Naive Bayes是指當特徵屬性為離散值時,而且分佈服從伯努利分佈,那麼在計算P(x|y)的時候可以直接使用伯努利分佈的概率公式:

伯努利分佈是一種離散分佈,只有兩種可能的結果。1表示成功,出現的概率為p;0表示失敗,出現的概率為q=1-p;其中均值為E(x)=p,方差為Var(X)=p(1-p);


五、多項式樸素貝葉斯

Multinomial Naive Bayes是指當特徵屬性服從多項分佈,從而,對於每個類別y,引數為θy=(θy1,θy2,...,θyn),其中n為特徵屬性數目,那麼P(xi |y)的概率為θyi; 該演算法__一般用於文字分類__。


分析和總結:

如果資料中既有連續的特徵,又有離散的特徵,我們該如何去做分類?
本質上來說,我們計算的是每一個特徵對應的概率。如圖:

當遇到__連續值特徵__時,我們用__高斯__去算P(xi|y)。
遇到__離散值特__徵時,我們__用多項式__或__伯努利__去算P(xi|y)。

但問題是我們的API中沒有自動得整合這些功能,在這種情況下該怎麼去做分類呢?
首先,我們要人為得去分析特徵到底屬於什麼型別的資料。如果特徵是一個連續值比較多的資料集,我們統一使用高斯就行了。反之統一用用多項式或伯努利。或者高階一點,對資料進行分箱操做。

02 貝葉斯演算法 - 案例一 - 鳶尾花資料分類
03 貝葉斯演算法 - 案例二 - 新聞資料分類