【发布时间】:2016-05-07 09:56:23
【问题描述】:
我正在实现一个朴素贝叶斯垃圾邮件检测器,它的特征是单词,我不确定我是否正确理解了算法。
这是我尝试实现算法的方式:
在训练集中,我计算文本中的特定单词出现在垃圾邮件文本中的频率,以及它出现在非垃圾邮件文本中的频率。我还存储了训练期间检查的垃圾邮件和非垃圾邮件的总量。
现在训练完成后假设我有一个新文本T,我想对其进行分类。
我首先假设垃圾邮件 (S) 和非垃圾邮件 (N) 的先验概率为:
P(S) = 0.5
P(N) = 0.5
现在我检查包含在T 中的每个单词W
假设一个词 W 在垃圾邮件文本中出现 20 次,在非垃圾邮件文本中出现 2 次。检查的垃圾邮件总数是 50,检查的非垃圾邮件总数也是 50,所以我有后验概率:
P(W|S) = 20 / 50
P(W|N) = 2 / 50
计算出来的概率是
P(S|W) = P(W|S) * P(S) = 0.2
P(N|W) = P(W|N) * P(N) = 0.02
由此算法会将文本分类为垃圾邮件。
我无法理解的是以下情况:
假设我们有一个单词W,它在垃圾邮件文本中出现了 0 次,但在非垃圾邮件文本中出现了 1 次。在这种情况下,垃圾邮件的后验概率是
P(W|S) = O / 50 = 0
因此整个概率也将为 0。
因此,这意味着每当文本中出现从未在垃圾邮件文本中找到但在非垃圾邮件文本中找到的单词时,算法会将文本分类为非垃圾邮件,而不管任何其他单词和之前的概率。
这让我感到困惑,让我觉得我还没有正确理解算法。
【问题讨论】:
标签: algorithm probability bayesian email-spam naivebayes