当你看完这篇朴素贝叶斯(NB)算法后,是否会有怦然心动的感觉
一、引言
當一位氣象學家提供天氣預報時,通常會使用像"明天70%的可能性會下雨"這樣的術語來預測j降雨,這些預測稱為下雨的概率。你有沒有想過他們是如何計算的呢?
本文將講述一種機器學習算法,即依靠概率原則進行分類的樸素貝葉斯(Naive Bayes,NB)分類算法。正如氣象學家預測天氣一樣,樸素貝葉斯算法就是應用先前事件的有關數據來估計未來發生的概率,其核心是貝葉斯方法。
本文第2節介紹了貝葉斯方法的基本概念,第3節講解了《伊索寓言》狼來了故事中的貝葉斯定理,第4節闡述了嫁還是不嫁博弈過程中的樸素貝葉斯方法,第5節作出總結。
二、貝葉斯方法的基本概念
在進入樸素貝葉斯算法學習之前,我們值得花一些時間來定義一些概念,這些概念在貝葉斯方法中經常用到。用一句話概括,貝葉斯概率理論植根于這樣一個思想,即一個事件的似然估計應建立在手中已有證據的基礎上。
統計學中用“事件”表示有概率可言的任何事情,也就是說,事件是人們能指出發生可能性的任何事情。比如天氣為晴天和非晴天,收到垃圾郵件和非垃圾郵件。
如下圖
如果A表示收到垃圾郵件,那么 A’被稱為A的對立事件,即收到非垃圾郵件。
2. 概率
一個事件發生的概率可以通過觀測到的數據來估計,即用該事件發生的試驗的次數除以試驗的總次數。通常用符號p(A)來表示事件A發生的概率。
例如,如果10天中有3天下雨了,那么就可以估計下雨的概率為30%。同樣,如果50封電子郵件中有10封是垃圾郵件,那么可以估計垃圾郵件的概率為20%,即P(垃圾郵件)=0.2。
簡而言之:概率值是一個0-1之間的數字,用來衡量一個事件發生可能性的大小。概率值越接近于1,事件發生的可能性越大,概率值越接近于0,事件越不可能發生。
3. 聯合概率
聯合概率指的是包含多個條件且所有條件同時成立的概率,即如何將一個事件發生的概率和另外一個事件發生的概率聯系在一起。對于兩個事件A和B,A和B同時發生的概率P(A??B)為
如果這兩個事件完全不相關(線性與非線性),我們稱為獨立事件。例如,拋硬幣的結果與天氣是晴天還是陰雨天是相互獨立的。這時,公式變為
以垃圾郵件事件的的文氏圖為例:
如下圖,藍圈代表收到垃圾郵件,紅圈代表收到包含詞語‘百萬美元’的郵件,圓的大小和重疊的程度并不重要,只是用這樣一種方法來提醒我們對所有可能的事件組合來分配概率。
?
那么聯合概率的工作就是量化這兩個比例之間的重疊程度,換句話說,就是估計P(垃圾郵件)和P(百萬美元)同時發生的概率,即P(垃圾郵件??百萬美元)。
?
4. 基于貝葉斯定理的后驗概率
相關事件之間的關系可以用貝葉斯定理來描述,如下面的公式所示
P(B)是B的先驗概率,比如我郵箱收到一封郵件,在沒有進行瀏覽的條件下,我根據以往經驗(認知)猜這份郵件是垃圾郵件的概率是20%,即為先驗概率。
P(A|B) 是已知B發生后A的條件概率,叫做似然概率(likelihood)。比如在先前的垃圾郵件中出現詞語百萬美元的概率稱為似然概率。
P(A)是A的邊際概率,又稱證據。假設你瀏覽了電子郵件,發現電子郵件使用了詞語百萬美元,而百萬美元出現在任何一封郵件中的概率稱為邊際概率。
P(B|A) 為后驗概率。這個概率用來衡量在得到證據下,該郵件為垃圾郵件的可能性。
垃圾郵件例子的貝葉斯公式如下
為了計算貝葉斯定理中每一個組成部分的概率,我們必須構造一個頻率表(如下面的左圖所示),如下圖所示
從上表可以得出垃圾郵件的先驗概率(頻率)為20/100=20%,百萬美元的邊際概率為5/100=5%。根據該頻率表,可以構造似然表,如下圖所示。
根據似然表,可以得到P(百萬美元|垃圾郵件)=4/20=0.20,為了計算后驗概率P(垃圾郵件|百萬美元),我們利用貝葉斯定理,即
因此,如果電子郵件含有詞語百萬美元,那么該電子郵件是垃圾郵件的概率為80%。所以,任何含有詞語百萬美元的消息都需要被過濾掉。這就是商業垃圾郵件過濾器的工作方法,盡管在計算頻率表和似然表時會同時考慮更多數目的詞語。
在上述的例子中,當我們不知道任何證據的情況下,垃圾郵件的先驗概率為20%,而在出現了垃圾郵件使用了詞語百萬美元的情況下,垃圾郵件的后驗概率調整為80%。其實,貝葉斯定理就是通過證據來修正/調整我們對事物的原本認知的,當把貝葉斯公式寫成下面的形式時,大家是不是恍然大悟,耳目一新?
三?《伊索寓言》狼來了故事中的貝葉斯定理
《伊索寓言》中有一則“孩子與狼”的故事,講的是一個小孩每天到山上放羊,山里有狼出沒。第一天,他在山上喊“狼來了!狼來了!”,山下的村民聞聲便去打狼,可到了山上,發現狼沒有來;第二天也如此;第三天,狼真的來了,可無論小孩怎么喊叫,也沒有人來救他,因為前兩天他說了慌,人們不再相信他了。試用貝葉斯公式來分析此寓言中村民對這個小孩的可信度是如何下降的.
這個故事分兩個方面,一是小孩,二是村民。小孩有兩種行為:一是說謊,二是不說謊;村民有兩種行為:一是認為小孩可信,二是認為小孩不可信.
類似的問題都是先設事件:
A:小孩說謊;??:小孩沒說謊。
B:小孩可信;??:小孩不可信。
不妨設過去村民對這個小孩的印象是P(B) = 0.8,P(??) = 0.2,可見剛開始村民們對這個小孩還是很相信的。用貝葉斯公式計算村民對這個小孩的可信程度的改變時要用到(A|B),P(A|),即“可信的孩子說謊”的概率與“不可信的孩子說謊”的概率,在此不妨設P(A|B)= 0.1,P(A|?) = 0.5。第一次村民上山打狼,發現狼沒有來,即小孩說了謊,村民根據這個信息,將這個小孩的可信程度改變為:
其中,分母就是P(A)的表達式。這表明村民上了一次當后,對這個小孩可信程度由原來的0.8調整為0.444,也就是將村民對這個小孩的最初印象P(B) = 0.8,P() = 0.2調整為P(B) = 0.444,P() = 0.556。
在這個基礎上,我們再用貝葉斯公式計算P(B|A),即這個小孩第二次說謊之后,村民認為他的可信程度改變為:
這表明村民經過兩次上當后,對這個小孩的信任程度已經由最初的0.8下降到了0.138,如此低的可信度,村民聽到第三次呼叫時,怎么再會上山去打狼呢?
這個例子對人來說有很大的啟發, 即“某人的行為會不斷修正其他人對他的看法”。哈哈,有種在算法中感悟人生哲學的趕腳。
四、樸素貝葉斯算法
好的,在這里大家應該已經熱身完畢了,那么我們樸素貝葉斯算法的重頭戲來了。
我們直接通過一個例子來講解樸素貝葉斯算法,例子引自帶你搞懂樸素貝葉斯分類算法 - CSDN博客,給定數據如下:
?
現在給我們的問題是,如果一對男女朋友,男生向女生求婚,男生的四個特點分別是不帥,性格不好,身高矮,不上進,請你判斷一下女生是嫁還是不嫁?
這是一個典型的分類問題,轉為數學問題就是比較 p(嫁|(不帥、性格不好、身高矮、不上進))與 p(不嫁|(不帥、性格不好、身高矮、不上進))的概率,誰的概率大,我就能給出嫁或者不嫁的答案!
這里我們聯系到樸素貝葉斯公式:
我們需要求p(嫁|(不帥、性格不好、身高矮、不上進)),這是我們不知道的,但是通過樸素貝葉斯公式可以轉化為好求的三個量.
p(不帥、性格不好、身高矮、不上進|嫁)、p(不帥、性格不好、身高矮、不上進)、p(嫁)(至于為什么能求,后面會講,那么就太好了,將待求的量轉化為其它可求的值,這就相當于解決了我們的問題!)
那么這三個量是如何求得?
是根據已知訓練數據統計得來,下面詳細給出該例子的求解過程?;貞浺幌挛覀円蟮墓饺缦?#xff1a;
那么我只要求得p(不帥、性格不好、身高矮、不上進|嫁)、p(不帥、性格不好、身高矮、不上進)、p(嫁)即可,好的,下面我分別求出這幾個概率,最后一比,就得到最終結果。
p(不帥、性格不好、身高矮、不上進|嫁) = p(不帥|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上進|嫁),那么我就要分別統計后面幾個概率,也就得到了左邊的概率!
等等,為什么這個成立呢?學過概率論的同學可能有感覺了,這個等式成立的條件需要特征之間相互獨立吧!
對的!這也就是為什么樸素貝葉斯分類有樸素一詞的來源,樸素貝葉斯算法是假設各個特征之間相互獨立,那么這個等式就成立了!但是為什么需要假設特征之間相互獨立呢?
1、我們這么想,假如沒有這個假設,那么我們對右邊這些概率的估計其實是不可做的,這么說,我們這個例子有4個特征,其中帥包括{帥,不帥},性格包括{不好,好,爆好},身高包括{高,矮,中},上進包括{不上進,上進},那么四個特征的聯合概率分布總共是4維空間,總個數為2*3*3*2=36個。多達36個,計算機掃描統計還可以,但是現實生活中,往往有非常多的特征,每一個特征的取值也是非常之多,那么通過統計來估計后面概率的值,變得幾乎不可做,這也是為什么需要假設特征之間獨立的原因。
2、假如我們沒有假設特征之間相互獨立,那么我們統計的時候,就需要在整個特征空間中去找,比如統計p(不帥、性格不好、身高矮、不上進|嫁),我們就需要在嫁的條件下,去找四種特征全滿足分別是不帥,性格不好,身高矮,不上進的人的個數,這樣的話,由于數據的稀疏性,很容易統計到0的情況。 這樣是不合適的。
根據上面倆個原因,樸素貝葉斯法對條件概率分布做了條件獨立性的假設,由于這是一個較強的假設,樸素貝葉斯也由此得名!這一假設使得樸素貝葉斯法變得簡單,但有時會犧牲一定的分類準確率。
好的,上面我解釋了為什么可以拆成分開連乘形式。那么下面我們就開始求解!我們將上面公式整理一下如下:
下面我將一個一個的進行統計計算(在數據量很大的時候,根據中心極限定理,頻率是等于概率的,這里只是一個例子,所以我就進行統計即可)。
p(嫁)=? 首先我們整理訓練數據中,嫁的樣本數如下:
則 p(嫁) = 6/12= 1/2,表示在12個樣本中,嫁的人有6個
p(不帥|嫁)=? 統計滿足樣本數如下:
則p(不帥|嫁) = 3/6 = 1/2 ,表示在嫁的條件下,不帥的情況有1/2
p(性格不好|嫁)= ? 統計滿足樣本數如下:
則p(性格不好|嫁)= 1/6
p(矮|嫁) = ? 統計滿足樣本數如下:
則p(矮|嫁) = 1/6
p(不上進|嫁) = ? 統計滿足樣本數如下:
則p(不上進|嫁) = 1/6
?
下面開始求分母,p(不帥),p(性格不好),p(矮),p(不上進)
統計樣本如下:
不帥統計如上紅色所示,占4個,那么p(不帥) = 4/12 = 1/3
性格不好統計如上紅色所示,占4個,那么p(性格不好) = 4/12 = 1/3
身高矮統計如上紅色所示,占7個,那么p(身高矮) = 7/12
不上進統計如上紅色所示,占4個,那么p(不上進) = 4/12 = 1/3
到這里,要求p(不帥、性格不好、身高矮、不上進|嫁)的所需項全部求出來了,下面我代入進去即可,
=?(1/2*1/6*1/6*1/6*1/2)/(1/3*1/3*7/12*1/3)
?
下面我們根據同樣的方法來求p(不嫁|不帥,性格不好,身高矮,不上進),完全一樣的做法,為了方便理解,我這里也走一遍幫助理解。首先公式如下:
下面我也一個一個來進行統計計算,這里與上面公式中,分母是一樣的,于是我們分母不需要重新統計計算!
p(不嫁)=?根據統計計算如下(紅色為滿足條件):
則p(不嫁)=6/12 = 1/2。
p(不帥|不嫁) = ?統計滿足條件的樣本如下(紅色為滿足條件):
則p(不帥|不嫁) = 1/6
p(性格不好|不嫁) = ?據統計計算如下(紅色為滿足條件):
則p(性格不好|不嫁) =3/6 = 1/2
p(矮|不嫁) = ? 據統計計算如下(紅色為滿足條件):
則p(矮|不嫁) = 6/6 = 1
p(不上進|不嫁) = ? 據統計計算如下(紅色為滿足條件):
則p(不上進|不嫁) = 3/6 = 1/2
那么根據公式:
p (不嫁|不帥、性格不好、身高矮、不上進) = (1/2*1/6*1/2*1*1/2)/(1/3*1/3*7/12*1/3)。
很顯然 (1/2*1/6*1/2*1*1/2) > (1/2*1/6*1/6*1/6*1/2)
于是有p (不嫁|不帥、性格不好、身高矮、不上進)>p (嫁|不帥、性格不好、身高矮、不上進)。所以我們根據樸素貝葉斯算法可以給這個女生答案,是不嫁!
五 總結
樸素貝葉斯算法的主要原理基本已經做了總結,這里對樸素貝葉斯的優缺點做一個總結,詳情請參考樸素貝葉斯算法原理小結 - 劉建平Pinard - 博客園。
樸素貝葉斯的主要優點有:
1)樸素貝葉斯模型發源于古典數學理論,有穩定的分類效率。2)對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練。
樸素貝葉斯的主要缺點有:
1) 理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為樸素貝葉斯模型給定輸出類別的情況下,假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。2)需要知道先驗概率,且先驗概率很多時候取決于假設,因此在某些時候會由于假設的先驗模型的原因導致預測效果不佳。
總結
以上是生活随笔為你收集整理的当你看完这篇朴素贝叶斯(NB)算法后,是否会有怦然心动的感觉的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统遇上深度学习(二十)-贝叶斯个性
- 下一篇: TensorFlow和ML前5名的课程