(二)贝叶斯和朴素贝叶斯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hao5335156/article/details/82709447

1、贝叶斯公式

P ( Y | X ) = P ( X | Y ) P ( Y ) P ( X )

P ( Y , X ) = P ( Y | X ) P ( X ) = P ( X | Y ) P ( Y ) 推导而来,其中 P(Y) 叫做 先验概率, P(Y|X) 叫做 后验概率, P(Y,X) 叫做 联合概率。一般『先验概率』、『后验概率』是相对出现的,比如 P(Y) 与 P(Y|X) 是关于 Y 的先验概率与后验概率, P(X) 与 P(X|Y) 是关于 X 的先验概率与后验概率。

2、机器学习形式的贝叶斯公式

X 理解成“具有某特征”, Y 理解成“类别标签”。在最简单的二分类问题下,我们将 Y 理解成“属于某类”的标签。于是贝叶斯公式就变形成了下面的样子:

P ( | ) = P ( | ) P ( ) P ( )

解释如下:
P ( | ) =

P ( | ) =

P ( ) =

P ( ) = ( )

而我们二分类问题的最终目的就是要判断 P(“属于某类”|“具有某特征”) 是否大于1/2就够了。 贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”的概率,而后者获取方法就简单多了,我们只需要找到一些包含已知特征标签的样本,即可进行训练。而样本的类别标签都是明确的,所以贝叶斯方法在机器学习里属于有监督学习方法。

4、实例:垃圾邮件识别

(1)问题

目标是判断 P(“垃圾邮件”|“具有某特征”) 是否大于1/2。现在假设我们有垃圾邮件和正常邮件各1万封作为训练集。需要判断以下这个邮件是否属于垃圾邮件:“我司可办理正规发票(保真)17%增值税发票点数优惠!”

(2)分析

也就是判断概率 P(“垃圾邮件”|“我司可办理正规发票(保真)17%增值税发票点数优惠!”) 是否大于1/2。即统计出所有垃圾邮件和正常邮件中出现这句话的次数。

P ( | 17 % ) = +

(3)问题转化求解

句子“我司可办理正规发票,17%增值税发票点数优惠!”可以变成(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”))。因此贝叶斯公式就变成了:

P ( | 17 % ) = P ( , , , , , , , , , ) | " " P ( ) P ( , , , , , , , , , ) )

P ( | , , , , , , , , , ) = P ( , , , , , , , , , ) | " " P ( ) P ( , , , , , , , , , ) )

5、条件独立假设(朴素贝叶斯的引入)

概率 P((“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”)|”垃圾邮件”) 依旧不够好求,我们引进一个很朴素的近似。为了让公式显得更加紧凑,我们令字母S表示“垃圾邮件”,令字母H表示“正常邮件”。近似公式如下:

P ( ( , , , , , , , , , ) | S ) ) = P ( | S ) × P ( | S ) × P ( | S ) × P ( | S ) × P ( | S ) × P ( | S ) × P ( | S ) × P ( | S ) × P ( | S ) × P ( | S )

以上是 条件独立假设;将条件独立假设代入上面两个相反事件的贝叶斯公式,有
C = P ( | S ) P ( | S ) P ( | S ) P ( | S ) P ( | S ) × P ( | S ) P ( | S ) P ( | S ) P ( | S ) P ( | S ) P ( )

C ¯ = P ( | H ) P ( | H ) P ( | H ) P ( | H ) P ( | H ) × P ( | H ) P ( | H ) P ( | H ) P ( | H ) P ( | H ) P ( )

这样,只需要分别统计各类邮件中该关键词出现的概率就可以了,比如
P ( | S =

统计次数非常方便,而且样本数量足够大,算出来的概率比较接近真实。于是垃圾邮件识别的问题就可解了

6、朴素贝叶斯(Naive Bayes)

加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes)。在朴素贝叶斯眼里,“我司可办理正规发票”与“正规发票可办理我司”完全相同。朴素贝叶斯失去了词语之间的顺序信息。这就相当于把所有的词汇扔进到一个袋子里随便搅和,贝叶斯都认为它们一样。因此这种情况也称作词袋子模型(bag of words)。

7、处理重复词语的三种方式

前面介绍的垃圾邮件向量(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”),其中每个词都不重复。而这在现实中其实很少见。因为如果文本长度增加,或者分词方法改变,必然会有许多词重复出现,因此需要对这种情况进行进一步探讨。比如以下这段邮件:“代开发票。增值税发票,正规发票。” 分词后为向量: (“代开”,“发票”,“增值税”,“发票”,“正规”,“发票”)其中“发票”重复了三次。

(1)多项式模型

(计算句子概率)重复的词语我们视为其出现多次

P ( , , , , , ) | S = P ( | S ) P ( | S ) P ( | S ) P ( | S ) P ( | S ) P ( | S = P ( | S ) P 3 ( | S ) P ( | S ) P ( | S )

注意这一项: P 3 ( | S

(统计计算词语的概率)在统计计算P(“发票”|S)时,每个被统计的垃圾邮件样本中重复的词语也统计多次。

P ( | S =

(2)伯努利模型

计算句子概率,统计计算词语的概率,将重复的词语都视为其只出现1次

(3)混合模型

在计算句子概率时,不考虑重复词语出现的次数,但是在统计计算词语的概率P(“词语”|S)时,却考虑重复词语的出现次数,这样的模型可以叫作混合模型。

8、平滑技术

防止分母为0
对于伯努利模型,P(“正规发票”|S)的一种平滑算法是:

P ( | S = + 1 + 2

对于多项式模型,P(“正规发票”| S)的一种平滑算法是:
P ( | S = + 1 +

小结

朴素贝叶斯进行文本分类的思路过程:基本思路是先区分好训练集与测试集,对文本集合进行分词、去除标点符号等特征预处理的操作,然后使用条件独立假设,将原概率转换成词概率乘积,再进行后续的处理。

+ =

基于对重复词语在训练阶段与判断(测试)阶段的三种不同处理方式,我们相应的有伯努利模型、多项式模型和混合模型。在训练阶段,如果样本集合太小导致某些词语并未出现,我们可以采用平滑技术对其概率给一个估计值。而且并不是所有的词语都需要统计,我们可以按相应的“停用词”和“关键词”对模型进行进一步简化,提高训练和判断速度。

补充:实际工程的tricks

(1)取对数

几万个数相乘起来还是非常花时间的。把这些乘法变成加法则方便得多。可以利用数学中的对数函数log就可以实现这样的功能。两边同时取对数。

(2)转换为权重

对于二分类,我们还可以继续提高判断的速度。既然要比较 l o g C l o g C ¯ 的大小,那就可以直接将上下两式相减,并继续化简:

l o g C C ¯ = l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( | H ) + l o g P ( | S ) P ( )

l o g C C ¯ 如果大于0则属于垃圾邮件。我们可以把其中每一项作为其对应词语的权重,比如 l o g P ( | S ) P ( | H ) 就可以作为词语“发票”的权重,权重越大就越说明“发票”更可能是与“垃圾邮件”相关的特征。这样可以根据权重的大小来评估和筛选显著的特征,比如关键词。而这些权重值可以直接提前计算好而存在hash表中 。判断的时候直接将权重求和即可。

(3)选取topk的关键词

前文说过可以通过提前选取关键词来提高判断的速度。有一种方法可以省略提前选取关键词的步骤,就是直接选取一段文本中权重最高的K个词语,将其权重进行加和。

参考
七月在线

猜你喜欢

转载自blog.csdn.net/hao5335156/article/details/82709447