用C++完成貝葉斯分類算法的設計與實現
1. 收集大量的垃圾郵件和非垃圾郵件,建立垃圾郵件集和非垃圾郵件集。 2. 提取郵件主題和郵件體中的獨立字符串,例如 ABC32,¥234等作為TOKEN串並統計提取出的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 ) =P2 ( 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) 超過預定閾值時,就可以判斷郵件為垃圾郵件。