朴素贝叶斯算法

条件概率(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示

贝叶斯定理(Bayes' theorem)

            P(B|A) * P(A)
P(A|B) =   --------------
                P(B)


贝叶斯分类器(Naive Bayes classifier)

朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器。  

在20世纪60年代初就以另外一个名称引入到文本信息检索界中,是文本分类的一种热门(基准)方法,文本分类是以词频为特征判断文件所属类别或其他(如垃圾邮件、合法性、体育或政治等等)的问题。

通过适当的预处理,它可以与这个领域更先进的方法,它在自动医疗诊断中也有应用


病人分类例子

     症状  职业   疾病

  打喷嚏 护士   感冒
  打喷嚏 农夫   过敏
  头痛  建筑工人 脑震荡
  头痛  建筑工人 感冒
  打喷嚏 教师   感冒
  头痛  教师   脑震荡

现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大

根据贝叶斯定理可以得出

P( 感冒 / (打喷嚏 x 建筑工人) ) = P( (打喷嚏x建筑工人) / 感冒 ) x P(感冒) / P( 打喷嚏x建筑工人 )

假设他们之间特征是独立的,那么 P( (打喷嚏x建筑工人) = P(打喷嚏) x P(建筑工人)

得出 P( 感冒 / (打喷嚏 x 建筑工人) )  = P(打喷嚏/感冒) x P(建筑工人/感冒) x P(感冒) / ( P( 打喷嚏) x P(建筑工人) )

P(感冒) = 1/2
P(建筑工人) = 1/3
P(打喷嚏) = 1/2

P(打喷嚏/感冒) = 2/3
P(建筑工人/感冒) = 1/3

= 2/3 * 1/3 * 1/2 / (1/2 * 1/3) = 2/3


朴素贝叶斯分类实例:检测SNS社区中不真实账号

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

1.确定特征属性及划分

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

我们选择三个特征属性:a1:日志数量/注册天数,a2:好友数量/注册天数,a3:是否使用真实头像。

在SNS社区中这三项都是可以直接从数据库里得到或计算出来的。 下面给出划分:a1:{a<=0.05   0.05<a<0.2    a>=0.2},a2:{a<=0.1    0.1<a<0.8    a>=0.8},a3:{a=0(不是),a=1(是)}。

2.获取训练样本

这里使用运维人员曾经人工检测过的1万个账号作为训练样本(这部分只能人工检测)

3.计算训练样本中真实账号和不真实账号的概率

P(C=0) = 0.89
P(C=1) = 0.11

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

P(a1 <= 0.05/C=0) = 0.3
P(0.05<a1<0.2/C=0) = 0.5
P(a1>0.2/C=0) = 0.2
P(a1<=0.05/C=1) = 0.8
P(0.05<a1<0.2/C=1) = 0.1
P(a1>0.2/C=1) = 0.1
P(a2<=0.1/C=0) = 0.1
P(0.1<a2<0.8/C=0) = 0.7
P(a2>0.8/C=0) = 0.2
P(a2<=0.1/C=1) = 0.7
P(0.1<a2<0.8/C=1) = 0.2
P(a2>0.2/C=1) = 0.1
P(a3=0/C=0) = 0.2
P(a3=1/C=0) = 0.8
P(a3=0/C=1) = 0.9
P(a3=1/C=1) = 0.1

5.使用分类器进行鉴别

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

计算为真实账号的概率

P(C=0) * P(0.05<a1<0.2/C=0) * P(0.1<a2<0.8/C=0) * P(a3=0/C=0) / ( P(0.05<a1<0.2) * P(0.1<a2<0.8) * P(a3=0) )
= 0.0623(0.89*0.5*0.7*0.2) /( P(0.05<a1<0.2) * P(0.1<a2<0.8) * P(a3=0) )

计算为不真实账号的概率

P(C=1) * P(0.05<a1<0.2/C=1) * P(0.1<a2<0.8/C=1) * P(a3=0/C=1) / ( P(0.05<a1<0.2) * P(0.1<a2<0.8) * P(a3=0) )
= 0.00198(0.11*0.1*0.2*0.9) /( P(0.05<a1<0.2) * P(0.1<a2<0.8) * P(a3=0) )

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


参考:

算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

朴素贝叶斯分类器的应用

上一篇: 哈希算法
下一篇: 推荐算法-向量
作者邮箱: 203328517@qq.com