[机器学习] 分类 --- Naive Bayes(朴素贝叶斯)
一、概率知識點復習
(1)條件概率
就是事件A在另外一個事件B已經(jīng)發(fā)生條件下的發(fā)生概率。條件概率表示為P(A|B),讀作“在B條件下A的概率”。
(2)聯(lián)合概率
可以簡單的理解為事件A與事件B都發(fā)生的概率,記為P(AB)或P(A, B)。
此處就有 ?P(A, B) = P(A|B) * P(B)
若事件A與事件B獨立,則有 P(A, B) = P(A) * P(B),這也說明了此時?P(A|B) = P(A)。
(3)全概率
如果事件B1,B2,B3,…,Bn 構成一個完備事件組,即它們兩兩互不相容,其和為全集;并且P(Bi)大于0,則對任一事件A有:
P(A)=P(A|B1)*P(B1) + P(A|B2)*P(B2) + ... + P(A|Bn)*P(Bn)
(這里我就只介紹這么多,大家如果對全概率不太理解的可以去補充補充!這點很重要,對后面理解貝葉斯很重要!!今天我重點在講貝葉斯,所以此處就不在多講全概率啦~~~后面的例子會涉及到!)
二、貝葉斯定理
我們在生活中經(jīng)常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關心P(B|A),貝葉斯定理就為我們打通從P(A|B)求得P(B|A)的道路。
此處我就給出貝葉斯定理的公式(其推導沒必要知道)
(便于大家記憶,可以這樣記P(A, B) = P(A|B) * P(B) 且P(A, B) = P(B|A) * P(A),大家將兩式子合并會有P(A|B) * P(B) = ?P(B|A) * P(A))
現(xiàn)有校準過的槍5把,沒校準過的3把。現(xiàn)在某人用校準過的槍打靶中靶概率為0.8,用沒校準過的槍中靶概率只為0.3。現(xiàn)在已知拿起一把槍打靶中靶了,請問這個槍是校準過的槍的概率?
(分析:直接套用上面的公式,但做P(A)的時候是要用到全概率的!!(全概率的重要性體現(xiàn)出來了))
?? 令中靶的事件為A,選中校準過的槍的事件為B1,選中未校準過的搶的事件為B2
? ? 則: P(B1) = 5 / 8 ? ? ? ?P(B2) = 3 / 8
? ?????????? P(A|B1) = 8 / 10?? P(A|B2) = 3 / 10
? ?????????? P(A) = P(A|B1)P(B1) + P(A|B2)P(B2) = 49 / 80
? ? ? ? ? ? ? ? 上面的都做出來后,你會發(fā)現(xiàn)根據(jù)貝葉斯定理的公式是不是就可以求出P(B1|A)啦~
? ? ? ? ? ? ? ? 得: ? ? ?P(B1|A) = P(B1)P(A|B1) / P(A) = 40 / 49
思考:
通過這個例子我們可以看到貝葉斯定理的作用,他就是打通了P(A|B1)求得P(B1|A)的道路,也可清晰理解到貝葉斯定理用來可分類!!
?
三、Naive Bayes-樸素貝葉斯
在概率論和統(tǒng)計學中,Bayes’ theorem(貝葉斯法則)根據(jù)事件的先驗知識描述事件的概率。貝葉斯法則表達式如下所示
- P(A|B) – 在事件B下事件A發(fā)生的條件概率
- P(B|A) – 在事件A下事件B發(fā)生的條件概率
- P(A), P(B) – 獨立事件A和獨立事件B的邊緣概率
順便提一下,上式中的分母P(B)可以根據(jù)全概率公式分解為:
Bayesian inferenc(貝葉斯推斷)
貝葉斯定理的許多應用之一就是貝葉斯推斷,一種特殊的統(tǒng)計推斷方法,隨著信息增加,貝葉斯定理可以用于更新假設的概率。在決策理論中,貝葉斯推斷與主觀概率密切相關,通常被稱為“Bayesian probability(貝葉斯概率)”。
貝葉斯推斷根據(jù) prior probability(先驗概率) 和統(tǒng)計模型導出的“l(fā)ikelihood function(似然函數(shù))”的結果,再由貝葉斯定理計算 posterior probability(后驗概率):
- P(H) – 已知的先驗概率
- P(H|E) – 我們想求的后驗概率,即在B事件發(fā)生后對于事件A概率的評估
- P(E|H) – 在事件H下觀測到E的概率
- P(E) – marginal likelihood(邊際似然),對于所有的假設都是相同的,因此不參與決定不同假設的相對概率
- P(E|H)/P(E) – likelihood function(可能性函數(shù)),這是一個調(diào)整因子,通過不斷的獲取信息,可以使得預估概率更接近真實概率
貝葉斯推斷例子
假設我們有兩個裝滿了餅干的碗,第一個碗里有10個巧克力餅干和30個普通餅干,第二個碗里兩種餅干都有20個。我們隨機挑一個碗,再在碗里隨機挑餅干。那么我們挑到的普通餅干來自一號碗的概率有多少?
我們用 H1 代表一號碗,H2 代表二號碗,而且 P(H1) = P(H2) = 0.5。事件 E 代表普通餅干。由上面可以得到 P(E|H1) = 30 / 40 = 0.75,P(E|H2) = 20 / 40 = 0.5。由貝葉斯定理我們得到
- P(E|H1)P(H1), P(E|H2)P(H2) – 分別表示拿到來自一號碗的普通餅干、來自二號碗的普通餅干的概率
- P(E|H1)P(H1) + P(E|H2)P(H2) – 表示拿到普通餅干的概率
在我們拿到餅干前,我們會選到一號碗的概率是先驗概率 P(H1),在拿到了餅干后,我們要得到是后驗概率 P(H1|E)
?
特征條件獨立假設
這一部分開始樸素貝葉斯的理論推導,從中你會深刻地理解什么是特征條件獨立假設。
?
樸素貝葉斯分類的正式定義如下:
1、設為一個待分類項,而每個a為x的一個特征屬性。
2、有類別集合。
3、計算。
4、如果,則。
?
那么現(xiàn)在的關鍵就是如何計算第3步中的各個條件概率。我們可以這么做:
1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。
2、統(tǒng)計得到在各類別下各個特征屬性的條件概率估計。即:
。
3、如果各個特征屬性是條件獨立的,則根據(jù)貝葉斯定理有如下推導:
??????
?因為分母對于所有類別為常數(shù),因為我們只要將分子最大化皆可。又因為各特征屬性是條件獨立的,所以有:
??????
------------------------------------------------------------------------
給定訓練數(shù)據(jù)集(X,Y),其中每個樣本x都包括n維特征,即x=(x1,x2,x3,...,xn),類標記集合含有k種類別,即y=(y1,y2,...,yk)。
如果現(xiàn)在來了一個新樣本x,我們要怎么判斷它的類別?從概率的角度來看,這個問題就是給定x,它屬于哪個類別的概率最大。那么問題就轉化為求解P(y1|x),P(y2|x),...,P(yk|x)中最大的那個,即求后驗概率最大的輸出:arg max ykP(yk|x)
?
那P(yk|x)怎么求解?答案就是貝葉斯定理:
根據(jù)全概率公式,可以進一步地分解上式中的分母:
??? 【公式1】
先不管分母,分子中的P(yk)
是先驗概率,根據(jù)訓練集就可以簡單地計算出來。
而條件概率P(x|yk)=P(x1,x2,...,xn|yk)
它的參數(shù)規(guī)模是指數(shù)數(shù)量級別的,假設第i維特征xi可取值的個數(shù)有Si個,類別取值個數(shù)為k個,那么參數(shù)個數(shù)為:k∏ni=1Si
這顯然不可行。針對這個問題,樸素貝葉斯算法對條件概率分布作出了獨立性的假設,通俗地講就是說假設各個維度的特征x1,x2,...,xn互相獨立,在這個假設的前提上,條件概率可以轉化為:
【公式2】
這樣,參數(shù)規(guī)模就降到∑ni=1Sik
以上就是針對條件概率所作出的特征條件獨立性假設,至此,先驗概率P(yk)
和條件概率P(x|yk)的求解問題就都解決了,那么我們是不是可以求解我們所要的后驗概率P(yk|x)了?
答案是肯定的。我們繼續(xù)上面關于P(yk|x)
的推導,將【公式2】代入【公式1】得到:
于是樸素貝葉斯分類器可表示為:
因為對所有的yk,上式中的分母的值都是一樣的(為什么?注意到全加符號就容易理解了),所以可以忽略分母部分,樸素貝葉斯分類器最終表示為:
四 Naive Bayes Classifiers(樸素貝葉斯分類器)
在機器學習中,樸素貝葉斯分類器是一個基于貝葉斯定理的比較簡單的概率分類器,其中 naive(樸素)是指的對于模型中各個 feature(特征) 有強獨立性的假設,并未將 feature 間的相關性納入考慮中。
樸素貝葉斯分類器一個比較著名的應用是用于對垃圾郵件分類,通常用文字特征來識別垃圾郵件,是文本分類中比較常用的一種方法。樸素貝葉斯分類通過選擇 token(通常是郵件中的單詞)來得到垃圾郵件和非垃圾郵件間的關聯(lián),再通過貝葉斯定理來計算概率從而對郵件進行分類。
由單個單詞分類郵件
假設可疑消息中含有“sex”這個單詞,平時大部分收到郵件的人都會知道,這封郵件可能是垃圾郵件。然而分類器并不知道這些,它只能計算出相應的概率。假設在用戶收到的郵件中,“sex”出現(xiàn)在在垃圾郵件中的頻率是5%,在正常郵件中出現(xiàn)的概率是0.5%。
我們用 S 表示垃圾郵件(spam),H 表示正常郵件(healthy)。兩者的先驗概率都是50%,即:
P(S)=P(H)=50%
我們用 W 表示這個詞,那么問題就變成了計算 P(S|W) 的值,根據(jù)貝葉斯定理我們可以得到:
P(W|S)和P(W|H)的含義是,這個詞語在垃圾郵件和正常郵件中,分別出現(xiàn)的概率。通過計算可以得到 P(S|W) = 99.0%,說明“sex”的判斷能力很強,將50%的先驗概率提高到了99%的后驗概率。
結合獨立概率
大多數(shù)貝葉斯垃圾郵件分類器基于這樣的假設:郵件中的單詞是獨立的事件,實際上這種條件一般不被滿足,這也是為什么被稱作樸素貝葉斯。這是對于應用情景的理想化,在此基礎上,我們可以通過貝葉斯定理得到以下公式:
- p 是可疑郵件是垃圾郵件的概率
- pN 當郵件中包含第 Nth 個單詞時郵件是垃圾郵件的概率 p(S|WN)
對于輸出的概率,我們將它和一個 threshold(閾值)相比較,小于閾值的是正常郵件,否則認為它是垃圾郵件。
?
五 scikit-learn 樸素貝葉斯類庫概述
樸素貝葉斯是一類比較簡單的算法,scikit-learn中樸素貝葉斯類庫的使用也比較簡單。相對于決策樹,KNN之類的算法,樸素貝葉斯需要關注的參數(shù)是比較少的,這樣也比較容易掌握。在scikit-learn中,一共有3個樸素貝葉斯的分類算法類。分別是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先驗為高斯分布的樸素貝葉斯,MultinomialNB就是先驗為多項式分布的樸素貝葉斯,而BernoulliNB就是先驗為伯努利分布的樸素貝葉斯。
這三個類適用的分類場景各不相同:
- 高斯樸素貝葉斯:sklearn.naive_bayes.GaussianNB(priors=None) 用于樣本特征的分布大部分是連續(xù)值
- 多項式樸素貝葉斯:sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)主要用于離散特征分類,例如文本分類單詞統(tǒng)計,以出現(xiàn)的次數(shù)作為特征值
-
伯努利樸素貝葉斯:sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True,class_prior=None)類似于多項式樸素貝葉斯,也主要用戶離散特征分類,和MultinomialNB的區(qū)別是:MultinomialNB以出現(xiàn)的次數(shù)為特征值,BernoulliNB為二進制或布爾型特性
1.?GaussianNB類使用總結
GaussianNB假設特征的先驗概率為正態(tài)分布,即如下式:
?
????? 其中Ck為Y的第k類類別。μk和σ2k 為需要從訓練集估計的值
GaussianNB會根據(jù)訓練集求出μk和σ2k。 μk為在樣本類別Ck中,所有Xj的平均值。σ2k為在樣本類別Ck中,所有Xj的方差。
GaussianNB類的主要參數(shù)僅有一個,即先驗概率priors?,對應Y的各個類別的先驗概率P(Y=Ck)。這個值默認不給出,如果不給出此時P(Y=Ck)=mk/m。其中m為訓練集樣本總數(shù)量,mk為輸出為第k類別的訓練集樣本數(shù)。如果給出的話就以priors 為準。
高斯模型假設每一維特征都服從高斯分布(正態(tài)分布):
μyk,i表示類別為yk的樣本中,第i維特征的均值。
σ2yk,i表示類別為yk的樣本中,第i維特征的方差。
??? 在使用GaussianNB的fit方法擬合數(shù)據(jù)后,我們可以進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。 predict方法就是我們最常用的預測方法,直接給出測試集的預測類別輸出。predict_proba則不同,它會給出測試集樣本在各個類別上預測的概率。容易理解,predict_proba預測出的各個類別概率里的最大值對應的類別,也就是predict方法得到類別。predict_log_proba和predict_proba類似,它會給出測試集樣本在各個類別上預測的概率的一個對數(shù)轉化。轉化后predict_log_proba預測出的各個類別對數(shù)概率里的最大值對應的類別,也就是predict方法得到類別。
???? 當特征是連續(xù)變量的時候,運用多項式模型就會導致很多P(xi|yk)=0(不做平滑的情況下),此時即使做平滑,所得到的條件概率也難以描述真實情況。所以處理連續(xù)的特征變量,應該采用高斯模型。
????
下面是一組人類身體特征的統(tǒng)計資料。
| 男 | 6 | 180 | 12 |
| 男 | 5.92 | 190 | 11 |
| 男 | 5.58 | 170 | 12 |
| 男 | 5.92 | 165 | 10 |
| 女 | 5 | 100 | 6 |
| 女 | 5.5 | 150 | 8 |
| 女 | 5.42 | 130 | 7 |
| 女 | 5.75 | 150 | 9 |
已知某人身高6英尺、體重130磅,腳掌8英寸,請問該人是男是女?
根據(jù)樸素貝葉斯分類器,計算下面這個式子的值。
????? 困難在于,由于身高、體重、腳掌都是連續(xù)變量,不能采用離散變量的方法計算概率。而且由于樣本太少,所以也無法分成區(qū)間計算。怎么辦?
????? 這時,可以假設男性和女性的身高、體重、腳掌都是正態(tài)分布,通過樣本計算出均值和方差,也就是得到正態(tài)分布的密度函數(shù)。有了密度函數(shù),就可以把值代入,算出某一點的密度函數(shù)的值。
????? 比如,男性的身高是均值5.855、方差0.035的正態(tài)分布。所以,男性的身高為6英尺的概率的相對值等于1.5789(大于1并沒有關系,因為這里是密度函數(shù)的值,只用來反映各個值的相對可能性)
?
對于腳掌和體重同樣可以計算其均值與方差。有了這些數(shù)據(jù)以后,就可以計算性別的分類了。
P(身高=6|男) x P(體重=130|男) x P(腳掌=8|男) x P(男) = 6.1984 x e-9P(身高=6|女) x P(體重=130|女) x P(腳掌=8|女) x P(女) = 5.3778 x e-4可以看到,女性的概率比男性要高出將近10000倍,所以判斷該人為女性。
2.?MultinomialNB類使用總結
MultinomialNB假設特征的先驗概率為多項式分布,即如下式:
? 其中,P(Xj=xjl|Y=Ck)是第k個類別的第j維特征的第l個個取值條件概率。mk是訓練集中輸出為第k類的樣本個數(shù)。λ
為一個大于0的常數(shù),常常取為1,即拉普拉斯平滑。也可以取其他值。
?? MultinomialNB參數(shù)比GaussianNB多,但是一共也只有僅僅3個。其中,參數(shù)alpha即為上面的常數(shù)λ,如果你沒有特別的需要,用默認的1即可。如果發(fā)現(xiàn)擬合的不好,需要調(diào)優(yōu)時,可以選擇稍大于1或者稍小于1的數(shù)。布爾參數(shù)fit_prior表示是否要考慮先驗概率,如果是false,則所有的樣本類別輸出都有相同的類別先驗概率。否則可以自己用第三個參數(shù)class_prior輸入先驗概率,或者不輸入第三個參數(shù)class_prior讓MultinomialNB自己從訓練集樣本來計算先驗概率,此時的先驗概率為P(Y=Ck)=mk/m。其中m為訓練集樣本總數(shù)量,mk為輸出為第k類別的訓練集樣本數(shù)。
在使用MultinomialNB的fit方法或者partial_fit方法擬合數(shù)據(jù)后,我們可以進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。由于方法和GaussianNB完全一樣,這里就不累述了。
多項式模型在計算先驗概率P(yk)和條件概率P(xi|yk)時,會做一些平滑處理,具體公式為:
N是總的樣本個數(shù),k是總的類別個數(shù),Nyk是類別為yk的樣本個數(shù),α是平滑值。
Nyk是類別為yk的樣本個數(shù),n是特征的維數(shù),Nyk,xi是類別為yk的樣本中,第i維特征的值是xi的樣本個數(shù),α是平滑值。
當α=1時,稱作Laplace平滑,當0<α<1時,稱作Lidstone平滑,α=0時不做平滑。
如果不做平滑,當某一維特征的值xi
沒在訓練樣本中出現(xiàn)過時,會導致P(xi|yk)=0,從而導致后驗概率為0。加上平滑就可以克服這個問題。
?
2.1 舉例
有如下訓練數(shù)據(jù),15個樣本,2維特征X1,X2
,2種類別-1,1。給定測試樣本x=(2,S)T
,判斷其類別。
解答如下:
運用多項式模型,令α=1
- 計算先驗概率
- 計算各種條件概率
- 對于給定的x=(2,S)T計算:
由此可以判定y=-1。
3.?BernoulliNB類使用總結
BernoulliNB假設特征的先驗概率為二元伯努利分布,即如下式:
此時l只有兩種取值。xjl只能取值0或者1。
?? BernoulliNB一共有4個參數(shù),其中3個參數(shù)的名字和意義和MultinomialNB完全相同。唯一增加的一個參數(shù)是binarize。這個參數(shù)主要是用來幫BernoulliNB處理二項分布的,可以是數(shù)值或者不輸入。如果不輸入,則BernoulliNB認為每個數(shù)據(jù)特征都已經(jīng)是二元的。否則的話,小于binarize的會歸為一類,大于binarize的會歸為另外一類。
在使用BernoulliNB的fit或者partial_fit方法擬合數(shù)據(jù)后,我們可以進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。由于方法和GaussianNB完全一樣,這里就不累述了。
?????? 與多項式模型一樣,伯努利模型適用于離散特征的情況,所不同的是,伯努利模型中每個特征的取值只能是1和0(以文本分類為例,某個單詞在文檔中出現(xiàn)過,則其特征值為1,否則為0).
伯努利模型中,條件概率P(xi|yk)的計算方式是:
當特征值xi為1時,P(xi|yk)=P(xi=1|yk);
當特征值xi為0時,P(xi|yk)=1?P(xi=1|yk);
?????? 伯努利模型和多項式模型是一致的,BernoulliNB需要比MultinomialNB多定義一個二值化的方法,該方法會接受一個閾值并將輸入的特征二值化(1,0)。當然也可以直接采用MultinomialNB,但需要預先將輸入的特征二值化。
六、樸素貝葉斯的優(yōu)缺點
樸素貝葉斯的主要優(yōu)點有:
樸素貝葉斯的主要缺點有:
參考:
- 《統(tǒng)計學習方法》,李航
- 《機器學習》,Tom M.Mitchell
- 維基百科Sex classification
- 樸素貝葉斯的三個常用模型:高斯、多項式、伯努利
- 樸素貝葉斯分類器的應用
- 數(shù)學之美番外篇:平凡而又神奇的貝葉斯方法
-
樸素貝葉斯理論推導與三種常見模型
- https://blog.csdn.net/weixin_42180810/article/details/81278326
總結
以上是生活随笔為你收集整理的[机器学习] 分类 --- Naive Bayes(朴素贝叶斯)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 订单支付页面 html,订单支付完成.h
- 下一篇: windows hello怎么开启 wi