一. 貝葉斯過(guò)濾算法的基本步驟
1) 收集大量的垃圾郵件和非垃圾郵件,建立垃圾郵件集和非垃圾郵件集。
2) 提取郵件主題和郵件體中的獨(dú)立字串例如 ABC32,¥234等作為TOKEN串并統(tǒng)計(jì)提取出的TOKEN串出現(xiàn)的次數(shù)即字頻。按照上述的方法分別處理垃圾郵件集和非垃圾郵件集中的所有郵件。
3) 每一個(gè)郵件集對(duì)應(yīng)一個(gè)哈希表,hashtable_good對(duì)應(yīng)非垃圾郵件集而hashtable_bad對(duì)應(yīng)垃圾郵件集。表中存儲(chǔ)TOKEN串到字頻的映射關(guān)系。
4) 計(jì)算每個(gè)哈希表中TOKEN串出現(xiàn)的概率P=(某TOKEN串的字頻)/(對(duì)應(yīng)哈希表的長(zhǎng)度)
5) 綜合考慮hashtable_good和hashtable_bad,推斷出當(dāng)新來(lái)的郵件中出現(xiàn)某個(gè)TOKEN串時(shí),該新郵件為垃圾郵件的概率。數(shù)學(xué)表達(dá)式為:
A事件----郵件為垃圾郵件;
t1,t2 …….tn代表TOKEN串
則P(A|ti)表示在郵件中出現(xiàn)TOKEN串ti時(shí),該郵件為垃圾郵件的概率。
設(shè)
P1(ti)=(ti在hashtable_good中的值)
P2(ti)=(ti在hashtable_ bad中的值)
則 P(A|ti)= P1(ti)/[(P1(ti)+ P2(ti)];
6) 建立新的哈希表 hashtable_probability存儲(chǔ)TOKEN串ti到P(A|ti)的映射
7) 至此,垃圾郵件集和非垃圾郵件集的學(xué)習(xí)過(guò)程結(jié)束。根據(jù)建立的哈希表 hashtable_probability可以估計(jì)一封新到的郵件為垃圾郵件的可能性。
當(dāng)新到一封郵件時(shí),按照步驟2)生成TOKEN串。查詢hashtable_probability得到該TOKEN 串的鍵值。
假設(shè)由該郵件共得到N個(gè)TOKEN串,t1,t2…….tn, hashtable_probability中對(duì)應(yīng)的值為P1,P2,。。。。。。PN,
P(A|t1 ,t2, t3……tn)表示在郵件中同時(shí)出現(xiàn)多個(gè)TOKEN串t1,t2…….tn時(shí),該郵件為垃圾郵件的概率。
由復(fù)合概率公式可得
P(A|t1 ,t2, t3……tn)=(P1*P2*。。。。PN)/[P1*P2*。。。。。PN+(1-P1)*(1-P2)*。。。(1-PN)]
當(dāng)P(A|t1 ,t2, t3……tn)超過(guò)預(yù)定閾值時(shí),就可以判斷郵件為垃圾郵件。
二. 貝葉斯過(guò)濾算法舉例
例如:一封含有“法 輪 功”字樣的垃圾郵件 A
和 一封含有“法律”字樣的非垃圾郵件B
根據(jù)郵件A生成hashtable_ bad,該哈希表中的記錄為
法:1次
輪:1次
功:1次
計(jì)算得在本表中:
法出現(xiàn)的概率為0。3
輪出現(xiàn)的概率為0。3
功出現(xiàn)的概率為0。3
根據(jù)郵件B生成hashtable_good,該哈希表中的記錄為:
法:1
律:1
計(jì)算得在本表中:
法出現(xiàn)的概率為0。5
律出現(xiàn)的概率為0。5
綜合考慮兩個(gè)哈希表,共有四個(gè)TOKEN串: 法 輪 功 律
當(dāng)郵件中出現(xiàn)“法”時(shí),該郵件為垃圾郵件的概率為:
P=0。3/(0。3+0。5)=0。375
出現(xiàn)“輪”時(shí):
P=0。3/(0。3+0)=1
出現(xiàn)“功“時(shí):
P=0。3/(0。3+0)=1
出現(xiàn)“律”時(shí)
P=0/(0+0。5)=0;
由此可得第三個(gè)哈希表:hashtable_probability 其數(shù)據(jù)為:
法:0。375
輪:1
功:1
律:0
當(dāng)新到一封含有“功律”的郵件時(shí),我們可得到兩個(gè)TOKEN串,功 律
查詢哈希表hashtable_probability可得
P(垃圾郵件| 功)=1
P (垃圾郵件|律)=0
此時(shí)該郵件為垃圾郵件的可能性為:
P=(0*1)/[0*1+(1-0)*(1-1)]=0
由此可推出該郵件為非垃圾郵件
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
|
||