我正在實現一個樸素貝葉斯垃圾郵件檢測器,其功能是單詞,我不確定是否理解正確的算法。使用樸素貝葉斯檢測垃圾郵件
這我如何我想實現的算法:
在訓練集我算從文本的特定詞的頻率存在於垃圾郵件文本,以及它存在於nonspam文本。我還會存儲在培訓期間檢查的垃圾郵件和非垃圾郵件的總數。
現在訓練完成後,假設我有一個新的文本T
,我想分類。
予先假設爲垃圾郵件(S)和nonspam(N)的現有probabilites爲:
P(S) = 0.5
P(N) = 0.5
現在我檢查哪些被包含在T
每一個字W
假設一個字W
存在垃圾郵件文本爲20次,非垃圾郵件文本爲2次。垃圾郵件的檢查的總數爲50和非垃圾郵件的檢查的總數是50,以及,所以我有後probabilites:
P(W|S) = 20/50
P(W|N) = 2/50
計算的probabilites隨後將被
P(S|W) = P(W|S) * P(S) = 0.2
P(N|W) = P(W|N) * P(N) = 0.02
從這個算法會將文本分類爲垃圾郵件。
什麼我有麻煩理解的是以下情況:
假設我們有一個Word W
這是一個垃圾郵件的文本出現0次,但1次在非垃圾郵件的文本。在這種情況下,垃圾郵件的後驗概率將爲
P(W|S) = O/50 = 0
並且因此整個概率也將爲0。
因此,這意味着每當一個文本中出現一個從未在垃圾郵件文本中找到但在非垃圾郵件文本中找到的文本時,算法會將該文本分類爲非垃圾郵件,而不管其他任何其他詞事先概率。
這使我困惑,讓我覺得我還沒有正確理解算法。