朴素贝叶斯分类算法

為{幸葍}努か 提交于 2019-12-01 22:41:37
贝叶斯定理是关于随机事件A和B的条件概率的一则定理(比如常见的:P(A|B)是在B发生的情况下A发生的可能性)。朴素的含义是各特征相互独立,且同等重要。某些分类算法均以贝叶斯定理为基础。由此产生了朴素贝叶斯分类算法
 
朴素贝叶斯分类算法的思想基础是:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
 
分类算法的主要任务是构造分类器。评价分类器的质量可以从这个视角考虑下:首先要定义,分类器的正确率指分类器正确分类的项目占所有被分类项目的比率。通常使用回归测试来评估分类器的准确率,最简单的方法是用构造完成的分类器对训练数据进行分类,然后根据结果给出正确率评估。但这不是一个好方法,因为使用训练数据作为检测数据有可能因为过分拟合而导致结果过于乐观,所以一种更好的方法是在构造初期将训练数据一分为二,用一部分构造分类器,然后用另一部分检测分类器的准确率
 
拉普拉斯平滑对于改善朴素贝叶斯分类器的分类效果有着积极的作用。拉普拉斯平滑:为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,所以加法平滑也叫做拉普拉斯平滑。假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。
 
 
示例1

  • 计算先验概率和类条件概率

  • 计算后验概率

因为P(是|X)>P(否|X),由此可见,对于样本X,朴素贝叶斯分类预测该顾客会购买汽车。

 

示例2

      对于社区来说,不真实账号(使用虚假身份或用户的小号)是一个普遍存在的问题,作为社区的运营商,希望可以检测出这些不真实账号,从而在一些运营分析报告中避免这些账号的干扰,亦可以加强对社区的了解与监管。

     如果通过纯人工检测,需要耗费大量的人力,效率也十分低下,如能引入自动检测机制,必将大大提升工作效率。这个问题说白了,就是要将社区中所有账号在真实账号和不真实账号两个类别上进行分类,下面我们一步一步实现这个过程。

     首先设C=0表示真实账号,C=1表示不真实账号。

      1、确定特征属性及划分

     这一步要找出可以帮助我们区分真实账号与不真实账号的特征属性,在实际应用中,特征属性的数量是很多的,划分也会比较细致,但这里为了简单起见,我们用少量的特征属性以及较粗的划分,并对数据做了修改。

     我们选择三个特征属性:a1:日志数量/注册天数,a2:好友数量/注册天数,a3:是否使用真实头像。在社区中这三项都是可以直接从数据库里得到或计算出来的。

     下面给出划分:a1:{a<=0.05, 0.05=0.2},a1:{a<=0.1, 0.1=0.8},a3:{a=0(不是),a=1(是)}。

      2、获取训练样本

     这里使用运维人员曾经人工检测过的1万个账号作为训练样本。

      3、计算训练样本中每个类别的频率

     用训练样本中真实账号和不真实账号数量分别除以一万,得到:

      

      

      4、计算每个类别条件下各个特征属性划分的频率

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      5、使用分类器进行鉴别

     下面我们使用上面训练得到的分类器鉴别一个账号,这个账号使用非真实头像,日志数量与注册天数的比率为0.1,好友数与注册天数的比率为0.2。

      

      

     可以看到,虽然这个用户没有使用真实头像,但是通过分类器的鉴别,更倾向于将此账号归入真实账号类别。这个例子也展示了当特征属性充分多时,朴素贝叶斯分类对个别属性的抗干扰性。

 

系统学习参考

以下三篇文章由浅入深,由朴素贝叶斯分类算法的入门、概貌到具体编码层层递进:
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!