理解樸素貝葉斯分類的拉普拉斯平滑

我們在上篇文章中帶你理解樸素貝葉斯分類演算法 - 知乎專欄已經根據樸素貝葉斯演算法給出了當一個男生想他的女朋友求婚,女生是否嫁給他的答案!

這個男生的四個特徵是長相不帥,性格不好,身高矮,不上進,我們最終得出的結論是女生不嫁!很多人說這是一道送分題,哈哈哈哈。我們用數學演算法也說明了不靠譜是取不到老婆滴!

那麼我們再來一個例子,假如此時另外一對情侶,這對情侶中,男生的四個特徵是,長相帥,性格爆好,身高高,上進,那麼他的女朋友嫁還是不嫁呢?可能又會有小夥伴說這是一道送分題,是不是,我們下面用事實說話!

下面通過例子來引出拉普拉斯平滑過程!

還是下面的訓練數據:

四個特徵集合分別長相{帥,不帥}、性格{爆好,好,不好}、身高{高,中,矮}、上進與否{上進,不上進}

我們此時要求出該男生在四個特徵分別是長相帥,性格爆好,身高高,上進的情況下,他對應的嫁與不嫁的概率誰大誰小,從而得出結論!

也就是要比較p(嫁|長相帥,性格爆好,身高高,上進)與p(不嫁|長相帥,性格爆好,身高高,上進)的概率大小。

按照樸素貝葉斯演算法公式,我們可以得到如下公式:

由於倆者的分母都是p(長相帥)、p(性格爆好)、p(身高高)、p(上進),那麼我們可以不算分母,比較的時候只比較倆個公式分子大小即可。

好的,下面我們開始計算,先計算在四個特徵的條件下,嫁的概率。

我們需要分別計算p(性格爆好|嫁)、p(長相帥|嫁)、p(身高高|嫁)、p(上進|嫁)

首先我們來算p(性格爆好|嫁)=?我們觀察訓練數據,發現如下:

居然沒有一個數據有爆好這個特點的,那麼p(性格爆好|嫁) = 0,那麼我們可以看出問題了,根據公式:

我們最後的p(嫁|長相帥、性格爆好、身高高、上進)由於一項p(性格爆好|嫁)為0,而造成整個概率為0,這顯然是錯誤的。

而這個錯誤的造成是由於訓練量不足,會令分類器質量大大降低。為了解決這個問題,我們引入Laplace校準(這就引出了我們的拉普拉斯平滑),它的思想非常簡單,就是對沒類別下所有劃分的計數加1,這樣如果訓練樣本集數量充分大時,並不會對結果產生影響,並且解決了上述頻率為0的尷尬局面。

引入拉普拉斯平滑的公式如下:

其中ajl,代表第j個特徵的第l個選擇,S_{j} 代表第j個特徵的個數,K代表種類的個數。

lambda 為1,這也很好理解,加入拉普拉斯平滑之後,避免了出現概率為0的情況,又保證了每個值都在0到1的範圍內,又保證了最終和為1的概率性質!

我們可以通過下面例子更加深刻的理解這個公式:(現在我們是加入拉普拉斯平滑

加入拉普拉斯平滑後

我們先需要分別計算p(性格爆好|嫁)、p(長相帥|嫁)、p(身高高|嫁)、p(上進|嫁),p(嫁)

p(性格爆好|嫁)=?統計滿足要求的如下面紅色部分

沒有一個滿足是性格爆好的條件,但是此時概率不為0,按照加入拉普拉斯平滑後的公式:

性格特徵的個數為爆好,好,不好,三種情況,那麼S_{j} 為3,則最終概率為1/9 (嫁的個數為6+特徵個數為3

p(長相帥|嫁)=?統計滿足條件的如下面紅色部分:

由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑後的公式:

長相特徵的個數為帥,不帥,倆種情況,那麼S_{j} 為2,則最終概率p(長相帥|嫁)為4/8 (嫁的個數為6+特徵個數為2)

p(身高高|嫁) = ?統計滿足條件的如下面紅色部分:

由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑後的公式:

身高特徵的個數為高,中,矮情況,那麼S_{j} 為3,則最終概率p(身高高|嫁)為4/9 (嫁的個數為6+特徵個數為3)

p(上進|嫁)=?統計滿足要求的如下面紅色部分:

由上圖可知滿足要求的為5個,按照加入拉普拉斯平滑後的公式:

上進特徵的個數為上進,不上進情況,那麼S_{j} 為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(不嫁|長相帥、性格爆好、身高高、上進)的概率,然後與上面的數值進行比較即可,演算法與上面完全一模一樣!這裡也走一遍。

我們需要估計出p(長相帥|不嫁)、p(性格爆好|不嫁)、p(身高高|不嫁)、p(上進|不嫁),p(不嫁)的概率分別為多少。

p(長相帥|不嫁)=?滿足要求如下面紅色標註:

由上圖可知滿足要求的為5個,按照加入拉普拉斯平滑後的公式:

長相帥特徵的個數為不帥,帥情況,那麼S_{j} 為2,則最終概率p(長相不帥|不嫁)為6/8 (不嫁的個數為6+特徵個數為2)

p(性格爆好|不嫁)=?滿足要求如下面紅色標註:

沒有一個滿足是性格爆好的條件,但是此時概率不為0,按照加入拉普拉斯平滑後的公式:

性格特徵的個數為爆好,好,不好,三種情況,那麼S_{j} 為3,則最終概率p(性格爆好|不嫁)為1/9 (不嫁的個數為6+特徵個數為3)

p(身高高|不嫁)=?滿足要求如下面紅色標註:

沒有一個滿足是身高高的條件,但是此時概率不為0,按照加入拉普拉斯平滑後的公式:

身高特徵的個數為高,中,矮,三種情況,那麼S_{j} 為3,則最終概率p(身高高|不嫁)為1/9 (不嫁的個數為6+特徵個數為3)

p(上進|不嫁)=?滿足要求如下面紅色標註:

由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑後的公式:

上進特徵的個數為上進,不上進情況,那麼S_{j} 為2,則最終概率p(上進|不嫁)為4/8 (不嫁的個數為6+特徵個數為2)

p(不嫁)=?滿足要求的如紅色標註:

由上圖可知滿足要求的為6個,按照加入拉普拉斯平滑後的公式:

種類的個數為嫁,不嫁情況,那麼K為2,則最終概率p(不嫁)為7/14 = 1/2 (不嫁的個數為6+種類個數為2)

到這裡為止,我們已經算出了在該男生條件下,不嫁的概率為:

p(不嫁|長相帥、性格爆好、身高高、上進) = 5/8*1/9*1/9*3/8*1/2

結論

於是我們可以得到

p(嫁|長相帥、性格爆好、身高高、上進) = 1/9*4/8*4/9*6/8*1/2 > p(不嫁|長相帥、性格爆好、身高高、上進) = 6/8*1/9*1/9*4/8*1/2

於是我們可以大膽的告訴女生,這樣的好男人,貝葉斯告訴你了,該嫁!!!

這就是我們使用拉普拉斯平滑後計算的整個演算法過程!

希望對大家的理解有幫助~歡迎大家指錯交流!

參考:李航博士《統計學習方法》

演算法雜貨鋪--分類演算法之樸素貝葉斯分類(Naive Bayesian classification)

封面圖來自於:演算法雜貨鋪--分類演算法之樸素貝葉斯分類(Naive Bayesian classification)

致謝:德川,皓宇,繼豪,施琦

推薦閱讀:

隱馬爾可夫模型的預測問題----維特比演算法
A Dataset for Research on Short-Text Conversation
PaperWeekly 第47期 | 開學啦!咱們來做完形填空:「訊飛杯」參賽歷程

TAG:机器学习 | 深度学习DeepLearning | 自然语言处理 |