CS229学习笔记之朴素贝叶斯

朴素贝叶斯算法

在高斯判别分析中,特征向量是连续的、实数值向量。现在我们要谈谈一个不同的生成学习算法,其中x是离散的向量。

让我们以识别垃圾邮件为例,这类问题被称为文本分类问题。

假设我们有一个训练集(已经标记好了是否为垃圾邮件的邮件集合),我们首先需要构建表示一封邮件的特征向量。

我们通过如下方式表示特征向量:其长度为词表的长度(词表为所有可能出现的词的集合,一般通过训练集生成),如果这封邮件包含了第 i 个词, xi=1 ,否则 xi=0 。下图为一个简单的例子:

选择好特征向量后,我们需要来构建生成模型,但考虑到x是一个高维向量,因此如果直接对 p(xy) 建模,那么会得到一个参数向量的维数极高的多项分布,使计算过于复杂。

因此,我们需要做一个强力的假设,假设给定 y 时, 每一个 xi 是条件独立的。这个假设被称为朴素贝叶斯假设,其引出的算法被称为朴素贝叶斯分类器。(注意是条件独立而不是独立,即仅在给定 y 的情况下独立)

现在我们有(以50000维度为例):

p(x1,,x50000y)=p(x1y)p(x2y,x1)p(x3y,x1,x2)p(x50000y,x1,,x49999)=p(x1y)p(x2y)p(x3y)p(x50000y)=i=1np(x(i)y)

第一个等式来自于概率的基本性质,第二个等式则使用了朴素贝叶斯假设。即使这个假设在现实中不一定成立,但其实际的效果还是不错的。

模型包含了以下三个参数:

ϕi|y=1ϕi|y=0ϕy=p(xi=1y=1)=p(xi=1y=0)=p(y=1)

和之前一样,给定一个训练集 {(x(i),y(i));i=1,,m} ,我们可以写出如下的联合似然函数(具体的形式参见生成学习算法):

(ϕy,ϕi|y=0,ϕi|y=1)=i=1mp(x(i),y(i))

对这个联合似然函数进行最大似然分析,得到的参数值如下:
ϕj|y=1ϕj|y=0ϕy=mi=11{x(i)j=1y(i)=1}mi=11{y(i)=1}=mi=11{x(i)j=1y(i)=0}mi=11{y(i)=0}=mi=11{y(i)=1}m

这些结果的得出是很自然的,从概率的角度也可以很好地解释。

得到了这些参数之后,为了对一个新的输入x进行预测,我们可以计算:

p(y=1x)=p(xy=1)p(y=1)p(x)=(ni=1p(xiy=1))p(y=1)(ni=1p(xiy=1))p(y=1)+(ni=1p(xiy=0))p(y=0)

然后选择具有更高后验概率的类作为输出。(这里的n指字典的维数,需要先把x转换为统一长度的向量)

在之前的例子中,输入的每一维特征都是是二元的,其对应的分布是伯努利分布,而当特征是多元时,其对应的分布应该用多项式分布建模。

这里写图片描述

实际上,即便一些原始的输入数据是连续值,我们可以通过一个映射表将连续值映射为离散值,然后运用朴素贝叶斯方法进行建模。当原始,连续值的数据不能很好的用多元正态分布进行建模时,将其离散化再使用朴素贝叶斯建模往往会取得更好的效果。

拉普拉斯平滑

之前描述的朴素贝叶斯算法有很多的应用,但是其当前的形式仍存在一个问题,让我们讨论一下如何解决这个问题。

在垃圾邮件分类问题中,如果词典中存在一个词,而这个词在训练集中从未出现过时,其最大似然分析得出的参数 ϕ35000|y 将会是

ϕ35000|y=1ϕ35000|y=0=mi=11{x(i)35000=1y(i)=1}mi=11{y(i)=1}=0=mi=11{x(i)35000=1y(i)=0}mi=11{y(i)=0}=0

因此,当我们尝试去预测含有该词的邮件是否为垃圾邮件时,后验概率的计算结果将变为:

p(y=1x)=(ni=1p(xiy=1))p(y=1)(ni=1p(xiy=1))p(y=1)+(ni=1p(xiy=0))p(y=0)=00

这会导致我们无法进行预测。更一般的来看,如果你在有限的训练集上没有看到过某个事件,就认为其发生的概率为0,这在统计学上是不合理的。

现在假设我们要分析一个多项式随机变量 z 的均值,取值为 {1,,k} ,我们可以分析 ϕi=p(z=i) ,给定一个独立的观察集 {z(1),,z(m)} ,最大似然估计的结果为:

ϕj=mi=11{z(i)=j}m

如果我们用这个公式来进行最大似然估计,那么有一些 ϕi 的值可能为0(如果未在观察集中出现),为了避免这个问题,我们可以使用拉普拉斯平滑,其形式为:

ϕj=mi=11{z(i)=j}+1m+k

分子加1,分母加k,这样可以保证 mj=1ϕj=1 (概率之和为1),同时保证了对所有的取值, ϕj0 ,从而解决了之前的问题。实验证明,在大部分情况下,拉普拉斯平滑可以给出一个最优的估计。

对于朴素贝叶斯分类器,使用拉普拉斯平滑,可以得到如下公式:

ϕj|y=1ϕj|y=0=mi=11{x(i)j=1y(i)=1}+1mi=11{y(i)=1}+2=mi=11{x(i)j=1y(i)=0}+1mi=11{y(i)=0}+2

因为x的取值有两种,所以分子加1,分母加2。

(在实际中,一般不需要对 ϕy 进行拉普拉斯平滑。)

文本分类的事件模型

让我们再探讨一个专门用于文本分类的模型来结束生成学习算法。虽然朴素贝叶斯对许多分类问题有很好的效果,但是对于文本分类,还有存在着一个效果更棒的相关模型。

在文本分类领域,之前我们使用的朴素贝叶斯模型被称为多元伯努利事件模型。现在我们将使用一个不同的模型,叫作多项式事件模型

我们将使用与之前不同的方式来表示一封邮件。令 xi 表示邮件中的第i个词语,则其取值范围为 {1,,|V|} |V| 是词表(词典)的大小。 一封含有 n 个词语的邮件现在将被表示为一个长度为 n 的向量 (x+1,x2,,xn) ,注意 n 会随邮件的不同而变化。

该模型的参数为:

ϕi|y=1ϕi|y=0ϕy=p(xj=iy=1)=p(xj=iy=0)=p(y)

注意:我们假设 p(xjy) 对所有的 j (邮件中词语的位置)都是一样的。

如果给定一个训练集 {(x(i),y(i));i=1,,m}wherex(i)=(x(i)1,x(i)2,,x(i)ni),这里 ni 表示第 i 个训练样本的词数,那么数据的似然函数可以表示为:

(ϕy,ϕi|y=0,ϕi|y=1)=i=1mp(x(i),y(i))=i=1mj=1nip(x(i)jy;ϕi|y=0,ϕi|y=1)p(y(i);ϕy)

最大似然估计得出的结果如下:

ϕk|y=1ϕk|y=0ϕy=mi=1nij=11{x(i)j=ky(i)=1}mi=11{y(i)=1}ni=mi=1nij=11{x(i)j=ky(i)=0}mi=11{y(i)=0}ni=mi=11{y(i)=1}m

可以看到,里在考虑字典中索引为k的词时,会把在每个文本中出现的次数相加,所以该模型相比于之前的模型,不仅仅考虑是否出现,还考虑了出现的次数。

如果有要应用拉普拉斯平滑,可以在分子加1,分母加 |V| ,得到:

ϕk|y=1ϕk|y=0=mi=1nij=11{x(i)j=ky(i)=1}+1mi=11{y(i)=1}ni+|V|=mi=1nij=11{x(i)j=ky(i)=0}+1mi=11{y(i)=0}ni+|V|

虽然朴素贝叶斯不是最好的分类算法,但因为其易于实现,所以非常适合作为你的第一个尝试。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值