貝葉斯推斷及其互聯網應用(二)

碼頭工人 13年前發布 | 25K 次閱讀 貝葉斯

上一次,我介紹了貝葉斯推斷的原理,今天講如何將它用于垃圾郵件過濾。

========================================

貝葉斯推斷及其互聯網應用

作者:阮一峰

(接上文)

七、什么是貝葉斯過濾器?

垃圾郵件是一種令人頭痛的頑癥,困擾著所有的互聯網用戶。

正確識別垃圾郵件的技術難度非常大。傳統的垃圾郵件過濾方法,主要有"關鍵詞法"和"校驗碼法"等。前者的過濾依據是特定的詞語;后者則是計算郵件文本的校驗碼,再與已知的垃圾郵件進行對比。它們的識別效果都不理想,而且很容易規避。

2002年,Paul Graham提出使用"貝葉斯推斷"過濾垃圾郵件。他說,這樣做的效果,好得不可思議。1000封垃圾郵件可以過濾掉995封,且沒有一個誤判。

另外,這種過濾器還具有自我學習的功能,會根據新收到的郵件,不斷調整。收到的垃圾郵件越多,它的準確率就越高。

八、建立歷史資料庫

貝葉斯過濾器是一種統計學過濾器,建立在已有的統計結果之上。所以,我們必須預先提供兩組已經識別好的郵件,一組是正常郵件,另一組是垃圾郵件。

我們用這兩組郵件,對過濾器進行"訓練"。這兩組郵件的規模越大,訓練效果就越好。Paul Graham使用的郵件規模,是正常郵件和垃圾郵件各4000封。

"訓練"過程很簡單。首先,解析所有郵件,提取每一個詞。然后,計算每個詞語在正常郵件和垃圾郵件中的出現頻率。比如,我們假定"sex"這個詞,在4000封垃圾郵件中,有200封包含這個詞,那么它的出現頻率就是5%;而在4000封正常郵件中,只有2封包含這個詞,那么出現頻率就是0.05%。(【注釋】如果某個詞只出現在垃圾郵件中,Paul Graham就假定,它在正常郵件的出現頻率是1%,反之亦然。隨著郵件數量的增加,計算結果會自動調整。)

有了這個初步的統計結果,過濾器就可以投入使用了。

九、貝葉斯過濾器的使用過程

現在,我們收到了一封新郵件。在未經統計分析之前,我們假定它是垃圾郵件的概率為50%。(【注釋】有研究表明,用戶收到的電子郵件中,80%是垃圾郵件。但是,這里仍然假定垃圾郵件的"先驗概率"為50%。)

我們用S表示垃圾郵件(spam),H表示正常郵件(healthy)。因此,P(S)和P(H)的先驗概率,都是50%。

然后,對這封郵件進行解析,發現其中包含了sex這個詞,請問這封郵件屬于垃圾郵件的概率有多高?

我們用W表示"sex"這個詞,那么問題就變成了如何計算P(S|W)的值,即在某個詞語(W)已經存在的條件下,垃圾郵件(S)的概率有多大。

根據條件概率公式,馬上可以寫出

公式中,P(W|S)和P(W|H)的含義是,這個詞語在垃圾郵件和正常郵件中,分別出現的概率。這兩個值可以從歷史資料庫中得到,對sex這個詞來說,上文假定它們分別等于5%和0.05%。另外,P(S)和P(H)的值,前面說過都等于50%。所以,馬上可以計算P(S|W)的值:

因此,這封新郵件是垃圾郵件的概率等于99%。這說明,sex這個詞的推斷能力很強,將50%的"先驗概率"一下子提高到了99%的"后驗概率"。

十、聯合概率的計算

做完上面一步,請問我們能否得出結論,這封新郵件就是垃圾郵件?

回答是不能。因為一封郵件包含很多詞語,一些詞語(比如sex)說這是垃圾郵件,另一些說這不是。你怎么知道以哪個詞為準?

Paul Graham的做法是,選出這封信中P(S|W)最高的15個詞,計算它們的聯合概率。(【注釋】如果有的詞是第一次出現,無法計算P(S|W),Paul Graham就假定這個值等于0.4。因為垃圾郵件用的往往都是某些固定的詞語,所以如果你從來沒見過某個詞,它多半是一個正常的詞。)

所謂聯合概率,就是指在多個事件發生的情況下,另一個事件發生概率有多大。比如,已知W1和W2是兩個不同的詞語,它們都出現在某封電子郵件之中,那么這封郵件是垃圾郵件的概率,就是聯合概率。

在已知W1和W2的情況下,無非就是兩種結果:垃圾郵件(事件E1)或正常郵件(事件E2)。

其中,W1、W2和垃圾郵件的概率分別如下:

如果假定所有事件都是獨立事件(【注釋】嚴格地說,這個假定不成立,但是這里可以忽略),那么就可以計算P(E1)和P(E2):

又由于在W1和W2已經發生的情況下,垃圾郵件的概率等于下面的式子:

將P(S)等于0.5代入,得到

將P(S|W1)記為P1,P(S|W1)記為P2,公式就變成

這就是聯合概率的計算公式。

十一、最終的計算公式

將上面的公式擴展到15個詞的情況,就得到了最終的概率計算公式:

一封郵件是不是垃圾郵件,就用這個式子進行計算。這時我們還需要一個用于比較的門檻值。Paul Graham的門檻值是0.9,概率大于0.9,表示15個詞聯合認定,這封郵件有90%以上的可能屬于垃圾郵件;概率小于0.9,就表示是正常郵件。

有了這個公式以后,一封正常的信件即使出現sex這個詞,也不會被認定為垃圾郵件了。

(完)

原文網址:http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_two.html

 本文由用戶 碼頭工人 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!