閱讀266 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Naive Bayes(樸素貝葉斯)分類器的實用解釋

更多深度文章,請關注:https://yq.aliyun.com/cloud


最簡單的解決方案通常是最強大的解決方案,而Naive Bayes就是一個很好的證明。盡管機器學習在過去幾年取得了巨大的進步,但Naive Bayes已被證明不僅簡單,而且快速、準確、可靠。它已經成功地用於許多項目中,而且它對自然語言處理(NLP)的問題的解決提供了很大的幫助。

Naive Bayes是利用概率論和貝葉斯定理預測樣本類別(如新聞或客戶評論)的概率算法。它們是概率性的,這意味著它們計算給定樣本的每個類別的概率,然後輸出具有最高樣本的類別。他們獲得這些概率的方式是使用貝葉斯定理,它基於可能與該特征相關的條件的先前數據來描述特征的概率。

我們將使用一種稱為多項式Naive Bayes的算法。我們將以一個例子的方式介紹應用於NLP的算法,所以最終不僅你會知道這個方法是如何工作的,而且還會知道為什麼它可以工作。我們將使用一些先進的技術,使Naive Bayes與更複雜的機器學習算法(如SVM和神經網絡)可以相提並論。

讓我們看一下這個例子在實踐中如何運作。假設我們正在建立一個分類器,說明文本是否涉及體育運動。我們的訓練集有5句話:

Text

Category

A great game(一個偉大的比賽)

Sports(體育運動)

The election was over(選舉結束)

Not sports(不是體育運動)

Very clean match(沒內幕的比賽)

Sports(體育運動)

A clean but forgettable game

(一場難以忘記的比賽)

Sports(體育運動)

It was a close election

這是一場勢均力敵的選舉

Not sports(不是體育運動)

由於Naive Bayes貝葉斯是一個概率分類器,我們想要計算句子A very close game 是體育運動的概率以及它不是體育運動的概率。在數學上,我們想要的是PSports | a very close game),以及A very close game這個句子的類別是體育運動的概率。

但是我們如何計算這些概率呢?

創建機器學習模型時,我們需要做的第一件事就是決定使用什麼作為特征。例如,如果我們對健康進行分類,特征可能就是是一個人的身高,體重,性別等等。我們會排除對模型無用的東西,如人的名字或喜愛的顏色。

在這種情況下,我們甚至沒有數字特征。我們隻有文字。我們需要以某種方式將此文本轉換成可以進行計算的數字。

那麼我們該怎麼辦?一般都是使用字頻。也就是說,我們忽略了詞序和句子的構造,把每一個文件作為單詞庫來處理。我們的特征將是這些詞的計數。盡管它似乎過於簡單化,但它的效果令人驚訝。

貝葉斯定理在使用條件概率(如我們在這裏做)時很有用,因為它為我們提供了一種方法來扭轉它們:P(A|B)=P(B|A)×P(A)/P(B)。在我們這種情況下,我們有Psports | a very close game),所以使用這個定理我們可以逆轉條件概率:50b34817cb75edda1d17bcd19159b743db25ed35

因為對於我們的分類器,我們隻是試圖找出哪個類別有更大的概率,我們可以舍棄除數,隻是比較

028daa8b7e1d0984778141a0f3ba1b5ef0984d5f

這樣就更好理解了,因為我們可以實際計算這些概率!隻要計算句子  A very close game” 多少次出現在 Sports”的訓練集中,將其除以總數,就可以獲得Pa very close game | Sports)。

有一個問題,但是我們的訓練集中並沒有出現“A very close game”,所以這個概率是零。除非我們要分類的每個句子都出現在我們的訓練集中,否則模型不會很有用。

我們假設一個句子中的每個單詞都與其他單詞無關。這意味著我們不再看整個句子,而是單個單詞。我們把P(A very close game)寫成:P(a very close game)=P(a)×P(very)×P(close)×P(game) 這個假設非常強大,但是非常有用。這使得整個模型能夠很好地處理可能被錯誤標簽的少量數據或數據。下一步將它應用到我們以前所說的:

P(a very close game|Sports)=P(a|Sports)×P(very|Sports)×P(close|Sports)×P(game|Sports)

現在,我們所有的這些單詞在我們的訓練集中實際出現了好幾次,我們可以計算出來!

計算概率的過程其實隻是在我們的訓練集中計數的過程。

首先,我們計算每個類別的先驗概率:對於訓練集中的給定句子,Sports P(體育運動)的概率為⅗。然後,P(非體育運動)是⅖。然後,在計算Pgame | Sports)就是“game”有多少次出現在sports的樣品,然後除以sports的總數(11)。因此,P(game|Sports)=2/11。

但是,我們遇到了一個問題:“close”不會出現在任何sports樣本中!那就是說Pclose | Sports= 0。這是相當不方便的,因為我們將把它與其他概率相乘,所以我們最終會得到P(a|Sports)×P(very|Sports)×0×P(game|Sports)等於0。這樣做的事情根本不會給我們任何信息,所以我們必須找到一個辦法。

我們該怎麼做呢?通過使用一種被稱為拉普拉斯平滑的方法:我們為每個計數添加1,所以它不會為零。為了平衡這一點,我們將可能的詞數加到除數,因此這部分將永遠不會大於1。在我們的案例中,可能的話是 [ “a” ,“great” ,“very” ,“over” ,'it' ,'but' ,'game' ,'election' ,'close' ,'clean' ,'the' ,'was' ,'forgettable' ,'match' ] 。

由於可能的單詞數是14,應用拉普拉斯平滑我們得到了。全部結果如下:f068bba7de3344faa9b4c0507a1795f3c05e00e2

ee0a279a7badef97e426dec5cb87d69e54e7cee0

現在我們隻是將所有的概率加倍,看看誰更大:

041a3374b93f45d9ac07924ed08c72b74afd8cea

完美!我們的分類器給出了“A very close game” Sport類。

改進這個基本模型可以做很多事情。以下這些技術可以使Naive Bayes與更先進的方法效果相當。

  • Removing stopwords(刪除停用詞)。這些常用的詞,不會真正地添加任何分類,例如,一個,有能力,還有其他,永遠等等。所以為了我們的目的,選舉結束將是選舉,一個非常接近的比賽將是非常接近的比賽。
  • Lemmatizing words(單詞變體還原)。這是將不同的詞匯組合在一起的。所以選舉,大選,被選舉等將被分組在一起,算作同一個詞的更多出現。
  • Using n-grams (使用實例)。我們可以計算一些常用的實例,如沒有內幕的比賽勢均力敵的選舉。而不隻是一個字,一個字的進行計算。
  • 使用TF-IDF。而不是隻是計數頻率,我們可以做更高級的事情

本文由北郵@愛可可-愛生活推薦,阿裏雲雲棲社區翻譯。
文章原標題《A practical explanation of a Naive Bayes classifier

作者:Bruno Stecanella,機器學習愛好者,譯者:袁虎,審閱:
文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-06-30 00:02:19

  上一篇:go  Java程序師麵試失敗的最直接的原因原來是這樣的
  下一篇:go  支持向量機(SVM)簡介