最近跟同事学习了下用朴素贝叶斯来做一个简单的广告识别的功能,对我学习过程做了下记录
什么是朴素贝叶斯
朴素贝叶斯定理是指当事件A与事件B相互独立时P(A|B)=P(B|A)*P(A)/P(B),这个公式表示事件B发生的情况下事件A发生的概率等于事件A发生的概率乘以事件B发生的情况下事件A发生的概率再除以事件B发生的概率,此处不对公式进行推导
贝叶斯决策
假设我们有一堆朋友圈数据,存在两类朋友圈内容,一类是广告,一类是非广告,他们的比例分别为P(ad),P(nor),我们去判断一条新增的朋友圈内容是广告还是非广告。
若P(xad)>P(xnor)那么就认为新出的朋友圈内容为广告
若P(xnor)<P(xad)那么就认为新出的朋友圈内容为非广告
这就是贝叶斯决策论的核心思想,那P(xad)与P(xnor)怎么计算呢,这里就需要朴素贝叶斯定理了
实现广告识别
一条朋友圈的内容里面存在多个词,我们用X表示x1,x2,x3…xn组成的向量,P(ad|x)表示新增朋友圈内容为广告的概率,P(nor|x)表示新增朋友圈内容不是广告的概率,那么
P(nor|x)=P(x|nor)*P(nor)/P(x)
P(ad|x)=P(x|ad)*P(ad)/P(x)
若P(nor|x)>P(ad|x)则可认为新增朋友圈内容非广告,若P(nor|x)<P(ad|x)则可认为新增朋友圈内容为广告
假设每个词都是条件独立的,
P(nor|x)=P(x1|nor)*P(x2|nor)*P(x3|nor)*…*P(xn|nor)*P(nor)/[P(x1)*…P(xn)]
同理
P(ad|x)=P(x1|ad)*P(x2|ad)*P(x3|ad)*…*P(xn|ad)*P(ad)/[P(x1)*…P(xn)]
那么我们只需要对比P(x1|nor)*P(x2|nor)*P(x3|nor)*…*P(xn|nor)*P(nor)与P(x1|ad)*P(x2|ad)*P(x3|ad)*…*P(xn|ad)*P(ad)大小就可以对比出P(nor|x)与P(ad|x)的大小
P(nor)与P(ad)的值我们可以根据已有数据通过计算比例获取
P(nor)=Count(nor)/Count(all)
P(ad)=Count(ad)/Count(all)
此时,我们只需要关心P(x1|nor)…P(xn|nor)以及P(x1|ad)…P(xn|ad)的计算过程即可。
如上文所说的贝叶斯公式定理里面的描述P(x1|nor)代表的是非广告内容里面词x1出现的概率,那这个就很好计算了,我们先统计所有非广告朋友圈的总数,再统计每条非广告朋友圈内容里面出现x1的次数,再以非广告朋友圈内容总数里的x1出现的次数除以非广告朋友圈的数量即可
P(x1|nor)=Count(x1)/Count(nor)
当然文中主要讲解朴素贝叶斯定理,因此我们假设词的出现时相互独立的,事实上并不是独立的,毕竟语言博大精深