Discrete Mathematics and Its applications - 离散数学及其应用 读书笔记 ( 二 )

《 Discrete 》书中关于 Bayesian Spam Filter 的应用, 中文可以翻译为 “基于贝叶斯理论的垃圾邮件过滤器”

先是一个简单的例子,基于单个单词的删选词,原文有个例子:

Suppose that we have found that the word “Rolex” occurs in 250 of 2000 messages known to be spam and in 5 of 1000 messages known not to be spam. Estimate the probability that an incoming message containing the work “Rolex” is spam, assuming that it is equally likely that an incoming message is spam or not spam. If our threshold for rejecting a message as spam is 0.9, will we reject such messages?

大意就是,已知: “ Rolex ” 这个单词在已经标为 spam 的 2000 封邮件中, 总共出现了 250 次; 在标为不是 spam 的 1000 封邮件中, 共出现了 5 次。 假设一封邮件是不是 spam 邮件是平等来看待的,也就是 各占 12 的概率,那么如果有一封邮件中出现了 Rolex 这个单词, 这封邮件是 spam 的概率是多少? 如果我们设定超过 0.9 的概率就要拒收,那么我们对这类邮件是不是要拒收?

思路是这样的:
1) 假设 S 是邮件是 Spam 的事件, 那么 S¯ 就代表不是 spam 的事件;
2) 假设 E 是邮件里出现 Rolex 的事件, 那么 E¯ 就代表不出现 Rolex 的事件;
3) Rolex 在整个 2000 封已经被标为 spam 的邮件中共出现概率是 p(w)=nB(w)/|B| , 在整个 1000 封已经被标为不是 spam 邮件中共出现的概率是 q(w)=nG(w)/|G| ; B 代表是 spam 邮件的集合总体, G 代表是非 spam 邮件的集合总体;
4) 假设一封邮件既有可能是 spam , 也有可能不是 spam, 各占 50% 的概率
5) 为了方便解释, 只设置一个单词来判定是不是 spam.

目的是求解: P( S|E)

P(S|E)=P(SE)P(E)=P(ES)P(E)=P(E|S)P(S)P(E|S)P(S)+P(E|S¯)P(S¯)=P(E|S)0.5P(E|S)0.5+P(E|S¯)0.5=P(E|S)P(E|S)+P(E|S¯)=25020002502000+510000.962

所以求解公式最终也可以演化为:

P(S|E)=r(w)=p(w)p(w)+q(w)

当然只用一个单词来判断邮件是不是 spam 未免有失偏颇,下面推到有两个单词来判定结果:

P(S|E1E2)=P(S(E1E2))P(E1E2)=P(E1E2|S)P(S)P(E1E2|S)P(S)+P(E1E2|S¯)P(S¯)=P(E1EU2|S)P(E1E2)|S)+P(E1E2|S¯)=p(w1)p(w2)q(w1)q(w2)+p(w1)p(w2)

由此可以推导出多个单词来判断 spam 的公式:

p(S|i=1kEi)=ki=1p(Ei|S)ki=1p(Ei|S)+ki=1p(Ei|S¯)

用 spam 邮件和非 spam 邮件出现的词频来计算这个公式:

r(w1,w2..wk)=ki=1p(wi)ki=1p(wi)+ki=1q(wi)

你可能感兴趣的:(过滤器,SPAM)