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

1、贝叶斯公式

P(Y|X)=P(X|Y)P(Y)P(X) 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 , 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(|)= P ( “ 属 于 某 类 ” | “ 具 有 某 特 征 ” ) = 在 已 知 某 样 本 “ 具 有 某 特 征 ” 的 条 件 下 , 该 样 本 “ 属 于 某 类 ” 的 概 率 。 所 以 叫 做 『 后 验 概 率 』

P(|)= P ( “ 具 有 某 特 征 ” | “ 属 于 某 类 ” ) = 在 已 知 某 样 本 “ 属 于 某 类 ” 的 条 件 下 , 该 样 本 “ 具 有 某 特 征 ” 的 概 率 。

P()= P ( “ 属 于 某 类 ” ) = ( 在 未 知 某 样 本 具 有 该 “ 具 有 某 特 征 ” 的 条 件 下 , ) 该 样 本 “ 属 于 某 类 ” 的 概 率 。 所 以 叫 做 『 先 验 概 率 』 。

P()=() P ( “ 具 有 某 特 征 ” ) = ( 在 未 知 某 样 本 “ 属 于 某 类 ” 的 条 件 下 , ) 该 样 本 “ 具 有 某 特 征 ” 的 概 率 。

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

4、实例:垃圾邮件识别

(1)问题

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

(2)分析

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

P(|17%)=+ P ( “ 垃 圾 邮 件 ” | “ 我 司 可 办 理 正 规 发 票 ( 保 真 ) 17 % 增 值 税 发 票 点 数 优 惠 ! ” ) = 垃 圾 邮 件 中 出 现 这 句 话 的 次 数 垃 圾 邮 件 中 出 现 这 句 话 的 次 数 + 正 常 邮 件 中 出 现 这 句 话 的 次 数

(3)问题转化求解

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

P(|17%)=P(,,,,,,,,,)|""P()P(,,,,,,,,,)) P ( “ 垃 圾 邮 件 ” | “ 我 司 可 办 理 正 规 发 票 ( 保 真 ) 17 % 增 值 税 发 票 点 数 优 惠 ! ” ) = P ( ( “ 我 ” , “ 司 ” , “ 可 ” , “ 办 理 ” , “ 正 规 发 票 ” , “ 保 真 ” , “ 增 值 税 ” , “ 发 票 ” , “ 点 数 ” , “ 优 惠 ” ) | " 垃 圾 邮 件 " ) P ( “ 垃 圾 邮 件 ” ) P ( ( “ 我 ” , “ 司 ” , “ 可 ” , “ 办 理 ” , “ 正 规 发 票 ” , “ 保 真 ” , “ 增 值 税 ” , “ 发 票 ” , “ 点 数 ” , “ 优 惠 ” ) )

P(|,,,,,,,,,)=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) 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 ( “ 我 ” | 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() C ¯ = P ( “ 我 ” | H ) P ( “ 司 ” | H ) P ( “ 可 ” | H ) P ( “ 办 理 ” | H ) P ( “ 正 规 发 票 ” | H ) × P ( “ 保 真 ” | H ) P ( “ 增 值 税 ” | H ) P ( “ 发 票 ” | H ) P ( “ 点 数 ” | H ) P ( “ 优 惠 ” | H ) P ( “ 正 常 邮 件 ” )

这样,只需要分别统计各类邮件中该关键词出现的概率就可以了,比如
P(|S= 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)P3(|S)P(|S)P(|S) P ( ( “ 代 开 ” , “ 发 票 ” , “ 增 值 税 ” , “ 发 票 ” , “ 正 规 ” , “ 发 票 ” ) | S ) = P ( “ 代 开 ” ” | S ) P ( “ 发 票 ” | S ) P ( “ 增 值 税 ” | S ) P ( “ 发 票 ” | S ) P ( “ 正 规 ” | S ) P ( “ 发 票 ” | S ) = P ( “ 代 开 ” ” | S ) P 3 ( “ 发 票 ” | S ) P ( “ 增 值 税 ” | S ) P ( “ 正 规 ” | S )

注意这一项: P3(|S P 3 ( “ 发 票 ” | S )

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

P(|S= P ( “ 发 票 ” | S ) = 每 封 垃 圾 邮 件 中 出 现 “ 发 票 ” 的 次 数 的 总 和 每 封 垃 圾 邮 件 中 所 有 词 出 现 次 数 ( 计 算 重 复 次 数 ) 的 总 和

(2)伯努利模型

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

(3)混合模型

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

8、平滑技术

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

P(|S=+1+2 P ( “ 正 规 发 票 ” | S ) = 出 现 “ 正 规 发 票 ” 的 垃 圾 邮 件 的 封 数 + 1 每 封 垃 圾 邮 件 中 所 有 词 出 现 次 数 ( 出 现 了 只 计 算 一 次 ) 的 总 和 + 2

对于多项式模型,P(“正规发票”| S)的一种平滑算法是:
P(|S=+1+ P ( “ 发 票 ” | S ) = 每 封 垃 圾 邮 件 中 出 现 “ 发 票 ” 的 次 数 的 总 和 + 1 每 封 垃 圾 邮 件 中 所 有 词 出 现 次 数 ( 计 算 重 复 次 数 ) 的 总 和 + 被 统 计 的 词 表 的 词 语 数 量

小结

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

+= 贝 叶 斯 公 式 + 条 件 独 立 假 设 = 朴 素 贝 叶 斯 方 法

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

补充:实际工程的tricks

(1)取对数

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

(2)转换为权重

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

logCC¯¯¯¯=logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P(|H)+logP(|S)P() 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 ( “ 正 常 邮 件 ” )

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

(3)选取topk的关键词

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

参考
七月在线

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值