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