如何用簡單易懂的語言描述樸素貝葉斯分類器?


謝邀。我會盡量用簡單樸素的例子來解釋樸素貝葉斯演算法,之前寫過類似文章受到不少讚賞,有好的建議或想法歡迎在評論區交流探討。

首先樸素貝葉斯分類是一種十分簡單的分類演算法,一個含有貝葉斯思想的例子可以這樣。你在路上看到一個黑人且比較高,你十有八九猜他是從非洲來的。

因為在沒有其他可用信息的前提下,一般來說大部分非洲人符合這種特徵,所以你會選擇最大概率是非洲人,這種思想就是貝葉斯思想。

一個非常簡單的例子

簡單來說,你晚起床遲到的後驗概率是:

正規來寫:

演算法流程

好了,我們知道後驗概率由條件概率、先驗概率和現象概率計算得來。

那麼根據這個表(分類預測是否健康的人的例子)來解釋這些名詞:

1.條件概率

由於樸素貝葉斯有「樸素」的前提假設,即特徵兩兩獨立同分布。所以條件概率可以用全概率公式寫成以下形式:

以上公式簡單來說就是在給定某個類別下,觀察到出現現象x的概率。在特徵向量中的每個特點的概率我們都可以通過極大似然估計(maximum-likelihood estimate)來求得,也就是簡單地求某個特徵在某個類別中的頻率,公式如下:

其中,分子代表所有屬於類別wj的樣本中,特徵xi出現的次數;分母代表屬於類別wj的樣本中,所有特徵出現的次數。

現在我們求P(old,smoke|is_healthy)的概率,通過上述公式求得結果如下:

2.先驗概率

先驗概率其實很簡單,例如上面例子是健康的概率為1/2,不健康的概率為1/2,用公式表達如下:

其中,分子代表屬於類wj的樣本數,分母代表所有樣本數。

需要注意的是,有些數據集中對應的先驗概率實際上會有偏差,例如一個數據集中有10個人,中500w的有5個人,這時候就要考慮下這個數據集是否存在分布偏差,需要自設先驗概率。

3.現象概率

現象概率是獨立於類別之外的,是在所有樣本中該特徵值的概率,例如上面抽煙的概率是P (smoke) = 3/4,跟屬於哪一類沒有關係。

分類預測

通過學到每個特徵值在該類下的概率後,給定未分類實例有特徵X,就可以通過上述計算過程進行計算,得到該實例屬於各類的後驗概率p(y=c_k|X),然後取各類的後驗概率的最大值即可。

如果有新數據要預測人是否健康,那麼可以得到公式:

通過上述計算公式後,比較兩者的大小,選擇最大值即可。

總結

樸素:特徵兩兩之間獨立同分布假設(i.i.d);

貝葉斯:基於貝葉斯定理。

根據貝葉斯定理,對一個分類問題,給定樣本特徵X,樣本屬於類別y的概率是:

這裡X是對應的特徵項,將特徵維度設為M,因為特徵兩兩之間獨立同分布,根據全概率公式展開,上述公式變為:

通過上述公式,只要計算出每一個特徵Xi在每一類的條件概率就行了,每一類的先驗概率可以在訓練集中計算可得,同樣可以計算得出每一類上的條件獨立的特徵對應的條件概率總和。


如果你對學習人工智慧和科技新聞感興趣,可以訂閱我的頭條號,我會在這裡發布所有與演算法、機器學習以及深度學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回復和討論,看到即回。

(碼字不易,若文章對你幫助可點贊支持~)


在此,我借垃圾郵件分類來解釋樸素貝葉斯分類器。首先,我們先來看一下貝葉斯公式

1) 數學書眼中的貝葉斯公式:

2) 機器學習眼中的貝葉斯公式:

3)垃圾郵件分類眼中的貝葉斯公式:

下面簡單說明一下樸素貝葉斯分類器的「樸素」從何而來?

我們在訓練模型的時候,由於訓練集有限而垃圾郵件文本內容無限,不可能找到覆蓋所有可能情況的訓練集。所以將對文本的分析轉換為對詞或詞的組合進行分析,也就是說不用句子作特徵,而用句子中的詞作特徵。

分詞之後,垃圾郵件分類眼中的貝葉斯公式變成了:

其中,p(「垃圾郵件」)依據先驗知識可輕鬆得到。

問題在於p(「恭喜」,「你」,「中獎」,「了」│「垃圾郵件」) 依舊不好求。因此我們就引入了簡單粗暴可以說很「樸素」的條件獨立假設來簡化問題,即認為項與項之間獨立,其對最終結果的貢獻互不影響。(注意這裡指的是項與項之間互相獨立,每一項可能代表一個詞,即一元語言模型;也可能代表多個詞,即n元語言模型)此時概率就簡化為:

接下來,就是簡單的統計工作,即計算垃圾郵件中各個詞語出現的概率,便可以得到此句話在垃圾郵件中出現的概率了。進而也容易通過貝葉斯公式推導出某一封郵件是垃圾郵件的概率了,同樣的方法能求出同一封郵件是正常郵件的概率,相比較就可以進行垃圾郵件分類了。

但是在實際工程中,還有很多小trick,比如可人工設置停用詞表和關鍵詞表,對概率乘積進行取對數的操作等。而且目前有很多已經封裝好的庫可直接調用,比如著名的機器學習庫Sklearn中對樸素貝葉斯分類器就提供了三種不同的模型,感興趣的可以看起內部的具體實現代碼加強理解。

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.naive_bayes


一、理解貝葉斯:根據數據集D的內容變化更新假設概率H

P(H|D) = P(H) P(D|H) / P(D)

更多更詳細請看<神奇貝葉斯的兩種理解方式>

二、樸素貝葉斯的特別之處就是假設條件獨立。

以過濾垃圾郵件為例,用D代表一封郵件,用h+表示垃圾郵件。

那麼問題就是求:

先驗概率P(h+):很容易求,從一個郵件庫里統計垃圾郵件的比例即可;

似然度P(D|h+):在垃圾郵件當中出現跟這封郵件的概率,咋求?

注意到D是由N個單片語成的,用d1...dn表示,那麼

怎麼求P(d1,d2...dn | h+)呢?用完全聯合概率公式!

做極端假設,假設各個詞出現與否完全無關,

那麼上式變成:

繼續分解,得到

同樣的極端假設,標準化常量P(D) :

再利用貝葉斯公式,計算出來P(h+|d)如果大於某閾值,即可斷為垃圾郵件。

假設條件完全獨立,這就是之所以被稱為樸素(Naive)的原因。


初次接觸到這個概念是在大學選修數據挖掘的時候,貝葉斯分類基於貝葉斯定理,屬於分類中的基本概念。

簡單來說,它是基於出現概率進行粗略的分類,比說,要將若干電影分類,一個電影出現親吻的鏡頭以及一男一女單獨的鏡頭概率大,就將此分為愛情片,如果打鬥場面出現的概率大就將電影分為動作片。聽上去不太「靠譜」,但是分類演算法的比較研究發現,樸素貝葉斯分類法可以與決策樹和經過挑選的神經網路媲美。用於大型資料庫,貝葉斯分類法也已表現出高準確率和高速度。

樸素貝葉斯分類法假定一個屬性值在給定類上的影響獨立於其他屬性的值。這一假定稱為類條件獨立性。做此假定是為了簡化計算,並在此意義下稱為「樸素的」。

工作流程:

第一階段——準備工作階段,這個階段的任務是為樸素貝葉斯分類做必要的準備,主要工作是根據具體情況確定特徵屬性,並對每個特徵屬性進行適當劃分,然後由人工對一部分待分類項進行分類,形成訓練樣本集合。這一階段的輸入是所有待分類數據,輸出是特徵屬性和訓練樣本。這一階段是整個樸素貝葉斯分類中唯一需要人工完成的階段,其質量對整個過程將有重要影響,分類器的質量很大程度上由特徵屬性、特徵屬性劃分及訓練樣本質量決定。

第二階段——分類器訓練階段,這個階段的任務就是生成分類器,主要工作是計算每個類別在訓練樣本中的出現頻率及每個特徵屬性劃分對每個類別的條件概率估計,並將結果記錄。其輸入是特徵屬性和訓練樣本,輸出是分類器。這一階段是機械性階段,根據前面討論的公式可以由程序自動計算完成。

第三階段——應用階段。這個階段的任務是使用分類器對待分類項進行分類,其輸入是分類器和待分類項,輸出是待分類項與類別的映射關係。這一階段也是機械性階段,由程序完成。

如果以上的解釋你覺得不深入,不妨看看大佬的文章

http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html

更多優質內容,請持續關注鎂客網~~


首先回顧下貝葉斯定理:

pPost a b = ((p b) / (p a)) * (pPost b a)

上式中,pPost表示後驗概率posterior probability,傳統寫法為`p(b|a)`,我們將`b`置於`a`之後,我們覺得這樣比較自然。如果你更習慣傳統寫法的話可以參考下式

在分類問題中,上式中的`a`表示特徵,`b`表示類別。為了凸顯這一點,我們可以把`a`換成`f`(特徵 feature), `b`換成`C`(類別 class):

pPost f C = ((p C) / (p f)) * (pPost C f)

將其推廣到多個特徵:(實際問題往往需要統計多個特徵,而不是單一特徵)

pPost [f1, f2 .. fn] C =

(p C) * (pPost C [f1, f2 .. fn]) / (p [f1, f2 .. fn])

其中,`p C`和`p [f1, f2 .. fn]`都很容易統計,而`pPost C [f1, f2 .. fn]`的計算複雜度很高,特別是,`C`中同時具有`[f1, f2 .. fn]`的樣本可能很少(稀疏),那訓練的效果就很差了。

那怎麼辦呢?

我們可以假設`[f1, f2 .. fn]`的每一項都是獨立事件。這樣,`pPost C [f1, f2 .. fn]`就可以化簡為

(pPost C f1) * (pPost C f2) * .. * (pPost C fn)

這樣我們就只需要獨立計算分類為`C`的情況下具有某一個特徵的概率了,避免了樣本稀疏的問題,同時,每一項都可以分散式地跑。

別忘了,前面我們為了簡化運算量,假設`[f1, f2 .. fn]`的每一項都是獨立事件,這個假設可不一定成立。因此這個演算法叫做幼稚貝葉斯分類器或者樸素貝葉斯分類器(Naive Bayes Classifier)。這個名稱就是強調獨立事件的假設不一定成立。

儘管獨立事件的假設常常是不準確的,但樸素貝葉斯在實際工程中出乎意料地好用。因為很多應用並不在乎精確的類概率,只關心最後的分類結果。比如垃圾郵件過濾,只需要判斷是否是垃圾郵件,並不需要在用戶界面顯示「本郵件有 87.53% 的概率是垃圾郵件」之類的信息。


推薦閱讀:

互聯網簡訊-20180724
互聯網簡訊-20180621
揭秘月入萬元的IOS退款的暴利灰產項目!
牧場主必看!關於互聯網養羊你關心的7個問題!
預計蘋果iPhone XS售價方面或將進一步提高

TAG:機器學習 | 互聯網 | 教育 |