2. 朴素貝葉斯計算嫁人概率
https://zhuanlan.zhihu.com/p/26329951
3. 朴素貝葉斯開發python實例以及注意的問題
https://zhuanlan.zhihu.com/p/27906640
很傻很天真卻很很好很強大的貝葉斯定理。。。
機器學習算法中,有種依據概率原則進行分類的朴素貝葉斯算 法,正如氣象學家預測天氣一樣,朴素貝葉斯算法就是應用先 前事件的有關數據來估計未來事件發生的概率
基於朴素貝葉斯的垃圾郵件分類
BoW(詞袋)模型
Bag-of-words model (BoW model) 最早出現在自然語言處理(Natural Language Processing)和信息檢索(Information Retrieval)領域.。該模型忽略掉文本的語法和語序等要素,將其僅僅看作是若干個詞匯的集合,文檔中每個單詞的出現都是獨立的。BoW使用一組無序的單詞(words)來表達一段文字或一個文檔。
假設我們詞庫中只有四個單詞I,don’t,love,you,分別用符號w1,w2,w3,w4意義對應表示,那么一封郵件就可以由這四個單詞是否出現來表示,如:$w1\bigcap \neg w2 \bigcap w2 \bigcap w3$就表示文檔I love you,而$w1\bigcap w2 \bigcap w2 \bigcap w3$就表示文檔I don't love you。
我們將單詞出現的頻率視為它出現的概率,如下圖則P(Viagra)=5%。
如果我們知道P(垃圾郵件)和P(Viagra)是相互獨立的, 則容易計算P(垃圾郵件&Viagra),即這兩個事件同時發生 的概率。20%*5%=1%
獨立事件我們可以簡單的應用這個方法計算,但是在現實中, P(垃圾郵件)和P(Viagra)更可能是高度相關的,因此上述計算是不正確的,我們需要一個精確的公式來描述這兩個事件之間的關系。
貝葉斯公式
垃圾郵件中的朴素貝葉斯公式
P(spam)為先驗概率,P(spam|Viagra)為在Viagra單詞出現后的后驗概率。如果你不懂什么是先驗概率和后驗概率,請戳那些年被教科書繞暈的概率論基礎
計算貝葉斯定理中每一個組成部分的概率,我們必須構造一個頻率表
計算貝葉斯公式
P(垃圾郵件|Viagra)=P(Viagra|垃圾郵件)*P(垃圾郵件)/P(Viagra)=(4/20)*(20/100)/(5/100)=0.8
因此,如果電子郵件含有單詞Viagra,那么該電子郵件是垃圾 郵件的概率為80%。所以,任何含有單詞Viagra的消息都需 要被過濾掉。
當有額外更多的特征是,這一概念如何被使用呢?
利用貝葉斯公式,我們得到概率如下:
雖然我們寫作時,相鄰單詞之間其實是有關聯的,但是為了方便建立模型,我們假設單詞的出現是相互獨立,這也是Naive Bayes的Naive之處,很傻很天真,但是在實際應用中卻發現其效果很好很強大。由於相互獨立,那么就可以轉化為接下來的公式:
• 分母可以先忽略它,垃圾郵件的總似然為:(4/20)*(10/20)*(20/20)*(12/20)*(20/100)=0.012
• 非垃圾郵件的總似然為:(1/80)*(66/80)*(71/80)*(23/80)*(80/100)=0.002
• 將這些值轉換成概率,我們只需要一步得到垃圾郵件概率為 0.012/(0.012+0.002)=85.7%
存在的問題
另一個例子包含了4個單詞的郵件呢?
• 我們可以計算垃圾郵件的似然如下:(4/20)*(10/20)*(0/20)*(12/20)*(20/100)=0
• 非垃圾郵件的似然為:(1/80)*(14/80)*(8/80)*(23/80)*(80/100)=0.00005
• 因此該消息是垃圾郵件的概率為0/(0+0.00005)=0
• 該消息是非垃圾郵件的概率為0.00005/(0+0.00005)=1
• 問題出在Groceries這個單詞,所有單詞Grogeries有效抵消或否決了所有其他的證據。
拉普拉斯估計
而這個錯誤的造成是由於訓練量不足,會令分類器質量大大降低。為了解決這個問題,我們引入Laplace校准(這就引出了我們的拉普拉斯平滑),它的思想非常簡單,就是對沒類別下所有划分的計數加1,這樣如果訓練樣本集數量充分大時,並不會對結果產生影響,並且解決了上述頻率為0的尷尬局面。
引入拉普拉斯平滑的公式如下:


其中ajl,代表第j個特征的第l個選擇,
代表第j個特征的個數,K代表種類的個數。
為1,這也很好理解,加入拉普拉斯平滑之后,避免了出現概率為0的情況,又保證了每個值都在0到1的范圍內,又保證了最終和為1的概率性質!
本文的情況是,由於詞袋里一共是4個詞,因此Sj = 4. 由於最終結果有兩個分類,因此K = 2.
理解:
拉普拉斯估計本質上是給頻率表中的每個計數加上一個較小的數,這樣就保證了每一類中每個特征發生概率非零。
通常情況下,拉普拉斯估計中加上的數值設定為1,這樣就保證每一類特征的組合至少在數據中出現一次。
• 然后,我們得到垃圾郵件的似然為:(5/24)*(11/24)*(1/24)*(13/24)*(20/100)=0.0004
• 非垃圾郵件的似然為:(2/84)*(15/84)*(9/84)*(24/84)*(80/100)=0.0001
• 這表明該消息是垃圾郵件的概率為80%,是非垃圾郵件的概率為20%。
注意這里對於基本的條件概率直接相乘有兩處改進:
- 拉普拉斯平滑:各個特征的概率初始值為1,分母上統計的某一類型的樣本總數的初始值是1,這是為了避免如果有一個特征統計的概率為0,則聯合概率也為零那自然沒有什么意義了, 如果訓練樣本足夠大時,並不會對比較結果產生影響.
- 概率轉為對數:由於各個獨立特征的概率都是小於1的數,累積起來必然會是個更小的書,這會遇到浮點數下溢的問題,因此在這里我們對所有的概率都取了對數處理,這樣在保證不會有損失的情況下避免了下溢的問題。
例如:https://zhuanlan.zhihu.com/p/26329951

四個特征集合分別長相{帥,不帥}、性格{爆好,好,不好}、身高{高,中,矮}、上進與否{上進,不上進}
由於樣本不足,因此性格為“爆好”的樣本為0.
如果比較p(嫁|長相帥,性格爆好,身高高,上進)與p(不嫁|長相帥,性格爆好,身高高,上進)的概率大小,按照貝葉斯定理

沒有一個數據有爆好這個特點的,那么p(性格爆好|嫁) = 0,我們最后的p(嫁|長相帥、性格爆好、身高高、上進)由於一項p(性格爆好|嫁)為0,而造成整個概率為0,這顯然是錯誤的。
現在我們是加入拉普拉斯平滑,
我們先需要分別計算p(性格爆好|嫁)、p(長相帥|嫁)、p(身高高|嫁)、p(上進|嫁),p(嫁),p(性格爆好|嫁)=?統計滿足要求的如下面紅色部分

沒有一個滿足是性格爆好的條件,但是此時概率不為0,按照加入拉普拉斯平滑后的公式:
性格特征的個數為爆好,好,不好,三種情況,那么
為3,則最終概率為1/9 (嫁的個數為6+特征個數為3)
p(長相帥|嫁)=?統計滿足條件的如下面紅色部分:

由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑后的公式:
長相特征的個數為帥,不帥,倆種情況,那么
為2,則最終概率p(長相帥|嫁)為4/8 (嫁的個數為6+特征個數為2)
p(身高高|嫁) = ?統計滿足條件的如下面紅色部分:

由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑后的公式:
身高特征的個數為高,中,矮情況,那么
為3,則最終概率p(身高高|嫁)為4/9 (嫁的個數為6+特征個數為3)
p(上進|嫁)=?統計滿足要求的如下面紅色部分:

由上圖可知滿足要求的為5個,按照加入拉普拉斯平滑后的公式:
上進特征的個數為上進,不上進情況,那么
為2,則最終概率p(上進|嫁)為6/8 (嫁的個數為6+特征個數為2)
p(嫁) = ?滿足要求的如下紅色標注:

由上圖可知滿足要求的為6個,按照加入拉普拉斯平滑后的公式:
種類的個數為嫁,不嫁情況,那么K為2,則最終概率p(嫁)為7/14 = 1/2 (嫁的個數為6+種類個數為2)
到這里為止,我們已經算出了在該男生條件下,嫁的概率為:
p(嫁|長相帥、性格爆好、身高高、上進) = 1/9*4/8*4/9*6/8*1/2
p(不嫁|長相帥、性格爆好、身高高、上進) 同理。見原文https://zhuanlan.zhihu.com/p/26329951。

