1. 程式人生 > >簡單示例理解樸素貝葉斯演算法,通俗易懂

簡單示例理解樸素貝葉斯演算法,通俗易懂

一個簡單的例子

讓我們看一下這個例子在實踐中如何運作。假設我們正在建立一個分類器,說明文字是否涉及體育運動。我們的訓練集有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(不是體育運動)

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

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

特徵工程

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

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

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

貝葉斯定理

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

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

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

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

Being Naive

我們假設一個句子中的每個單詞都與其他單詞無關。這意味著我們不再看整個句子,而是單個單詞。我們把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)

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

計算概率

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

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

但是,我們遇到了一個問題:“close”不會出現在任何sports樣本中!那就是說P(close | 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,應用拉普拉斯平滑我們得到了。全部結果如下:

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

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

先進的技術

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

  • Removing stopwords(刪除停用詞)。這些常用的詞,不會真正地新增任何分類,例如,一個,有能力,還有其他,永遠等等。所以為了我們的目的,選舉結束將是選舉,一個非常接近的比賽將是非常接近的比賽。

  • Lemmatizing words(單詞變體還原)。這是將不同的詞彙組合在一起的。所以選舉,大選,被選舉等將被分組在一起,算作同一個詞的更多出現。

  • Using n-grams(使用例項)。我們可以計算一些常用的例項,如“沒有內幕的比賽”和“勢均力敵的選舉”。而不只是一個字,一個字的進行計算。

  • 使用TF-IDF。而不是隻是計數頻率,我們可以做更高階的事情