基于机器学习朴素贝叶斯算法完成经典的垃圾邮件分类任务

dbhllnr 2018-12-11

正向概率和逆向概率

正向概率:假设袋子里面有N个红色球,有M个黑色球,现在我们伸手一摸,此时你摸出黑色球的概率是多少?

逆向概率:事先我们并不知道袋子里面黑色球和红色球的比例,而是闭着眼睛摸出一个球(或者好几个球),观察这些取出来球的颜色之后,那么我们可以就对袋子里面的是黑红球的比例做出推测。

基于机器学习朴素贝叶斯算法完成经典的垃圾邮件分类任务

黑球和红球问题

这就是正向概率和逆向概率的不同,那么为什么要使用朴素贝叶斯呢?因为我们现实的世界本身就是不确定的,我们往往看到的是一个问题的结果,就像逆向的概率一样,所以我们可以通过结果对原因进行猜测,这就是逆向概率的问题,而朴素贝叶斯就是为了解决逆向概率的问题。

朴素贝叶斯

朴素贝叶斯是贝叶斯算法的一种特例,朴素贝叶斯之所以朴素是因为引入了假设,比如:如果认为每个样本都是独立的,而正因为假设的引入,使得模型简单易理解,同时如果算法训练得当,往往能收获不错的分类效果。

基于机器学习朴素贝叶斯算法完成经典的垃圾邮件分类任务

朴素贝叶斯公式

这个公式就是贝叶斯公式,当我们想要求在特征x条件下样本C=1的概率,我们可以将问题转化为,所有C=1样本中x特征的比例,以及所有样本中类别C=1的比例,因为这两个比例都是先验经验,我们可以根据历史样本数据轻松获取,从而将一个复杂问题变成了一个简单的统计问题,这就是朴素贝叶斯的应用了。

垃圾邮件分类问题

我们先来看一下垃圾邮件的问题,给定一封邮件D判定它是否是垃圾邮件,其实D是由这封邮件的所有单词组成的。我们用h+表示垃圾邮件,使用h-来表示正常邮件 。那么当算法获取到这封邮件的时候,如何能够确定这封邮件是正常邮件还是垃圾邮件,这里我们使用朴素贝叶斯算法完成这个任务。其实问题就是求P(h+|D)以及P(h-|D)问题,哪个概率大我们就可以认为邮件是垃圾邮件还是非垃圾邮件。

基于机器学习朴素贝叶斯算法完成经典的垃圾邮件分类任务

垃圾邮件

朴素贝叶斯解决垃圾邮件分类问题

我们很难判断P(h+|D)以及P(h-|D),但此时我们可以使用朴素贝叶斯算法来对问题进行转换,具体来说我们可以将问题转换成下面这样:

基于机器学习朴素贝叶斯算法完成经典的垃圾邮件分类任务

垃圾邮件判别公式

P(h+)和p(h-)表示先验概率,这个很容易求出来,我们只需要看现有邮件训练集中有多少封邮件是垃圾邮件,有多少封邮件是正常邮件,我们求其所占比例就可以得到P(h+)和p(h-)。

D表示一封信,它是由这封信中所有单词组成的,假如这封信中由N个单词组成,d1,d2,d3…dN,这些单词就是样本的特征,所以p(D|h+)可以表示为P(d1,d2,d3…dN|h+),但因为朴素贝叶斯假设所有特征相互独立,所以将其转换为P(d1,d2,d3…dN|h+)=p(d1|h+)*p(d2|h+)*p(d3|h+)*…*p(dN|h+)。

p(di|h+)这个概率很好计算,只要统计这个单词在所有垃圾邮件中出现的频率就好了,比如:1000封垃圾邮件中总共有100000个词,di出现10000次,那么p(di|h+)=1/10,其它的以此类推,这样最终可以计算出如下所示的先验概率

基于机器学习朴素贝叶斯算法完成经典的垃圾邮件分类任务

先验概率

然后因为P(h+|D)和P(h-|D)都除以p(D),因为等比例缩小,所以P(D)不会影响P(h+|D)和P(h-|D)的大小,现在我们比较P(h+|D)和P(h-|D)大小,以此来确定D这封邮件是否是垃圾邮件。

像垃圾邮件这类的问题,我们可以通过训练样本获得大量的先验知识,所以我们可以将垃圾邮件的后验概率转变为先验概率,这样求解问题就变得简单了,这就是机器学习的朴素贝叶斯算法在垃圾邮件分类的应用。

相关推荐