朴素贝叶斯分类(垃圾邮件过滤) - 哪种计算是正确的?

时间:2010-05-13 15:38:37

标签: algorithm math statistics bayesian spam-prevention

我正在为垃圾邮件过滤实施朴素贝叶斯分类器。我对某些计算有疑问。请澄清我该怎么做。这是我的问题。

在此方法中,您必须计算

alt text

P(S | W) - >消息是垃圾邮件的概率,其中包含W字。

P(W | S) - >字W在垃圾邮件中出现的可能性。

P(W | H) - >单词W出现在Ham消息中的概率。

因此要计算P(W | S),以下哪项是正确的:

  1. (垃圾邮件中出现W的次数)/(所有邮件中出现W的总次数)

  2. (垃圾邮件中出现W字的次数)/(垃圾邮件中的字总数)

  3. 那么,要计算P(W | S),我应该做(1)还是(2)? (我认为是(2),但我不确定。)

    顺便提一句,我指的是http://en.wikipedia.org/wiki/Bayesian_spam_filtering

    我必须在本周末完成实施:(


    不应该重复出现'W'字样会增加邮件的垃圾邮件分数吗?在你的方法中它不会,对吧?。

    让我们说,我们有100条培训信息,其中50条是垃圾邮件,50条是火腿。并说每条消息的word_count = 100。

    并且让我们说,在垃圾邮件中,在每条消息中W字出现5次,而在Ham消息中出现W字1次。

    因此,所有垃圾邮件中出现的总W次数= 5 * 50 = 250次。

    所有Ham消息中出现W的总次数= 1 * 50 = 50次。

    所有训练信息中W的总出现次数=(250 + 50)= 300次。

    那么,在这种情况下,你如何计算P(W | S)和P(W | H)?

    当然我们应该期待,P(W|S) > P(W|H)对吧?

3 个答案:

答案 0 :(得分:5)

P(W|S) =(包含W的垃圾邮件数量)/(所有垃圾邮件数量)

答案 1 :(得分:2)

虽然这是一个很老的问题,但没有一个答案是完整的,所以值得纠正它们。

朴素贝叶斯不是单一算法,而是基于相同贝叶斯规则的算法族

enter image description here

其中C是一个类(本例中为火腿或垃圾邮件),带箭头的x是属性向量(最简单的单词)。 P(C)只是整个数据集中类C的消息的一部分。 P(x)是带有vector x描述的属性的消息发生概率,但由于此参数对于所有类都相同,我们暂时可以省略它。但是这个问题是关于P(x|C),如果给出当前消息的向量x,应该如何计算呢?

实际上,答案取决于NB算法的具体类型。其中有几个,包括多变量Bernoulli NB 多变量高斯NB 多项NB 具有数字和布尔属性和别的。有关为每个计算P(x|C)的详细信息以及针对垃圾邮件过滤任务的NB分类器的比较,请参阅this paper

答案 2 :(得分:1)

在这个贝叶斯公式中,W是你的“特征”,即你观察到的东西。

你必须先仔细定义什么是W.通常你有很多选择。

让我们说,在第一种方法中,你说W是事件“消息包含单词伟哥”。 (也就是说,W有两个可能的值:0 =“消息不包含单词V ...”1 =“消息至少包含该单词的出现”)。

在这种情况下,你是对的:P(W | S)是“垃圾邮件中出现字W(至少一次)的可能性。” 并且估计(优于“计算”)它,你可以计算,正如另一个答案所说,“(包含至少一个字V的垃圾邮件数量)/(所有垃圾邮件的数量)消息)“

另一种方法是:定义“W =消息中单词伟哥的发生次数”。在这种情况下,我们应该估算每个W值(P(W = 0 / S)P(W = 1 / S)P(W = 2 / S)的P(W / S)...... 更复杂,需要更多样品,更好(希望)性能。