樸素貝葉斯法是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法,是經(jīng)典的機(jī)器學(xué)習(xí)算法之一,處理很多問題時直接又高效,因此在很多領(lǐng)域有著廣泛的應(yīng)用,如垃圾郵件過濾、文本分類等。也是學(xué)習(xí)研究自然語言處理問題的一個很好的切入口。樸素貝葉斯原理簡單,卻有著堅(jiān)實(shí)的數(shù)學(xué)理論基礎(chǔ),對于剛開始學(xué)習(xí)算法或者數(shù)學(xué)基礎(chǔ)差的同學(xué)們來說,還是會遇到一些困難,花費(fèi)一定的時間。比如小編剛準(zhǔn)備學(xué)習(xí)的時候,看到貝葉斯公式還是有點(diǎn)小害怕的,也不知道自己能不能搞定。至此,人工智能頭條特別為大家尋找并推薦一些文章,希望大家在看過學(xué)習(xí)后,不僅能消除心里的小恐懼,還能高效、容易理解的get到這個方法,從中獲得啟發(fā)沒準(zhǔn)還能追到一個女朋友,脫單我們是有技術(shù)的。
貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理為基礎(chǔ),故統(tǒng)稱為貝葉斯分類。而樸素樸素貝葉斯分類是貝葉斯分類中最簡單,也是常見的一種分類方法。這篇文章我盡可能用直白的話語總結(jié)一下我們學(xué)習(xí)會上講到的樸素貝葉斯分類算法,希望有利于他人理解。
▌分類問題綜述
對于分類問題,其實(shí)誰都不會陌生,日常生活中我們每天都進(jìn)行著分類過程。例如,當(dāng)你看到一個人,你的腦子下意識判斷他是學(xué)生還是社會上的人;你可能經(jīng)常會走在路上對身旁的朋友說“這個人一看就很有錢、”之類的話,其實(shí)這就是一種分類操作。
既然是貝葉斯分類算法,那么分類的數(shù)學(xué)描述又是什么呢?
從數(shù)學(xué)角度來說,分類問題可做如下定義:
已知集合C=y1,y2,……,yn和I=x1,x2,……,xn確定映射規(guī)則y=f(),使得任意xi∈I有且僅有一個yi∈C,使得yi∈f(xi)成立。
其中C叫做類別集合,其中每一個元素是一個類別,而I叫做項(xiàng)集合(特征集合),其中每一個元素是一個待分類項(xiàng),f叫做分類器。分類算法的任務(wù)就是構(gòu)造分類器f。
分類算法的內(nèi)容是要求給定特征,讓我們得出類別,這也是所有分類問題的關(guān)鍵。那么如何由指定特征,得到我們最終的類別,也是我們下面要講的,每一個不同的分類算法,對應(yīng)著不同的核心思想。
本篇文章,我會用一個具體實(shí)例,對樸素貝葉斯算法幾乎所有的重要知識點(diǎn)進(jìn)行講解。
▌樸素貝葉斯分類
那么既然是樸素貝葉斯分類算法,它的核心算法又是什么呢?
是下面這個貝葉斯公式:
換個表達(dá)形式就會明朗很多,如下:
我們最終求的p(類別|特征)即可!就相當(dāng)于完成了我們的任務(wù)。
▌例題分析
下面我先給出例子問題。
給定數(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)于解決了我們的問題?。?/p>
▌樸素貝葉斯算法的樸素一詞解釋
那么這三個量是如何求得?
是根據(jù)已知訓(xùn)練數(shù)據(jù)統(tǒng)計得來,下面詳細(xì)給出該例子的求解過程。
回憶一下我們要求的公式如下:
那么我只要求得p(不帥、性格不好、身高矮、不上進(jìn)|嫁)、p(不帥、性格不好、身高矮、不上進(jìn))、p(嫁)即可,好的,下面我分別求出這幾個概率,最后一比,就得到最終結(jié)果。
p(不帥、性格不好、身高矮、不上進(jìn)|嫁) = p(不帥|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上進(jìn)|嫁),那么我就要分別統(tǒng)計后面幾個概率,也就得到了左邊的概率!
等等,為什么這個成立呢?學(xué)過概率論的同學(xué)可能有感覺了,這個等式成立的條件需要特征之間相互獨(dú)立吧!
對的!這也就是為什么樸素貝葉斯分類有樸素一詞的來源,樸素貝葉斯算法是假設(shè)各個特征之間相互獨(dú)立,那么這個等式就成立了!
但是為什么需要假設(shè)特征之間相互獨(dú)立呢?
1、我們這么想,假如沒有這個假設(shè),那么我們對右邊這些概率的估計其實(shí)是不可做的,這么說,我們這個例子有4個特征,其中帥包括,性格包括,身高包括,上進(jìn)包括,那么四個特征的聯(lián)合概率分布總共是4維空間,總個數(shù)為2*3*3*2=36個。
24個,計算機(jī)掃描統(tǒng)計還可以,但是現(xiàn)實(shí)生活中,往往有非常多的特征,每一個特征的取值也是非常之多,那么通過統(tǒng)計來估計后面概率的值,變得幾乎不可做,這也是為什么需要假設(shè)特征之間獨(dú)立的原因。
2、假如我們沒有假設(shè)特征之間相互獨(dú)立,那么我們統(tǒng)計的時候,就需要在整個特征空間中去找,比如統(tǒng)計p(不帥、性格不好、身高矮、不上進(jìn)|嫁)
我們就需要在嫁的條件下,去找四種特征全滿足分別是不帥,性格不好,身高矮,不上進(jìn)的人的個數(shù),這樣的話,由于數(shù)據(jù)的稀疏性,很容易統(tǒng)計到0的情況。 這樣是不合適的。
根據(jù)上面?zhèn)z個原因,樸素貝葉斯法對條件概率分布做了條件獨(dú)立性的假設(shè),由于這是一個較強(qiáng)的假設(shè),樸素貝葉斯也由此得名!這一假設(shè)使得樸素貝葉斯法變得簡單,但有時會犧牲一定的分類準(zhǔn)確率。
好的,上面我解釋了為什么可以拆成分開連乘形式。那么下面我們就開始求解!
我們將上面公式整理一下如下:
下面我將一個一個的進(jìn)行統(tǒng)計計算(在數(shù)據(jù)量很大的時候,根據(jù)中心極限定理,頻率是等于概率的,這里只是一個例子,所以我就進(jìn)行統(tǒng)計即可)。
p(嫁)=?
首先我們整理訓(xùn)練數(shù)據(jù)中,嫁的樣本數(shù)如下:
則 p(嫁) = 6/12(總樣本數(shù)) = 1/2
p(不帥|嫁)=?統(tǒng)計滿足樣本數(shù)如下:
則p(不帥|嫁) = 3/6 = 1/2
p(性格不好|嫁)= ?統(tǒng)計滿足樣本數(shù)如下:
則p(性格不好|嫁)= 1/6
p(矮|嫁) = ?統(tǒng)計滿足樣本數(shù)如下:
則p(矮|嫁) = 1/6
p(不上進(jìn)|嫁) = ?統(tǒng)計滿足樣本數(shù)如下:
則p(不上進(jìn)|嫁) = 1/6
下面開始求分母,p(不帥),p(性格不好),p(矮),p(不上進(jìn))
統(tǒng)計樣本如下:
不帥統(tǒng)計如上紅色所示,占4個,那么p(不帥) = 4/12 = 1/3
性格不好統(tǒng)計如上紅色所示,占4個,那么p(性格不好) = 4/12 = 1/3
身高矮統(tǒng)計如上紅色所示,占7個,那么p(身高矮) = 7/12
不上進(jìn)統(tǒng)計如上紅色所示,占4個,那么p(不上進(jìn)) = 4/12 = 1/3
到這里,要求p(不帥、性格不好、身高矮、不上進(jìn)|嫁)的所需項(xiàng)全部求出來了,下面我?guī)脒M(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)計計算,這里與上面公式中,分母是一樣的,于是我們分母不需要重新統(tǒng)計計算!
p(不嫁)=?根據(jù)統(tǒng)計計算如下(紅色為滿足條件):
則p(不嫁)=6/12 = 1/2
p(不帥|不嫁)= ?統(tǒng)計滿足條件的樣本如下(紅色為滿足條件):
則p(不帥|不嫁)= 1/6
p(性格不好|不嫁)= ?據(jù)統(tǒng)計計算如下(紅色為滿足條件):
則p(性格不好|不嫁) =3/6 = 1/2
p(矮|不嫁)= ?據(jù)統(tǒng)計計算如下(紅色為滿足條件):
則p(矮|不嫁) = 6/6 = 1
p(不上進(jìn)|不嫁)= ?據(jù)統(tǒng)計計算如下(紅色為滿足條件):
則p(不上進(jìn)|不嫁) = 3/6 = 1/2
那么根據(jù)公式:
p(不嫁|不帥、性格不好、身高矮、不上進(jìn)) =((1/6*1/2*1*1/2)*1/2)/(1/3*1/3*7/12*1/3)
很顯然 (1/6*1/2*1*1/2) > (1/2*1/6*1/6*1/6*1/2)
于是有p(不嫁|不帥、性格不好、身高矮、不上進(jìn))>p(嫁|不帥、性格不好、身高矮、不上進(jìn))
所以我們根據(jù)樸素貝葉斯算法可以給這個女生答案,是不嫁?。。?!
▌樸素貝葉斯分類的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
算法邏輯簡單,易于實(shí)現(xiàn)
分類過程中時空開銷小
缺點(diǎn):
理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實(shí)際上并非總是如此,這是因?yàn)闃闼刎惾~斯模型假設(shè)屬性之間相互獨(dú)立,這個假設(shè)在實(shí)際應(yīng)用中往往是不成立的,在屬性個數(shù)比較多或者屬性之間相關(guān)性較大時,分類效果不好。
而在屬性相關(guān)性較小時,樸素貝葉斯性能最為良好。對于這一點(diǎn),有半樸素貝葉斯之類的算法通過考慮部分關(guān)聯(lián)性適度改進(jìn)。
整個例子詳細(xì)的講解了樸素貝葉斯算法的分類過程,希望對大家的理解有幫助~
上文中我們已經(jīng)根據(jù)樸素貝葉斯算法給出了當(dāng)一個男生想他的女朋友求婚,女生是否嫁給他的答案!
這個男生的四個特征是長相不帥,性格不好,身高矮,不上進(jìn),我們最終得出的結(jié)論是女生不嫁!很多人說這是一道送分題,哈哈哈哈。我們用數(shù)學(xué)算法也說明了不靠譜是取不到老婆滴!
那么我們再來一個例子,假如此時另外一對情侶,這對情侶中,男生的四個特征是,長相帥,性格爆好,身高高,上進(jìn),那么他的女朋友嫁還是不嫁呢?可能又會有小伙伴說這是一道送分題,是不是,我們下面用事實(shí)說話!
下面通過例子來引出拉普拉斯平滑過程!
▌從例子開始
還是下面的訓(xùn)練數(shù)據(jù):
四個特征集合分別長相{帥,不帥}、性格{爆好,好,不好}、身高{高,中,矮}、上進(jìn)與否{上進(jìn),不上進(jìn)}
我們此時要求出該男生在四個特征分別是長相帥,性格爆好,身高高,上進(jìn)的情況下,他對應(yīng)的嫁與不嫁的概率誰大誰小,從而得出結(jié)論!
也就是要比較p(嫁|長相帥,性格爆好,身高高,上進(jìn))與p(不嫁|長相帥,性格爆好,身高高,上進(jìn))的概率大小。
按照樸素貝葉斯算法公式,我們可以得到如下公式:
由于兩者的分母都是p(長相帥)、p(性格爆好)、p(身高高)、p(上進(jìn)),那么我們可以不算分母,比較的時候只比較倆個公式分子大小即可。
好的,下面我們開始計算,先計算在四個特征的條件下,嫁的概率。
我們需要分別計算p(性格爆好|嫁)、p(長相帥|嫁)、p(身高高|嫁)、p(上進(jìn)|嫁)
首先我們來算p(性格爆好|嫁)=?我們觀察訓(xùn)練數(shù)據(jù),發(fā)現(xiàn)如下:
居然沒有一個數(shù)據(jù)有爆好這個特點(diǎn)的,那么p(性格爆好|嫁) = 0,那么我們可以看出問題了,根據(jù)公式:
我們最后的p(嫁|長相帥、性格爆好、身高高、上進(jìn))由于一項(xiàng)p(性格爆好|嫁)為0,而造成整個概率為0,這顯然是錯誤的。
而這個錯誤的造成是由于訓(xùn)練量不足,會令分類器質(zhì)量大大降低。為了解決這個問題,我們引入Laplace校準(zhǔn)(這就引出了我們的拉普拉斯平滑),它的思想非常簡單,就是對每個類別下所有劃分的計數(shù)加1,這樣如果訓(xùn)練樣本集數(shù)量充分大時,并不會對結(jié)果產(chǎn)生影響,并且解決了上述頻率為0的尷尬局面。
引入拉普拉斯平滑的公式如下:
其中ajl,代表第j個特征的第l個選擇,Sj代表第j個特征的個數(shù),K代表種類的個數(shù)。
λ為1,這也很好理解,加入拉普拉斯平滑之后,避免了出現(xiàn)概率為0的情況,又保證了每個值都在0到1的范圍內(nèi),又保證了最終和為1的概率性質(zhì)!
我們可以通過下面例子更加深刻的理解這個公式:(現(xiàn)在我們是加入拉普拉斯平滑)
▌加入拉普拉斯平滑
我們先需要分別計算p(性格爆好|嫁)、p(長相帥|嫁)、p(身高高|嫁)、p(上進(jìn)|嫁),p(嫁)
p(性格爆好|嫁)=?統(tǒng)計滿足要求的如下面紅色部分
沒有一個滿足是性格爆好的條件,但是此時概率不為0,按照加入拉普拉斯平滑后的公式,性格特征的個數(shù)為爆好,好,不好,三種情況,那么Sj為3,則最終概率為1/9 (嫁的個數(shù)為6+特征個數(shù)為3)
p(長相帥|嫁)=?統(tǒng)計滿足條件的如下面紅色部分:
由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑后的公式,長相特征的個數(shù)為帥,不帥,兩種情況,那么Sj為2,則最終概率p(長相帥|嫁)為4/8 (嫁的個數(shù)為6+特征個數(shù)為2)
p(身高高|嫁) = ?統(tǒng)計滿足條件的如下面紅色部分:
由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑后的公式,身高特征的個數(shù)為高,中,矮情況,那么Sj為3,則最終概率p(身高高|嫁)為4/9 (嫁的個數(shù)為6+特征個數(shù)為3)
p(上進(jìn)|嫁)=?統(tǒng)計滿足要求的如下面紅色部分:
由上圖可知滿足要求的為5個,按照加入拉普拉斯平滑后的公式,上進(jìn)特征的個數(shù)為上進(jìn),不上進(jìn)情況,那么Sj為2,則最終概率p(上進(jìn)|嫁)為6/8 (嫁的個數(shù)為6+特征個數(shù)為2)
p(嫁) = ?滿足要求的如下紅色標(biāo)注:
由上圖可知滿足要求的為6個,按照加入拉普拉斯平滑后的公式,種類的個數(shù)為嫁,不嫁情況,那么K為2,則最終概率p(嫁)為7/14 = 1/2 (嫁的個數(shù)為6+種類個數(shù)為2)
到這里為止,我們已經(jīng)算出了在該男生條件下,嫁的概率為:
p(嫁|長相帥、性格爆好、身高高、上進(jìn)) = 1/9*4/8*4/9*6/8*1/2
下面我們需要算出p(不嫁|長相帥、性格爆好、身高高、上進(jìn))的概率,然后與上面的數(shù)值進(jìn)行比較即可,算法與上面完全一模一樣!這里也走一遍。
我們需要估計出p(長相帥|不嫁)、p(性格爆好|不嫁)、p(身高高|不嫁)、p(上進(jìn)|不嫁),p(不嫁)的概率分別為多少。
p(長相帥|不嫁)=?滿足要求如下面紅色標(biāo)注:
由上圖可知滿足要求的為5個,按照加入拉普拉斯平滑后的公式,長相帥特征的個數(shù)為不帥,帥情況,那么Sj為2,則最終概率p(長相不帥|不嫁)為6/8 (不嫁的個數(shù)為6+特征個數(shù)為2)
p(性格爆好|不嫁)=?滿足要求如下面紅色標(biāo)注:
沒有一個滿足是性格爆好的條件,但是此時概率不為0,按照加入拉普拉斯平滑后的公式,性格特征的個數(shù)為爆好,好,不好,三種情況,那么Sj為3,則最終概率p(性格爆好|不嫁)為1/9 (不嫁的個數(shù)為6+特征個數(shù)為3)
p(身高高|不嫁)=?滿足要求如下面紅色標(biāo)注:
沒有一個滿足是身高高的條件,但是此時概率不為0,按照加入拉普拉斯平滑后的公式,身高特征的個數(shù)為高,中,矮,三種情況,那么Sj為3,則最終概率p(身高高|不嫁)為1/9 (不嫁的個數(shù)為6+特征個數(shù)為3)
p(上進(jìn)|不嫁)=?滿足要求如下面紅色標(biāo)注:
由上圖可知滿足要求的為3個,按照加入拉普拉斯平滑后的公式,上進(jìn)特征的個數(shù)為上進(jìn),不上進(jìn)情況,那么Sj為2,則最終概率p(上進(jìn)|不嫁)為4/8 (不嫁的個數(shù)為6+特征個數(shù)為2)
p(不嫁)=?滿足要求的如紅色標(biāo)注:
由上圖可知滿足要求的為6個,按照加入拉普拉斯平滑后的公式,種類的個數(shù)為嫁,不嫁情況,那么K為2,則最終概率p(不嫁)為7/14 = 1/2 (不嫁的個數(shù)為6+種類個數(shù)為2)
到這里為止,我們已經(jīng)算出了在該男生條件下,不嫁的概率為:
p(不嫁|長相帥、性格爆好、身高高、上進(jìn)) = 5/8*1/9*1/9*3/8*1/2
▌結(jié)論
于是我們可以得到
p(嫁|長相帥、性格爆好、身高高、上進(jìn)) = 1/9*4/8*4/9*6/8*1/2 > p(不嫁|長相帥、性格爆好、身高高、上進(jìn)) = 6/8*1/9*1/9*4/8*1/2
于是我們可以大膽的告訴女生,這樣的好男人,貝葉斯告訴你了,該嫁?。?!
這就是我們使用拉普拉斯平滑后計算的整個算法過程!
希望對大家的理解有幫助~歡迎大家指錯交流!
-
貝葉斯
+關(guān)注
關(guān)注
0文章
77瀏覽量
12540 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8320瀏覽量
132165
原文標(biāo)題:一文輕松get樸素貝葉斯算法,以及女朋友
文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論