一. 貝葉斯過濾算法的基本步驟
1) 收集大量的垃圾郵件和非垃圾郵件,建立垃圾郵件集和非垃圾郵件集。
2) 提取郵件主題和郵件體中的獨立字串例如 ABC32,¥234等作為TOKEN串并統(tǒng)計提取出的TOKEN串出現的次數即字頻。按照上述的方法分別處理垃圾郵件集和非垃圾郵件集中的所有郵件。
3) 每一個郵件集對應一個哈希表,hashtable_good對應非垃圾郵件集而hashtable_bad對應垃圾郵件集。表中存儲TOKEN串到字頻的映射關系。
4) 計算每個哈希表中TOKEN串出現的概率P=(某TOKEN串的字頻)/(對應哈希表的長度)
5) 綜合考慮hashtable_good和hashtable_bad,推斷出當新來的郵件中出現某個TOKEN串時,該新郵件為垃圾郵件的概率。數學表達式為:
A事件----郵件為垃圾郵件;
t1,t2 …….tn代表TOKEN串
則P(A|ti)表示在郵件中出現TOKEN串ti時,該郵件為垃圾郵件的概率。
設
P1(ti)=(ti在hashtable_good中的值)
P2(ti)=(ti在hashtable_ bad中的值)
則 P(A|ti)= P1(ti)/[(P1(ti)+ P2(ti)];
6) 建立新的哈希表 hashtable_probability存儲TOKEN串ti到P(A|ti)的映射
7) 至此,垃圾郵件集和非垃圾郵件集的學習過程結束。根據建立的哈希表 hashtable_probability可以估計一封新到的郵件為垃圾郵件的可能性。
當新到一封郵件時,按照步驟2)生成TOKEN串。查詢hashtable_probability得到該TOKEN 串的鍵值。
假設由該郵件共得到N個TOKEN串,t1,t2…….tn, hashtable_probability中對應的值為P1,P2,。。。。。。PN,
P(A|t1 ,t2, t3……tn)表示在郵件中同時出現多個TOKEN串t1,t2…….tn時,該郵件為垃圾郵件的概率。
由復合概率公式可得
P(A|t1 ,t2, t3……tn)=(P1*P2*。。。。PN)/[P1*P2*。。。。。PN+(1-P1)*(1-P2)*。。。(1-PN)]
當P(A|t1 ,t2, t3……tn)超過預定閾值時,就可以判斷郵件為垃圾郵件。
二. 貝葉斯過濾算法舉例
例如:一封含有“法 輪 功”字樣的垃圾郵件 A
和 一封含有“法律”字樣的非垃圾郵件B
根據郵件A生成hashtable_ bad,該哈希表中的記錄為
法:1次
輪:1次
功:1次
計算得在本表中:
法出現的概率為0。3
輪出現的概率為0。3
功出現的概率為0。3
根據郵件B生成hashtable_good,該哈希表中的記錄為:
法:1
律:1
計算得在本表中:
法出現的概率為0。5
律出現的概率為0。5
綜合考慮兩個哈希表,共有四個TOKEN串: 法 輪 功 律
當郵件中出現“法”時,該郵件為垃圾郵件的概率為:
P=0。3/(0。3+0。5)=0。375
出現“輪”時:
P=0。3/(0。3+0)=1
出現“功“時:
P=0。3/(0。3+0)=1
出現“律”時
P=0/(0+0。5)=0;
由此可得第三個哈希表:hashtable_probability 其數據為:
法:0。375
輪:1
功:1
律:0
當新到一封含有“功律”的郵件時,我們可得到兩個TOKEN串,功 律
查詢哈希表hashtable_probability可得
P(垃圾郵件| 功)=1
P (垃圾郵件|律)=0
此時該郵件為垃圾郵件的可能性為:
P=(0*1)/[0*1+(1-0)*(1-1)]=0
由此可推出該郵件為非垃圾郵件