我正在为垃圾邮件过滤实施朴素贝叶斯分类器。我对某些计算有疑问。请澄清我该怎么做。这是我的问题。
在此方法中,您必须计算
P(S | W) - >消息是垃圾邮件的概率,其中包含W字。
P(W | S) - >字W在垃圾邮件中出现的可能性。
P(W | H) - >单词W出现在Ham消息中的概率。
因此要计算P(W | S),以下哪项是正确的:
(垃圾邮件中出现W的次数)/(所有邮件中出现W的总次数)
(垃圾邮件中出现W字的次数)/(垃圾邮件中的字总数)
那么,要计算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)
对吧?
答案 0 :(得分:5)
P(W|S)
=(包含W的垃圾邮件数量)/(所有垃圾邮件数量)
答案 1 :(得分:2)
虽然这是一个很老的问题,但没有一个答案是完整的,所以值得纠正它们。
朴素贝叶斯不是单一算法,而是基于相同贝叶斯规则的算法族:
其中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)...... 更复杂,需要更多样品,更好(希望)性能。