Step by Step 改進樸素貝葉斯算法

引言

如果你對naive bayes認識還處於初級階段,只瞭解基本的原理和假設,還沒有實現過產品級的代碼,那麼這篇文章能夠幫助你一步步對原始的樸素貝葉斯算法進行改進。在這個過程中你將會看到樸素貝葉斯假設的一些不合理處以及侷限性,從而瞭解爲什麼這些假設在簡化你的算法的同時,使最終分類結果變得糟糕,並針對這些問題提出了改進的方法。




樸素貝葉斯(Naive Bayes)

出處: 《機器學習》(Machine Learning by Tom M.Mitchell)

符號和術語

假設待分類的實例 X 可由屬性值的集合來進行描述, 目標類別集合爲 

算法推導

貝葉斯的目標是在給定實例的屬性值下,得到最可能的目標值,表達式如下


可使用貝葉斯公式將此表達式重寫爲


樸素貝葉斯假設

樸素貝葉斯假設: 實例 X 的各屬性之間相互獨立

根據概率的乘法定理,可得


那麼樸素貝葉斯表達式就爲



多項式樸素貝葉斯(multinomial Naive Bayes)

符號和術語

多項式貝葉斯是將某個文檔看成許多單詞組成的一個序列,並以文檔中的單詞來建立多項式模型。即把文檔中出現的單詞看作數學多項式中的。假設目標類別集合數目確定, 爲 , 每個都可以用一系列的多項式係數來表示。換句話說,對於其中的某個類別c來說,都有多項式係數  (n爲所有單詞組成的字典大小), 因爲代表了某個單詞在類別c中出現的可能性,所以其加和必然爲1,公式爲

公式推導

文檔屬於的概率爲所有單詞特徵在該類別出現的可能性之積,公式如下


這裏表示單詞在該文檔中出現的次數, 我們應用上面樸素貝葉斯講解中提到的貝葉斯公式以及MAP假設就可以進行一步步推導

貝葉斯公式

MAP假設以及將值取log:

在上面的公式中,爲單詞i屬於類別c的權重,如何選取以及就是學者們研究的重點,這關係到Naive Bayes分類器的性能。


的選取

論文出處:Heckerman, D. (1995). A tutorial on learning with Bayesian networks (Technical Report MSR-TR-95-06). Microsoft Research

依據該論文,給出了一個簡單的公式

, 其中爲單詞i在類別爲c的文檔集合中出現的次數, 爲所有單詞在類別爲c的文檔集合中出現的總次數,爲單詞i的平滑係數,的值則是所有單詞的平滑係數的和。這裏常用的方法是加入Laplace平滑, 即另所有單詞的=1,那麼就等於字典的大小N。


將上面的公式代入之前的MAP假設可以得到


在這裏是類別c的先驗概率,可以像計算單詞的先驗概率的方法那樣計算,不過值得注意的是,在上面的式子中類別的先驗概率相對單詞的可能性(式子右邊項)來說不占主導地位,因此我們可以選取統一的, 即


這個就是最終的多項式貝葉斯(MNB)的計算公式。



Complementary Naive Bayes

Complementary Naive Bayes, 也可以叫做互補樸素貝葉斯。

考慮這樣一個問題,假設有一個類別有偏的訓練數據集,即訓練數據集中屬於各個類別的文檔數量各不相同, 問對比於類別均勻分佈的訓練數據集,分類結果有何不同?

假設類別c的數量較少,那麼單詞i屬於類別c的權重也較低,最終導致分類結果向數量多的類別方向產生了偏移。爲了降低該影響, 提出了一種計算補集的方法來得到分類結果,簡稱CNB

相對於MNB的計算某個類別的來說, CNB則計算除類別c外的其他類別的,能夠這樣做的原理在於,類別較多的情況下,其補集的文檔數量比較多,這樣各個類別的補集之間的數量都差不多,減弱了類別文檔數量對分類結果的影響。

因此CNB的參數估計爲


因此CNB的計算公式爲


其中負號是由於單詞i屬於類別c與其補集的權重值正好是相反的,因此我們需要選取其補集權重小的作爲分類結果,即前面加上一個負號。



Weight-normalized Complementary Naive Bayes

Weight-normalized Complementary Naive Bayes, 也可以叫做權重歸一化互補樸素貝葉斯。

Naive Bayes假設單詞之間相互獨立,雖然這簡化了計算, 但實際情況中該假設並不能很好滿足。

考慮這樣一個情形,我們假定有一些單詞很少分開出現,比如地名 San Francisco, 由於San和Francisco都是一起出現,那麼其對權重的貢獻將是單一的San或者Francisco的兩倍, 也就是說 San Francisco 的權重被Double-Counting了, 這樣將導致分類器不準確。例如,在一個文檔中Boston出現了5次而San Francisco只出現了3次,那麼MNB更加傾向於將文檔歸於San Francisco(6次)而不是Boston(5次)。

有一種解決問題的辦法就是將權重歸一化,即將改寫爲


到目前爲止我們在算法公式方面做了一些改進,以減弱一些不合理假設的影響,使得結果更加接近實際情況。現在我們可以更進一步,從另外一個方面來改進算法,那就是文本建模。

1.TFIDF

如果你有使用過Lucene的經歷,可能會接觸到一個概念,那就是TFIDF。因爲該模型考慮到了包含字詞的文檔站整個數據集的比例,因此可以比TF更加準確地評估一字詞對於一個文件集或一個語料庫中的其中一份文件的重要程度。因此將文本模型中的 替換成即可。

這裏建議選用lucene中TFIDF的計算方式

1.

2.idf = 1 + log(numDocs / (1 + docFreq)

3.tfidf = tf * idf


2.Length norm

由於在大部分文檔中單詞出現有其內在的聯繫,即如果一個單詞在某文檔中出現,則該單詞就有較大的概率再次出現。而MNB簡單的假定單詞出現的概率相互獨立,因此在越長的文檔中這種依賴關係造成的影響就越大,因此類似上面的Weighted-normalized,我們可以對長度進行歸一化來減弱這種依賴造成的影響。公式爲




總結

綜上所述, naive bayes可以從根據考慮的角度以及側重點不同,從多個方面進行改進。在實際選取模型的時候,可以先對文本數據集的規模,文檔的長度,類別的數量以及分佈情況等情況綜合考慮,選取適合的算法。具體產品級的代碼可以看Apache mahout項目的樸素貝葉斯部分,其實現了CNB以及TFIDF。


參考論文:

Tackling the Poor Assumptions of Naive Bayes Text Classifiers

Heckerman, D. (1995). A tutorial on learning with Bayesian networks (Technical Report MSR-TR-95-06). Microsoft Research


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章