機器學習實戰(5)—— 樸素貝葉斯原理部分

小明在讀大學期間,在圖書館自習時發現一個小姐姐,然後一見鍾情,因爲小明性格比較內向,爲了能見到自己的 “女神”,於是每天都去圖書館的那個位置“自習”, 然後連續去了 2 個月(他真的還沒開始搭訕~),發現小姐姐某些天會來自習,不來的時候,小明也無心學習,小明想:“如果小姐姐不來,我去圖書館也學不進去啊!” 機智的小明悄咪咪掏出一樣“寶貝”—— 一本日記本,原來小明把每天的情況記入了日記,留下了美好回憶!數學專業的小明想起了課堂上老師講的樸素貝葉斯算法,這日記不就是掌握的歷史數據麼,翻開第一頁:日期:xx,週末,天朗氣清惠風和暢(天晴),外面很熱(溫度高),小姐姐來開着空調的圖書館自習了,看的書是泛函分析,於是我拿出這本書認真複習起來,希望之後有話題可聊(撩)!看到這裏,小明迅速寫起了公式 ......

小明統計了一下(60 天)的情況:

(PS: 只展示了部分數據)

樸素貝葉斯是統計學中的分類算法

貝葉斯公式:

如果看的有點暈,我們換個表達方式:

如果從小明的思路考慮,特徵主要有三個:天氣、溫度、是否週末!

類別就是:小姐姐來   和   小姐姐沒來   兩類

小明今天起牀發現,今天週二(非週末),天氣晴朗,溫度挺高的(35℃),小明掐指一算,圖書館走起!

小明具體是怎麼算的?數學系的男生一般可不會拍腦袋定方案呢!

這個問題在小明的腦海中轉化爲:

P(去圖書館 | 非週末,晴天,溫度高)和 P(不去圖書館 | 非週末,晴天,溫度高)

上面兩者哪個概率高?例如前者概率高,就去圖書館,反之亦然。

小明馬上想到貝葉斯公式:

右邊的三項內容好像能求,好像又不太好求?怎麼辦呢?

我們把 **P(不去圖書館 | 非週末,晴天,溫度高)**的公式也寫出來

P(去圖書館 | 非週末,晴天,溫度高) 比較:

思考:這兩個公式有什麼不同的地方?有什麼相同的地方?

發現這兩個公式的分母一樣!!!

所以,要比較兩者大小,只用比較兩者不同的部分(分子)

也就是變爲了 比較 **P(非週末,晴天,溫度高 | 不去圖書館 )*P(不去圖書館 )**和 *P(非週末,晴天,溫度高 | 去圖書館 )P(去圖書館 ) 的大小。

小姐姐 60 天裏來了 43 天,還有 17 天沒來。

小姐姐來的 43 天中,有 28 天天晴,有 15 天下雨。   

P(不去圖書館 )= 17/60

P(去圖書館 )= 43/60

接下來計算:

P(非週末,晴天,溫度高 | 不去圖書館 )

P(非週末,晴天,溫度高 | 去圖書館 )

這其實也不難算,你可能說:在 60 天裏統計各種情況不就好啦~

等等。。先別急着統計

你想,如果數據有 1000 條,或者特徵特別多,有 20 個?

例如**(非週末,晴天,...,溫度高 | 不去圖書館 )**

你再去找找看啊?非得累死不可!

你說,那怎麼辦呢?

這就要引出機器學習筆試面試經常問到的一個題目了!!!

樸素貝葉斯中的 “樸素” 怎樣理解?

用一句網絡流行語就是:

“單純不做作和外面那些妖豔______不一樣” (此處請自行腦補兩字的貶義詞)

單純突出:簡單,對比之下,妖豔突出:複雜(你可以想想素顏和濃妝豔抹)

那你可能要問:樸素貝葉斯的簡單如何體現呢?

我們回看:之前的特徵主要有三個:天氣、溫度、是否週末!

然後每個特徵有兩種取值:例如天氣可以取值:天晴、下雨

那這三種組合的特徵就會有 222=8 種

那如果有 20 個特徵,每種去只有兩種,那會有多少種呢?

2^20 次方【反正很大就對了!】

所以說之前統計這些特徵的組合情況來代替概率計算是非!常!麻!煩!的!

你還記得概率論裏的獨立性的定義麼?【回顧】

設 A,B 爲隨機事件,若同時發生的概率等於各自發生的概率的乘積,則 A,B 相互獨立。

一般地,設 A1,A2,...,An 是 n(n≥2) 個事件,如果對於其中任意 2 個,任意 3 個,...,任意 n 個事件的積事件的概率,都等於各事件概率之積,則稱 A1,A2,...,An 相互獨立。

設 A,B,C 爲 3 個事件,如果滿足等式:

則稱事件 A,B,C 相互獨立。

所以 “樸素” 體現在:假設所有特徵之間相互獨立。

所以 P(非週末,晴天,溫度高 | **不****去圖書館 )**就轉化爲計算:

P(非週末 | 不***去圖書館 ) P(晴天 | 不***去圖書館 ) P(溫度高 | 不****去圖書館 )

此時,只需要分別進行簡單統計即可!

同樣 **P(非週末,晴天,溫度高 | 去圖書館 )**就轉化爲計算:

P(非週末 | 去圖書館 ) P(晴天 | 去圖書館 ) P(溫度高 | 去圖書館 )**

小明統計了一下日記的部分信息,結果如下:

小姐姐 60 天裏來了 43 天,還有 17 天沒來。

小姐姐來的 43 天中,有 28 天天晴,有 15 天下雨。

小姐姐沒來的 17 天中,有 12 天下雨,有 5 天天晴。

小姐姐來的 43 天中,有 32 天是工作日,有 11 天是雙休日。

小姐姐沒來的 17 天中,有 12 天是工作日,有 5 天是雙休日。

小姐姐來的 43 天中,有 25 天溫度高,有 18 天溫度舒適。

小姐姐沒來的 17 天中,有 9 天溫度高,有 8 天溫度舒適。

所以:

P(非週末 | 不****去圖書館 )=12/17

P(晴天 | 不****去圖書館 )=5/17

P(溫度高 | 不****去圖書館 )=9/17

P(非週末 | 不***去圖書館 ) P(晴天 | 不***去圖書館 ) P(溫度高 | 不****去圖書館 )

=12/17 * 5/17 * 9/17 = 0.1099

P(非週末 | 去圖書館 )= 32/43

P(晴天 | 去圖書館 )= 28/43

P(溫度高 | 去圖書館 )= 25/43

P(非週末 | 去圖書館 ) P(晴天 | 去圖書館 ) P(溫度高 | 去圖書館 )**

= 32/43 * 28/43 * 25/43 = 0.2817

到這裏結束了麼?

答案是:還沒結束

別忘了我們要比較的是:

P(非週末 | 不***去圖書館 ) P(晴天 | 不***去圖書館 ) P(溫度高 | 不****去圖書館 )*P(去圖書館 )= 0.1099 * P(去圖書館 )=0.1099 * 17/60 = 0.031

P(非週末 | 去圖書館 ) P(晴天 | 去圖書館 ) P(溫度高 | 去圖書館 )P(去圖書館 )*

= 0.2817 *  P(去圖書館 )= 0.2817 * 43/60 = 0.202 > 0.031

所以結論是:今天週二(非週末),天氣晴朗,溫度挺高的(35℃),小明掐指一算,圖書館走起!【因爲小明計算得出小姐姐會去圖書館啦~】

其實你已經學到了樸素貝葉斯算法的精髓

但不要高興的太早!

我們的樸素貝葉斯的樸素假設特徵之間相互獨立,這個假設往往在實際應用中是不成立的!

例如:我們之前的天氣和溫度兩個特徵,他們之間一般來說是不獨立的

你想想,溫度高是不是同時伴隨的很可能是晴天?

這就導致了在特徵個數比較多或者特徵之間相關性較大時,樸素貝葉斯分類效果不好。

其實,樸素貝葉斯的有點我們也看出了,就是算法邏輯簡單,易於計算實現!

講到這裏,樸素貝葉斯還沒完!

大家思考:

P(非週末 | 去圖書館 ) P(晴天 | 去圖書館 ) P(溫度高 | 去圖書館 )P(去圖書館 )*

如果統計到的情況沒有在非週末去圖書館,情況會如何???

結果是 P(非週末 | 去圖書館 )=0

然後導致整體:

P(非週末 | 去圖書館 ) P(晴天 | 去圖書館 ) P(溫度高 | 去圖書館 )P(去圖書館 )=* **0**

**前功盡棄?****??**emmm

如果由於計算的概率:P(非週末 | 去圖書館 )=0 而直接將整體的概率記爲 0 ,這顯然不太合理!

於是前人爲了防止這種其他特徵攜帶的信息被數據中沒出現的特徵情況 “抹去”

在估計概率時候,加上了 “平滑” 處理:常用的有“拉普拉斯修正”、

在講 “拉普拉斯修正” 之前,我們講幾個概念:

先驗概率:是指根據以往經驗和分析得到的概率,先驗,即先於驗證,就是當前事件還沒發生時做出的決斷!

意思是說我們人有一個常識, 比如骰子, 我們都知道概率是 1/6, 而且無數次重複實驗也表明是這個數, 這是一種我們人的常識, 也是我們在不知道任何情況下必然會說出的一個值. 而所謂的先驗概率是我們人在未知條件下對事件發生可能性猜測的數學表示!

【先驗概率 數學公式定義來襲】

令 Dc 表示訓練集 D 中第 c 類樣本組成的集合,若有充足的獨立同分布樣本,則可容易地估計出類先驗概率:

【先驗概率 我們的理解】

令 Dc 表示小姐姐 60 天內來圖書館的情況,如果觀察小姐姐來沒來圖書館次數夠多,並且小姐姐每天來不來圖書館和其他天沒關係(不存在昨天沒去圖書館,今天最好去一下這種情況,體現獨立 ), 並且小姐姐每天來不來圖書館都是有着自己的同一套想法(體現同分布) ,則可以估計出小姐姐來圖書館的先驗概率爲:43/60

即:來的天數 / 總觀察天數 , 所以先驗概率是根據歷史信息經驗獲取的!

後驗概率:事情已經發生,要求這件事情發生的原因是由某個因素引起的可能性的大小

未見其人,先聞其聲,你判斷對方 99% 是女性? OK, 你已經進行了一次後驗概率的猜測。沒錯, 就這麼簡單,因爲你平常聽到的女聲基本都是女性發出的。

【至於爲何你隨口說出 99%,畢竟社會上有小概率事件】

【後驗概率 數學公式定義來襲】

對離散屬性而言,令 Dc,xi 表示 Dc 在第 i 個屬性上取值爲 xi 的樣本組成的集合,則條件概率 P(xi | c)可估計爲

【後驗概率 我們的理解】

對於可以分類別的屬性,例如天氣分爲晴天、下雨,令 D 小姐姐來圖書館,晴天 表示在天氣這個屬性上取值爲晴天,且小姐姐來圖書館的所有天數;D 小姐姐來圖書館 表示小姐姐來圖書館的總天數。

則 P(晴天 | 小姐姐來圖書館)= 28/43

這些之前我們都算過!回顧~

剛纔我們說,如果數據統計到的 P(非週末 | 去圖書館 )=0 怎麼辦?

“拉普拉斯修正”:

令 N 表示訓練集 D 中可能的類別數,Ni 表示第 i 個屬性可能的取值數,則先驗概率和後驗概率可以修正爲: 

先驗概率:         

後驗概率:

這裏 N 類別數爲 2(小姐姐去圖書館 和 小姐姐不去圖書館)

這裏 Ni 表示是否週末這個屬性有 2 種取值(是週末 和 非週末)

所以,使用 “拉普拉斯修正後”

原來的 P(非週末 | 去圖書館 )=0  這一後驗概率

可以轉換爲

這一不爲零的值,和其他後驗概率和先驗概率相乘,就不會導致最終的概率爲 0 

即:P(非週末 | 去圖書館 )* P(晴天 | 去圖書館 )* P(溫度高 | 去圖書館 )*P(去圖書館 )不爲 0

後驗 1 * 後驗 2 * 後驗 3 * 先驗 

這就是樸素貝葉斯算法啦,聽故事就學完啦~

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/AFvqb3qLGfF79EoTUucfJQ