机器学习笔记(五) 朴素贝叶斯分类器

零、写在前面

参考资料:

  • 《机器学习》周志华
  • 《机器学习实战》Peter Harrington
  • 斯坦福 CS 229 吴恩达

一、属性条件独立性假设

上篇文章中介绍的贝叶斯决策论知道,我们想做这样的事:
给出一个样本各个属性xi的值(记为向量大X),求出这个样本属于各个类别c的概率,输出这些概率中最大的那个类别。由贝叶斯定理,这概率(等号左侧)可以这样来求:

P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X )
问题的关键就在于 P(X|c) P ( X | c ) 的获得方法,在极大似然估计中,我们假设它服从某一概率分布,然后按照这个概率分布的轮廓来拟合需要的概率。而今天我们要换一种方法来估算它。

事实上,我们觊觎的这个概率是可以直接展开的:

P(X|c)=P(x1|c) P(x2|c,x1) P(x3|c,x1,x2).....P(xi|c,x1,x2,x3,......,xi1) P ( X | c ) = P ( x 1 | c )   P ( x 2 | c , x 1 )   P ( x 3 | c , x 1 , x 2 ) . . . . . P ( x i | c , x 1 , x 2 , x 3 , . . . . . . , x i − 1 )
但是对于这个 所有属性上的联合概率,等号右侧的概率是越来越难以计算的,或者说,要获得等号右侧的所有项,需要很大很大很大的数据集。但其实,形如 P(xi|c) P ( x i | c ) 的概率是很容易计算的,它代表着固定类别中,固定属性各个取值的概率。那我们就不妨强行地令:
P(X|c)=P(x1|c)P(x2|c)P(x3|c).....P(xi|c) P ( X | c ) = P ( x 1 | c ) P ( x 2 | c ) P ( x 3 | c ) . . . . . P ( x i | c )

这样就好算了。

接着,计算好了 P(X|c) P ( X | c ) ,代入 P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X ) (其余两项很容易解决),就大功告成啦。

这就是朴素贝叶斯。

好的我们现在再回过头来细致地讲述一遍。事实上,要完成刚才做的 “不妨强行地令” 这一操作是需要一个假设的,即属性条件独立性假设,也称作贝叶斯假设。这一假设说的就是:

各个属性x之间是没有相互关系的。

公式化地表达就是:

P(xi|c,x1,x2,x3,......,xi1)=P(xi|c) P ( x i | c , x 1 , x 2 , x 3 , . . . . . . , x i − 1 ) = P ( x i | c )
很好理解:条件概率中竖线 | 右侧的内容表示 “在……的条件下” , 那么,“在 c,x1,x2,x3,......,xi1 c , x 1 , x 2 , x 3 , . . . . . . , x i − 1 的条件下” 等价于 “在c的条件下”, 也就意味着这些xi之间是 不存在相互影响的关系的。

但是我们要记住,所谓不存在相互影响的关系并不准确,这只是我们为了计算方便而作的一个假设(很强的一个假设),并且这一个方法在实际应用的时候效果还不错。

有了上面的公式,我们就要想办法计算等号右侧的那个概率了。它表示的是,在给定类别c的情形,第i个属性取特定值xi的概率。即(用频率估计概率):

P(xi|c)=ixi P ( x i | c ) = 某 类 样 本 中 , 第 i 个 属 性 取 值 x i 的 个 数 这 类 样 本 总 个 数

至此我们在公式 P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X ) 中还剩下两个需要求的量了。

现在我们说P(c),它表示的是样本类别为c的概率。很自然地,它可以这样算出来:

P(c)= P ( c ) = 某 类 样 本 个 数 总 共 样 本 个 数

其实还剩下一个P(X),但是我们一会就会发现,其实这个概率并不需要计算。

好的,现在我们回到贝叶斯决策论。我们需要对于给出一个样本各个属性xi的值(记为向量大X),求出这个样本属于各个类别c的概率,输出这些概率中最大的那个类别。综合上面得到的结论,把这句话翻译成公式,则有:

outputclass=argmaxP(c|X)=argmaxP(c)P(X|c)P(X)=argmaxP(c)P(x1|c)P(x2|c)P(x3|c).....P(xi|c)P(X)=argmaxP(c)P(x1|c)P(x2|c)P(x3|c).....P(xi|c) o u t p u t c l a s s = a r g m a x P ( c | X ) = a r g m a x P ( c ) P ( X | c ) P ( X ) = a r g m a x P ( c ) P ( x 1 | c ) P ( x 2 | c ) P ( x 3 | c ) . . . . . P ( x i | c ) P ( X ) = a r g m a x P ( c ) P ( x 1 | c ) P ( x 2 | c ) P ( x 3 | c ) . . . . . P ( x i | c )

对于所有类别来说,P(X)是相同的,所以这一因子在最后一个等号去掉了。

这就是朴素贝叶斯。

将上面的各个式子放到一起:

P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X )

P(c)= 其 中 P ( c ) = 某 类 样 本 个 数 总 共 样 本 个 数

P(X|c)=P(x1|c)P(x2|c)P(x3|c).....P(xi|c) P ( X | c ) = P ( x 1 | c ) P ( x 2 | c ) P ( x 3 | c ) . . . . . P ( x i | c )

P(xi|c)=ixi P ( x i | c ) = 某 类 样 本 中 , 第 i 个 属 性 取 值 x i 的 个 数 这 类 样 本 总 个 数

二、拉普拉斯修正

我们接下来要讨论的是这两个式子的升级版:

P(c)=P(xi|c)=ixi P ( c ) = 某 类 样 本 个 数 总 共 样 本 个 数 P ( x i | c ) = 某 类 样 本 中 , 第 i 个 属 性 取 值 x i 的 个 数 这 类 样 本 总 个 数

考虑这样的情形,我们手头上的训练集将将够大,但是存在着对于某一个类别, 没有某一个属性取特定值的样本。那如果我们直接用之前的方法计算,我们会发现,在上面第二个式子中,分子为零,计算出的 P(xi|c) P ( x i | c ) 也为零。接着回溯到 P(X|c)=P(x1|c)P(x2|c)P(x3|c).....P(xi|c) P ( X | c ) = P ( x 1 | c ) P ( x 2 | c ) P ( x 3 | c ) . . . . . P ( x i | c ) ,乘数因子有一个是零,那么整个的 P(X|c) P ( X | c ) 也为零。再往前推, P(c|X)=P(c)P(X|c)P(X) P ( c | X ) = P ( c ) P ( X | c ) P ( X ) 也变成了零。

也就是说,因为一个样本的缺失,造成了这个样本所属的类不能被预测到(概率恒为零)。

我们要解决这个问题,可以用拉普拉斯修正的方法:

P(c)=+1+P(xi|c)=ixi+1+i P ( c ) = 某 类 样 本 个 数 + 1 总 共 样 本 个 数 + 总 类 别 数 P ( x i | c ) = 某 类 样 本 中 , 第 i 个 属 性 取 值 x i 的 个 数 + 1 这 类 样 本 总 个 数 + 第 i 个 属 性 的 可 能 取 值 个 数

这样,对于某一个缺失样本的类别来说,它的概率就变成了一个很小的数(这也是符合逻辑的),而非零了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值