vlambda博客
学习文章列表

实例讲解:基于贝叶斯分类的垃圾邮件识别

采用贝叶斯理论进行垃圾邮件过滤是一种应用于电子邮件过滤的统计学技术。它实质是使用贝叶斯分类来对邮件的属性进行判别,这个属性包括:垃圾邮件和非垃圾邮件。


贝叶斯分类的运作是借着使用标记(一般是字词,有时候是其他)与垃圾邮件、非垃圾邮件的关联,然后搭配贝叶斯推断来计算一封邮件属于垃圾邮件的可能性。基于贝叶斯的垃圾邮件过滤是非常有效的技术,可以修改模型以符合特殊使用者的需要,并且给予较低的垃圾邮件侦测率,让使用者可接受。


利用朴素贝叶斯进行文本分类,已经有很多年的历史,例如下表所示的邮件列表中,给定邮件训练数据集合,并已知训练集中文档分类的类型,类型包括垃圾邮件非垃圾邮件

邮件编号

邮件特征内容(即关键词)

邮件识别类型

创新  厚积薄发

非垃圾邮件

创新 广告  发票

垃圾邮件

财务 利润

非垃圾邮件

创新 预算  减少

非垃圾邮件

基于上表示例,现需要利用贝叶斯定理,判定每个词语属于非垃圾邮件和垃圾邮件的概率。即给定邮件特征内容W=(创新,厚积薄发,广告,发票,预算,财务,利润,减少)C=(垃圾邮件,非垃圾邮件),从人为主观角度似乎可以判定含有创新广告的邮件属于垃圾邮件,但是对于概率论模型,需要通过计算、量化值得出准确的概率值,两者的区别在于定性和定量的角度。


根据伯努利模型原理,定义:

其中T是表示训练集合的邮件总数,这里T=4T(Cj)表示分类Cj出现的邮件数量。


其中,G(wi|cj)表示在分类cj下拥有单词wi的文档数量,G(cj)表示分类cj下拥有的文档数。C非垃圾邮件3个文档,c垃圾邮件1个文档,文档总数T=4,因此非垃圾邮件占有概率P(c非垃圾邮件)与垃圾邮件P(c垃圾邮件)占有概率分别如下:

P(c非垃圾邮件)=3/4=0.75

P(c垃圾邮件)=1/4=0.25

各个词汇在垃圾邮件和非垃圾邮件分类下的概率计算如下。

首先针对非垃圾邮件:

P(w创新|c非垃圾邮件)=2/3≈0.67

P(w厚积薄发|c非垃圾邮件)=1/3≈0.33

P(w利润|c非垃圾邮件)= 1/3≈0.33

P(w预算|c非垃圾邮件)= 1/3≈0.33

P(w财务|c非垃圾邮件)= 1/3≈0.33

P(w减少|c非垃圾邮件)=1/3≈0.33

其次是垃圾邮件:

P(w创新|c垃圾邮件)= 1/1=1.0

P(w广告|c垃圾邮件)=1/1=1.0

P(w发票|c垃圾邮件)= 1/1=1.0

每一个词的出现概率:

P(w创新)=3/4=0.75

P(w预算)=1/4=0.25

P(w财务)=1/4=0.25

P(w厚积薄发)=1/4=0.25

P(w利润)=1/4=0.25

P(w广告)=1/4=0.25

P(w发票)=1/4=0.25

P(w减少)=1/4=0.25


由上面概率可以推理出各个词汇属于垃圾邮件或者非垃圾邮件的概率,根据贝叶斯公式可计算如下:

P(c非垃圾邮件|w创新)=0.67*0.75/0.75=0.67

P(c非垃圾邮件|w厚积薄发)=0.33*0.75/0.25=0.99

P(c非垃圾邮件|w预算)=0.33*0.75/0.5=0.99

P(c非垃圾邮件|w财务)=0.33*0.75/0.5=0.99

P(c非垃圾邮件|w利润)=0.33*0.75/0.25=0.99

P(c非垃圾邮件|w减少)=0.33*0.75/0.25=0.99

P(c垃圾邮件|w创新)=1*0.25/0.75≈0.33

P(c垃圾邮件|w广告)=1*0.25/0.25=1.0

P(c垃圾邮件|w发票)=1*0.25/0.25=1.0


上面计算过程,是通过语料库的离线训练得到的概率数值模型,每一个词语对应的分类向量集合,且在每个分类中的权重。从性能角度而言,分类的性能消耗要做得足够小,尤其在给海量大数据进行分类时,对性能要求更高。


因此,当计算完每一个词可能属于的分类类别之后,对于后面任意给定的判定样本而言,只需要将各个词语一起的联合概率求出即可,例如针对内容为创新预算广告的邮件,判定其属于垃圾邮件和非垃圾邮件的概率如下:

P非垃圾邮件= P(c非垃圾邮件|w创新)* P(c非垃圾邮件|w预算)=0.67*1.05=0.7035

P垃圾邮件= P(c垃圾邮件|w创新)* P(c垃圾邮件|w广告)=0.33*1=0.33


显然P非垃圾邮件大于P垃圾邮件,且0.7035/(0.7035+0.33)=0.68。结论当邮件内容为创新 预算 广告68%的可能性是属于非垃圾邮件,仅有32%的可能性属于垃圾邮件类型。


值得注意的是,在本例中给定的训练数据相对较少,尤其是特征项,在实际中除了训练数据会较大之外,特征项也相对会较多,不会进行简单的概率计算,实际流程还会复杂,例如在某邮件中选取30个词语作为特征之后,不仅仅会简单讲词语的出现作为特征,还会有特征在该邮件中的权重,即词语在文本中的权值,可以通过TF-IDF或者TextRank计算得出,最后在计算概率时,将所有词语与权值作为特征向量进行计算。


朴素贝叶斯分类器作为一种基于概率模型的分类算法,不仅简单易于理解,而且实现起来相对也比较容易,可以达到较好的效果。很多实践表明,一些机器学习算法的工程师曾经尝试图更复杂的算法模型来得到更好的结果,但是到最后发现用简单的方法仍可取得同样甚至更好的结果。朴素贝叶斯在大量数据集上的测试结果不逊于甚至优于一些更复杂的分类方法,因此在机器学习算法中,我们可以尽量优先尝试简单的方法,然后发现简单方法的不足,在不断完善。