有關貝葉斯原理的講解, 請查看這里。這里講述的是通過貝葉斯推斷如何過濾垃圾郵件。
貝葉斯推斷及其互聯網應用

(接上文)
七、什么是貝葉斯過濾器?
垃圾郵件是一種令人頭痛的頑症,困擾着所有的互聯網用戶。
正確識別垃圾郵件的技術難度非常大。傳統的垃圾郵件過濾方法,主要有“關鍵詞法”和“校驗碼法”等。前者的過濾依據是特定的詞語;后者則是計算郵件文本的效驗碼,再與已知的垃圾郵件進行對比。它們的識別效果都不理想,而且很容易規避。
2002年,Paul Graham提出使用“貝葉斯推斷”過濾垃圾郵件。他說,這樣做的效果,好得不可思議。1000封垃圾郵件可以過濾掉995封,且沒有一個誤判。
另外,這種過濾器還具有自我學習的功能,會根據新收到的郵件,不斷調整。收到的垃圾郵件越多,它的准確率越高。
八、建立歷史資料庫
貝葉斯過濾器是一種統計學過濾器,建立在已有的統計結果之上。所以,我們必須預先提供兩組已經識別好的郵件,一組是正常郵件,另一組是垃圾郵件。
我們用這兩組郵件,對過濾器進行“訓練”。這兩組郵件的規模越大,訓練效果就越好。Paul Graham使用的郵件規模,是正常郵件和垃圾郵件各4000封。
“訓練”過程很簡單。首先,解析所有的郵件,提取每一個詞。然后,計算每個詞語在正常郵件和垃圾郵件中出現的頻率。比如,我們假定“sex”這個詞,在4000封垃圾郵件中,有200封包含這個詞,那么它的出現頻率就是5%;而在4000封正常郵件中,只有2封包含這個詞,那么出現頻率就是0.05%。(【注釋】如果某個詞 只出現 在垃圾郵件中,Paul Graham就假定,它在正常郵件的出現頻率是1%(經驗值,可以根據新收的郵件不斷調整),反之亦然。這樣做是為了避免概率為0。隨着郵件數量的增多,計算結果會自動調整。)
有了這個初步的統計結果,過濾器就可以投入使用了。
九、貝葉斯過濾器的使用過程
現在,我們收到了一封信郵件。在未統計分析之前, 我們假定它是垃圾郵件的概率為50%。(【注釋】有研究表明,用戶收到的電子郵件中,80%是垃圾郵件。但是,這里仍然假定垃圾郵件的“先驗概率”為50%。)
我們用S表示垃圾郵件(spam),H表示正常郵件(healthy)。因此,P(S)和P(H)的先驗概率,均為50%。
![]()
然后,對這封郵件進行解析,發現其中包含了sex這個詞,請問這封郵件屬於垃圾郵件的概率有多高?
我們用W表示“sex”這個詞,那么問題就變成了如何計算P(S|W)的值,即在某個詞語(W)已經存在的情況下,垃圾郵件(S)的概率有多大。
根據條件概率公式,馬上可以寫出:

因此,這封新郵件是垃圾郵件的概率等於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 = P(E1)/(P(E1)+P(E2))?有如下解釋】
在上面已經說明了,E1是在W1和W2同時出現的情況下垃圾郵件的事件,E2是W1和W2同時出現的情況下正常郵件的事件,注意這里的前提都是“在W1和W2同時出現的情況下”。
那么,P = P(E1)/(P(E1)+P(E2)),其意思是W1和W2共同出現的情況下是垃圾郵件的概率,而P(W1,W2)實際上就是P(E1)+P(E2),所以P = P(E1)/(P(E1)+P(E2))。
【解釋完畢】
即

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

這就是聯合概率的計算公式。如果你不是很理解,點擊這里查看更多的解釋。
【感覺推導跳過了幾步:來自於評論】
P(S|W1 W2) = P(W1 W2|S)P(S)/( P(W1 W2| S)P(S) + P(W1 W2|~S)P(~S) )
W1,W2獨立:P(W1 W2) = P(W1)P(W2),P(W1 W2|S) = P(W1|S)P(W2|S) (?)
上式=P(W1|S)P(W2|S)P(S) / (P(W1|S)P(W2|S)P(S) + P(W1|~S)P(W2|~S)P(~S))
應用貝葉斯原理,將P(Wi|S)用P(S|Wi)表示:
上式 = (P(S|W1)P(S|W2)P(S) * P(W1)P(W2) / P(S)^2) / ((P(S|W1)P(S|W2)P(S) * P(W1)P(W2) / P(S)^2) + (P(~S|W1)P(~S|W2)P(~S) * P(W1)P(W2) / P(~S)^2))
在P(S) = P(~S) = 0.5的條件下:
上式 = P(S|W1)P(S|W2) / (P(S|W1)P(S|W2) + P(~S|W1)P(~S|W2))
= P1P2 / (P1P2 + (1-P1)(1-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
感謝作者。
