樸素貝葉斯 (Naive Bayesian algorithm) 是一種基於概率統計的分類方法,主要用到了貝葉斯定理和特徵條件獨立性假設。樸素貝葉斯具有悠久的歷史,其算法邏輯比較簡單,有健壯的性能,通常可以用於文本分類、信用評估等方面。
1、樸素貝葉斯
1.1 貝葉斯公式
給定一個樣本,我們用 X 表示樣本的特徵,用 Y 表示樣本的類別,我們首先可以計算出 X 和 Y 的聯合概率 P(X,Y):
從聯合概率 P(X,Y) 可以推導出則貝葉斯公式:
其中 P(Y) 稱為先驗概率,P(Y|X) 稱為後驗概率。
對於二分類問題,若 P(Y = 0|X) > P(Y = 1|X),則判斷樣本 X 的類標為 Y = 0。因為對於任意 X,P(X) 是固定的,則我們只需要比較 P(X|Y = 0)P(Y = 0) 與 P(X|Y = 1)P(Y = 1) 的大小即可以知道 X 屬於哪一個類。
P(Y = 0) 與 P(Y = 1) 可以用下面的公式計算,其中 D 表示整個數據集,D0 表示屬於第 0 類的所有數據,D1 表示屬於第 1 類的所有數據:
而 P(X|Y = 0) 和 P(X|Y = 1) 一般不容易進行計算,因此樸素貝葉斯採用了條件獨立性假設,使 P(X|Y) 更容易計算,而且也具有比較好的魯棒性。
1.2 條件獨立性假設
假定特徵 X 有 N 維,X = [X1, X2, ..., XN],則貝葉斯公式可以表示為
而 P(X|Y = 0) 和 P(X|Y = 1) 可以表示為:
樸素貝葉斯採用條件獨立性假設計算上面的公式,條件獨立性假設是指,樣本 X 的特徵之間出現與否是互相獨立的。
而 P(Xi = x|Y = y) 的概率對於不同的數據和任務有不同方式計算,常見的有:
D(Xi=x,Y=y) 表示數據集中類標等於 y 且第 i 個屬性值為 x 的所有數據,|D| 表示求數據集 D 裡面數據個數。通過上面的方法,我們就可以計算出 P(Y) 和 P(X|Y),然後用於對比 P(Y|X) 的大小,從而找出樣本所屬的類。
2、樸素貝葉斯優化技巧
2.1 取對數相加代替概率相乘
在條件獨立性假設裡,我們將 P(X|Y) 轉換成了對於每一位特徵的概率相乘。由於概率是小於 1 的數,多次相乘後的數可能會很小,另外乘法的運算時間相對也長一點,因此通常採用取對數,然後相加的方式。
計算對數的時間花銷也是比較大的,因此通常會事先計算出大量概率值 P 對應的 log P 並保存下來,在後續計算時從保存的表中直接讀取 log P 的值。
2.2 轉為特徵權重相加
我們要比較 P(Y = 0|X) 與 P(Y = 1|X),等價於比較 log P(Y = 0|X) 和 log P(Y = 1|X),如果 log P(Y = 0|X) - log P(Y = 1|X) > 0 則 X 屬於 Y=0 的概率更大。
最終可以轉換為:
我們可以將第 i 個特徵所有選項 xi 的權重保存在 hash 表中,使用時查找,加快算法速度。
2.3 平滑處理
原始的 P(X|Y) 的計算方法為:
使用上面的公式計算概率 P(X|Y) 有可能出現概率為 0 的情況,此時後驗概率 P(Y|X) 的值就變為 0 了。因此在實際使用時,通常要進行平滑處理。
假設第 i 個特徵 Xi 有 k 種可能的取值,則可以使用下面的公式進行平滑處理。
3、文本分類
我們以垃圾郵件分類為例子,了解樸素貝葉斯在文本分類中的應用。
3.1 垃圾郵件
我們的樣本是一封郵件,則樣本的特徵 X 為郵件的內容,類標 Y 表示郵件是否是垃圾郵件。
X = 內容,如"上次的股票賺了吧,加微信獲取更多股票信息"
Y = 類別,如 "垃圾郵件"、"正常郵件"
那麼給定一封郵件 "上次的股票賺了吧,加微信獲取更多股票信息",就可以根據貝葉斯公式計算出這封郵件屬於垃圾郵件的概率。
3.2 分詞以及去掉停用詞
直接在數據集上統計 P("上次的股票賺了吧,加微信獲取更多股票信息"|"垃圾郵件") 是不實際的,因為每封郵件的內容都不一樣,下次郵件內容換成 "上次的股票賺了吧,加QQ獲取更多股票信息",則得到的概率為 0。
因此通常需要進行分詞處理以及去掉停用詞,停用詞指一些對於我們分類沒有幫助的詞,通常是一些非常中性的詞,如 "了"、"我"。
分詞:"上次", "的", "股票", "賺了", "吧", "加", "微信", "獲取", "更多", "股票", "信息"
去掉停用詞:"上次", "股票", "賺了", "微信", "獲取", "更多"、"股票", "信息"
則最終 P("上次的股票賺了吧,加微信獲取更多股票信息"|"垃圾郵件")可以轉換為
根據條件獨立性假設,最終變為:
經過上述的步驟,我們可以計算出 P(Y="垃圾郵件"|X) 和 P(Y="正常郵件"|X) 的概率,最終判斷郵件 X 是不是垃圾郵件。
4、總結
樸素貝葉斯是一種比較簡單的算法,具有不錯的魯棒性。
樸素貝葉斯主要使用了貝葉斯公式和條件獨立性假設。
樸素貝葉斯文本分類器實際上是詞袋模型,也就是把文本看成是一個包含很多單詞的袋子,與文本單詞順序無關。因此句子 "我喜歡聽張學友唱歌" 和 "張學友喜歡聽我唱歌" 在樸素貝葉斯看來是沒有區別的。
參考文獻
李航《統計學習方法》