讀古今文學網 > 機器學習實戰 > 4.4 使用樸素貝葉斯進行文檔分類 >

4.4 使用樸素貝葉斯進行文檔分類

機器學習的一個重要應用就是文檔的自動分類。在文檔分類中,整個文檔(如一封電子郵件)是實例,而電子郵件中的某些元素則構成特徵。雖然電子郵件是一種會不斷增加的文本,但我們同樣也可以對新聞報道、用戶留言、政府公文等其他任意類型的文本進行分類。我們可以觀察文檔中出現的詞,並把每個詞的出現或者不出現作為一個特徵,這樣得到的特徵數目就會跟詞彙表中的詞目一樣多。樸素貝葉斯是上節介紹的貝葉斯分類器的一個擴展,是用於文檔分類的常用算法。

使用每個詞作為特徵並觀察它們是否出現,這樣得到的特徵數目會有多少呢?針對的是哪一種人類語言呢?當然不止一種語言。據估計,僅在英語中,單詞的總數就有500 0001之多。為了能進行英文閱讀,估計需要掌握數千單詞。

1. http://hypertextbook.com/facts/2001/JohnnyLing.shtml, 2010年10月20日檢索結果。

樸素貝葉斯的一般過程: 1. 收集數據:可以使用任何方法。本章使用RSS源。 2. 準備數據:需要數值型或者布爾型數據 3. 分析數據:有大量特徵時,繪製特徵作用不大,此時使用直方圖效果更好。 4. 訓練算法:計算不同的獨立特徵的條件概率。 5. 測試算法:計算錯誤率。 6. 使用算法:一個常見的樸素貝葉斯應用是文檔分類。可以在任意的分類場景中使用樸素貝葉斯分類器,不一定非要是文本。

假設詞彙表中有1000個單詞。要得到好的概率分佈,就需要足夠的數據樣本,假定樣本數為N。前面講到的約會網站示例中有1000個實例,手寫識別示例中每個數字有200個樣本,而決策樹示例中有24個樣本。其中,24個樣本有點少,200個樣本好一些,而1000個樣本就非常好了。約會網站例子中有三個特徵。由統計學知,如果每個特徵需要N個樣本,那麼對於10個特徵將需要N10個樣本,對於包含1000個特徵的詞彙表將需要N1000個樣本。可以看到,所需要的樣本數會隨著特徵數目增大而迅速增長。

如果特徵之間相互獨立,那麼樣本數就可以從N1000減少到1000×N。所謂獨立(independence)指的是統計意義上的獨立,即一個特徵或者單詞出現的可能性與它和其他單詞相鄰沒有關係。舉個例子講,假設單詞bacon出現在unhealthy後面與出現在delicious後面的概率相同。當然,我們知道這種假設並不正確,bacon常常出現在delicious附近,而很少出現在unhealthy附近,這個假設正是樸素貝葉斯分類器中樸素(naive)一詞的含義。樸素貝葉斯分類器中的另一個假設是,每個特徵同等重要2。其實這個假設也有問題。 如果要判斷留言板的留言是否得當,那麼可能不需要看完所有的1000個單詞,而只需要看10~20個特徵就足以做出判斷了。儘管上述假設存在一些小的瑕疵,但樸素貝葉斯的實際效果卻很好。

2. 樸素貝葉斯分類器通常有兩種實現方式:一種基於貝努利模型實現,一種基於多項式模型實現。這裡採用前一種實現方式。該實現方式中並不考慮詞在文檔中出現的次數,只考慮出不出現,因此在這個意義上相當於假設詞是等權重的。4.5.4節給出的實際上是多項式模型,它考慮詞在文檔中的出現次數。——譯者注

到目前為止,你已經瞭解了足夠的知識,可以開始編寫代碼了。如果還不清楚,那麼瞭解代碼的實際效果會有助於理解。下一節將使用Python來實現樸素貝葉斯分類器,實現中會涉及利用Python進行文本分類的所有相關內容。