贝叶斯公式的理解及应用(垃圾邮件过滤)

转载自:
全概公式和贝叶斯公式的理解
贝叶斯推断及其互联网应用(二):过滤垃圾邮件
理解贝叶斯公式之前先理解条件概率和全概公式。

条件概率


理解这个可以从两个角度来看。
第一个角度:在B发生的基础上,A发生的概率。那么B发生这件事已经是个基础的条件了,现在进入B已经发生的世界,看看A发生的概率是多少。那么分子就是B发生A也发生,分母就是B这个世界发生的概率了。分母如果是1,那么成了什么意思呢?

另一个角度是看韦恩图。这里A在B发生的基础上发生的概率是A和B交集的阴影部分面积占用B的比例。

那么由条件概率出发,看一下变形出来的乘法公式:
P(AB)=P(A)⋅P(B|A)=P(B)⋅P(A|B)
也可以提供上面的两个角度来理解这个公式,虽然可以由上面的直接推导,但是我们认为这是问题的思考的不同角度,不仅仅是公式之间的运算。

一:AB同时发生的概率是在A基础上发生B的概率乘以A本身在外部发生的概率,也是B基础上发生A的概率乘以B本身在外部发生的概率.
二:AB表示的是阴影部分的面积占用A或者B的比例关系。

仅仅从形式上说,竖线后面的要在前面多乘以一个以达到平衡。

全概率

一个别人举的例子:
一个村子与三个小偷,小偷偷村子的事件两两互斥,求村子被偷的概率。

解释:假设这三个小偷编号为A1,A2,A2;
偷东西的事件标记为B,不偷的话标记为:B¯¯¯

那么被偷的概率就是:要么是A1,要么是A2,要么是A3,
如果是A1, 概率是什么呢?首先得是A1,其次是村子被偷,也即是两个事件都满足,所以是P(A1B)
同理,可以得到P(A2B),P(A3B)

又因这三个小偷两两互斥,表示不会同时去偷。所以被偷的概率是:

P(B)=P(A1B)+P(A2B)+P(A3B)

当然按照条件概率或者乘法公式展开:
P(B)=P(A1)P(B|A1)+P(A2)P(B|A2)+P(A3)P(B|A3) (*)

PS: P(Ai),P(B|Ai)是已知的

问:是不是有想展开为:

P(B)=P(B)P(A1|B)+P(B)P(A1|B)+P(B)P(A1|B)的冲动?

当然这个式子是没错的,但是体现不了这个问题的解法:分阶段。

(*)式子体现的是问题分为两个阶段:
1)选人,分割问题
2)计算分割的子问题的条件概率

对应的这里来便是:
1)选小偷,谁去偷
2)选定的小偷作为条件,那么他去偷的条件概率是什么

所以将问题拆解为阶段的问题便是全概率公式针对的问题。

贝叶斯公式

贝叶斯公式有意思极了,简单说就是逆全概公式。

前面是问总体看来被偷的概率是多少,现在是知道了总体被偷了这件事,概率并不知道,问你个更有意思的问题,像是侦探断案:是哪个小偷的偷的,计算每个小偷偷的概率。

这个特性用在机器学习,人工智能领域相当好用。

也就是求:P(Ai|B)=P(AiB)P(B)

Ai:小偷i干的;B:村子被偷了

首先是一个淳朴的条件概率的展开。
分母里出现了P(B),刚刚讨论的全概公式拿来用一用!
而P(AiB)=P(Ai)⋅P(B|Ai)

对应到上面的例子就鲜活一些:村子被偷了,求Ai偷的概率。

自然现在条件是P(B),分子变形为P(AiB)=P(Ai)⋅P(B|Ai),是因为假定就是Ai偷的,这是一个已知的概率。
分母P(B)=∑ni=1P(Ai)P(B|Ai)

除了上面的思路外,通常需要注意的是分阶段意味着时间的先后。在先进行的事件的基础上进行后面的事件,就很容易计算概率:P(AB)=P(A)P(B|A)这种。

所以当我们需要计算先验概率,即先发生的时间的概率时,总是想着用上面的这个类型来计算,且是通过条件概率进行过渡。

贝叶斯应用:垃圾邮件过滤

什么是贝叶斯过滤器?

垃圾邮件是一种令人头痛的顽症,困扰着所有的互联网用户。

正确识别垃圾邮件的技术难度非常大。传统的垃圾邮件过滤方法,主要有”关键词法”和”校验码法”等。前者的过滤依据是特定的词语;后者则是计算邮件文本的校验码,再与已知的垃圾邮件进行对比。它们的识别效果都不理想,而且很容易规避。

2002年,Paul Graham提出使用”贝叶斯推断”过滤垃圾邮件。他说,这样做的效果,好得不可思议。1000封垃圾邮件可以过滤掉995封,且没有一个误判。

另外,这种过滤器还具有自我学习的功能,会根据新收到的邮件,不断调整。收到的垃圾邮件越多,它的准确率就越高。

建立历史资料库

贝叶斯过滤器是一种统计学过滤器,建立在已有的统计结果之上。所以,我们必须预先提供两组已经识别好的邮件,一组是正常邮件,另一组是垃圾邮件。

我们用这两组邮件,对过滤器进行”训练”。这两组邮件的规模越大,训练效果就越好。Paul Graham使用的邮件规模,是正常邮件和垃圾邮件各4000封。

“训练”过程很简单。首先,解析所有邮件,提取每一个词。然后,计算每个词语在正常邮件和垃圾邮件中的出现频率。比如,我们假定”sex”这个词,在4000封垃圾邮件中,有200封包含这个词,那么它的出现频率就是5%;而在4000封正常邮件中,只有2封包含这个词,那么出现频率就是0.05%。(【注释】如果某个词只出现在垃圾邮件中,Paul Graham就假定,它在正常邮件的出现频率是1%,反之亦然。这样做是为了避免概率为0。随着邮件数量的增加,计算结果会自动调整。)

有了这个初步的统计结果,过滤器就可以投入使用了。

贝叶斯过滤器的使用过程

现在,我们收到了一封新邮件。在未经统计分析之前,我们假定它是垃圾邮件的概率为50%。(【注释】有研究表明,用户收到的电子邮件中,80%是垃圾邮件。但是,这里仍然假定垃圾邮件的”先验概率”为50%。)

我们用S表示垃圾邮件(spam),H表示正常邮件(healthy)。因此,P(S)和P(H)的先验概率,都是50%。

然后,对这封邮件进行解析,发现其中包含了sex这个词,请问这封邮件属于垃圾邮件的概率有多高?

我们用W表示”sex”这个词,那么问题就变成了如何计算P(S|W)的值,即在某个词语(W)已经存在的条件下,垃圾邮件(S)的概率有多大。

根据条件概率公式,马上可以写出


公式中,P(W|S)和P(W|H)的含义是,这个词语在垃圾邮件和正常邮件中,分别出现的概率。这两个值可以从历史资料库中得到,对sex这个词来说,上文假定它们分别等于5%和0.05%。另外,P(S)和P(H)的值,前面说过都等于50%。所以,马上可以计算P(S|W)的值:

因此,这封新邮件是垃圾邮件的概率等于99%。这说明,sex这个词的推断能力很强,将50%的”先验概率”一下子提高到了99%的”后验概率”。

联合概率的计算

做完上面一步,请问我们能否得出结论,这封新邮件就是垃圾邮件?

回答是不能。因为一封邮件包含很多词语,一些词语(比如sex)说这是垃圾邮件,另一些说这不是。你怎么知道以哪个词为准?

Paul Graham的做法是,选出这封信中P(S|W)最高的15个词,计算它们的联合概率。(【注释】如果有的词是第一次出现,无法计算P(S|W),Paul Graham就假定这个值等于0.4。因为垃圾邮件用的往往都是某些固定的词语,所以如果你从来没见过某个词,它多半是一个正常的词。)

所谓联合概率,就是指在多个事件发生的情况下,另一个事件发生概率有多大。比如,已知W1和W2是两个不同的词语,它们都出现在某封电子邮件之中,那么这封邮件是垃圾邮件的概率,就是联合概率。

在已知W1和W2的情况下,无非就是两种结果:垃圾邮件(事件E1)或正常邮件(事件E2)。

事件w1w2垃圾邮件
E1出现出现是的
E2出现出现是的

其中,W1、W2和垃圾邮件的概率分别如下:
其中,W1、W2和垃圾邮件的概率分别如下:


如果假定所有事件都是独立事件(【注释】严格地说,这个假定不成立,但是这里可以忽略),那么就可以计算P(E1)和P(E2):


又由于在W1和W2已经发生的情况下,垃圾邮件的概率等于下面的式子:



将P(S)等于0.5代入,得到

将P(S|W1)记为P1,P(S|W2)记为P2,公式就变成

这就是联合概率的计算公式。如果你不是很理解,点击这里查看更多的解释。

最终的计算公式

将上面的公式扩展到15个词的情况,就得到了最终的概率计算公式:

一封邮件是不是垃圾邮件,就用这个式子进行计算。这时我们还需要一个用于比较的门槛值。Paul Graham的门槛值是0.9,概率大于0.9,表示15个词联合认定,这封邮件有90%以上的可能属于垃圾邮件;概率小于0.9,就表示是正常邮件。有了这个公式以后,一封正常的信件即使出现sex这个词,也不会被认定为垃圾邮件了。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值