1

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

在这种方法中,您必须计算

替代文字

P(S|W) -> 消息是垃圾邮件的概率,给定单词 W 出现在其中。

P(W|S) -> 单词 W 出现在垃圾邮件中的概率。

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

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

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

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

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

顺便说一下,我指的是http://en.wikipedia.org/wiki/Bayesian_spam_filtering的信息。

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


重复出现单词“W”不应该增加邮件的垃圾邮件分数吗?在你的方法中它不会,对吧?

假设我们有 100 条训练消息,其中 50 条是垃圾邮件,50 条是非垃圾邮件。并说每条消息的 word_count = 100。

比方说,在垃圾邮件中,单词 W 在每条消息中出现 5 次,而单词 W 在 Ham 消息中出现 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)对吧?

4

3 回答 3

5

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

于 2010-05-13T15:54:48.017 回答
2

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

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

在此处输入图像描述

whereC是一个类(在这个例子中是火腿或垃圾邮件)x,箭头是一个属性向量(在最简单的情况下是单词)。 P(C)只是C整个数据集中类消息的比例。P(x)是具有由向量描述的属性的消息出现的概率x,但是由于该参数对于所有类都是相同的,因此我们暂时可以省略它。但是这个问题是关于的,在给定当前消息的P(x|C)向量的情况下应该如何计算它?x

实际上,答案取决于具体类型的 NB 算法。其中有几个,包括多元伯努利 NB多元高斯 NB、具有数字和布尔属性的多项式 NB等。有关计算它们中的每一个的详细信息以及针对垃圾邮件过滤任务的 NB 分类器的比较,请参见本文P(x|C)

于 2012-02-23T19:51:37.007 回答
1

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

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

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

在这种情况下,您是对的:P(W|S) 是“单词 W 在垃圾邮件中出现(至少一次)的概率”。 并且要估计(比“计算”更好)它,您可以计算,正如另一个答案所说,“(包含至少一个单词 V 的垃圾邮件数量)/(所有垃圾邮件的数量)”

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

于 2010-05-13T16:02:07.677 回答