机器学习笔记4——生成学习算法

目前为止,我们主要讨论了关于模型 p(y|x;θ) 的学习算法——在给出 x 的前提下关于y的条件分布。举个例子,逻辑回归中对 p(y|x;θ) 建模,得到的假设为 hθ(x)=g(θTx) ,其中 g 是S型函数。在这一小节中,我们将讨论另外一种类型的学习算法。

思考一个分类问题:基于动物的一些特征,我们想要学习把大象(y=1)和狗 (y=0) 区分开来。得到一组训练集,使用逻辑回归算法或者基础的感知算法试着找到一条直线——决策边界——来区分大象和狗。然后,对一个新来的大象/狗进行分类,这取决于新来的动物落在决策边界的哪一侧,然后根据这一点做出预测。

这里有另外一种方法。首先,观测大象,然后对大象的相关特征进行建模。其次,观测狗狗,然后再对属于狗狗的动物特征进行建模。最后,对新来的小动物进行分类,我们可以将它分别与大象和狗狗的模型进行匹配,然后比对结果判断它到底是像大象多一些还是像狗狗多一些。

这个尝试着直接学习 p(y|x) (例如逻辑回归)、或者说尝试着直接从输入 X 映射到{01}标志(例如感知算法)的算法被称作判别学习算法。这种不对 p(x|y) p(y) 进行建模的算法被称作生成学习算法

举个例子,如果 y 代表一只狗(0)或一头大象(1),那么p(x|y=0)是狗狗的特征分布模型, p(x|y=1) 是大象的特征分布模型。

在对 p(y) (叫做 类的先验)和 p(x|y) 建模后,我们的算法可以使用贝叶斯公式对后验分布进行推导:


在上图的等式中,分母 p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0) (源自概率的标准性质),因此,生成学习算法可以用 p(x|y) p(y) 表示。如果我们想要通过计算 p(y|x) 来做预测,我们实际上可以不需要计算分母,因此有:


解析: argmaxy 的含义:满足条件的最大 y
y求取最大值,与 p(x) 无关,所以可以不需要计算 p(x)

高斯判别分析

接下来我们要介绍的是第一个生成学习算法——高斯判别分析(GDA)。在这一模型中,假设 p(x|y) 符合多元正态分布。接下来简短的介绍一下多元正态分布的性质。

1.多元正态分布

多元正态分布是n维的,也被叫做多元高斯分布。该分布以均值向量 μRn 和协方差矩阵 Rn×n 为参数(此处的 >=0 是对称且半正定的[1]),也可以写作 N(μ,) ,多元正态分布的密度如下:


等式中, || 表示矩阵 的行列式。

对于随机变量为 X ,分布为 N(μ,),平均值为 μ


随机的向量变量 Z 的协方差被定义为:Cov(Z)=E[(ZE[Z])(ZE[Z])T]。这一概念也可以一般化为随机实数变量的方差。协方差也可以被定义为 Cov(Z)=(E[ZZT](E[Z])(E[Z])T) (这两个定义是相当的)。如果 XN(μ,) ,那么[2]


下面有一些关于高斯分布的密度的例子:


最左侧的图中显示了均值为0(2×1维的零向量)的高斯正态分布,协方差为2×2维的单位矩阵。该图中显示的是标准正态分布。中间的图中均值为0,协方差 =0.6I ;而最右侧的图中协方差 =2I 。从这几幅图中可以看出:协方差越大,高斯正态分布就越”摊开“来,相反的话,高斯正态分布会越”收缩“。

再来看几个例子。


以上所有图中均值都为0,协方差分别取如下的值:


最左侧的图是标准正态分布,随着我们增加协方差反对角线上的值时,整体分布的密度向45度角”挤压“。

我们可以在等高线上看的更清楚:


那么如果减小协方差反对角线上的值时,分布的密度又该如何变化呢


对应的协方差分别取以下的值,


从最左侧和中间的图中可以看到:随着减小协方差矩阵的反对角线上的值时,分度的密度再次”挤压“,但是朝着相反的方向。最后,随着我们更改参数值,等高线上的图形会渐渐成为椭圆(最右图)。

最后一组例子,让协方差等于单位矩阵保持不变,但是更改均值 μ ,也可以更改分布密度的均值。


上图中均值一一对应下面的几个值


2.高斯判别分析模型

当我们面对一个分类问题,其中输入特征 x 是连续的随机变量,此时我们可以用高斯判别分析(GDA)模型——通过多元正态分布对p(x|y)建模。这一模型为:


GDA模型分布的等式如下:


此处,模型的参数有 ϕ,,μ0,μ1 (注意:尽管此处的两个均值向量是不同的,但模型只用一个协方差矩阵)。对数似然的等式如下:


通过每个参数对似然估计 l 最大化,我们得到每个参数的最大似然估计值:


高斯判别分析的原理可以通过解析下面这幅图得到。图中显示的数据点是训练集数据,同样还有两个高斯分布的等高线,这两个等高线分别匹配好了两个分类。两个高斯分布的等高线形状和方向都是一样的,因为他们用同样的协方差矩阵,但是使用不同的均值μ0 μ1 。同样也可在图中看到一条直线在 p(y=1|x)=0.5 处画出了决策边界。在边界的一侧,我们预测大多数的输出是 y=1 ,另一侧预测为 y=0


3.高斯判别分析和逻辑回归

高斯判别分析模型与逻辑回归之间有个有趣的关系。如果我们把 p(y=1|x;ϕ,μ0,μ1,) 当作 x 的函数,我们会得到如下的表达式:


等式中的θ是以 ϕ,,μ0,μ1 为参数的某些函数。上述的等式是逻辑回归的形式——一种判别算法——通过对 p(y=1|x) 建模。

高斯判别分析和逻辑回归在训练过程中给出了不同的决策边界,那么哪一种算法的效果更好一些呢?

如果 p(x|y) 符合多元高斯分布(只用一个协方差矩阵),那么 p(y|x) 一定符合逻辑回归函数。反过来的话,如果 p(y|x) 符合逻辑回归函数,那么不能推导出 p(x|y) 一定符合多元高斯分布。

这意味着高斯判别分析比逻辑回归具有更强的模型假设。那么,当模型的假设是正确的,高斯判别分析方法匹配数据会更好,会得到一个更好的模型。尤其是,当 p(x|y) 确实符合高斯分布时,高斯判别分析方法就是渐进有效的。这意味着,在训练样本数足够大时,没有算法的表现能比得过高斯判别分析,但即使训练样本很少,我们也会预期GDA会表现的更好。

相反,即使逻辑回归在假设上稍逊一筹,但它仍然更具健壮性,且对错误的模型假设不敏感。

有很多不同的假设会导致 p(y|x) 符合逻辑回归函数。举个例子,如果 x|y=0Poisson(λ0) x|y=0Possion(λ1) ,那么 p(y|x) 就会符合逻辑回归。逻辑回归算法在泊松分布的数据上也有较好的效果。但是,如果我们用高斯判别分析处理泊松分布的数据,用高斯分布去匹配非高斯分布的数据,那么结果会缺少预测性,产生的结果或好或坏都是不一定的。

总结:高斯判别分析有更强的建模假设,如果对模型的假设是正确的或者说是接近正确时,该方法会有很好的效果。逻辑回归的建模假设稍弱,但对建模假设的推导更具有健壮性,尤其是,当训练数据不符合高斯分布,且数据量有限时,逻辑回归的表现会比高斯判别分析要好。也因为这个原因,逻辑回归在实践中应用的更多。


朴素贝叶斯

在高斯判别分析中,特征向量 x 是连续的,实数值的向量。接下来介绍另一种学习算法,适用于当xis为离散值这种情况。

首先思考这样一个例子,通过机器学习来构建一个垃圾邮件过滤器。我们希望把垃圾邮件和非垃圾邮件分类,然后通过邮件过滤器自动将垃圾邮件分类到另外一个文件夹中(邮件分类是文本分类的一个例子)。

我们通过一个特征向量来代表一封邮件,而这个向量的长度与字典里的单词数量相等。如果一封邮件里包含了字典中的第 i 个单词,就可以设置成xi=1,反之设置成 xi=0

举例来说,代表邮件的特征向量包括单词“a”和“buy”,但是不包括“aardvark”,“aardwolf”,“zygmurgy”。


特征向量中的单词被称为词汇,所以 x 的维度与词汇的数量相等。

现在我们需要构建一个生成模型。所以我们需要对p(x|y)建模。但如果词汇表包含5000个单词,那么就有 x{0,1}50000 x 是一个5000维度,包含0和1的特征向量),那么我们对x的建模就是有超过 250000 个输出结果的多项式分布,以及 2500001 维度的参数向量,这样做的话参数实在是太多了。

为了对 p(x|y) 进行建模,我们会做一个非常良好的假设。假设特征向量中的每一个单词 x 都与提供的y条件独立,这一假设被称作朴素贝叶斯假设,算法的结果被称作朴素贝叶斯分类器

举个例子,如果 y=1 意味着垃圾邮件,那么“buy”是第2087个单词,“price”是第39831个单词。假设我们知道某一封邮件是垃圾邮件,那么 x2087 (在邮件中是否出现的单词“buy”)对 x39831 (邮件中是否出现单词“price”)并没有任何影响。更详细一点说,可以写成等式 p(x2087|y)=p(x2087|y,x39831) 。(条件独立与相互独立(independent)的概念不同,后者可以写成 p(x2087)=p(x2087|x39831)


由此也可以获得上述的推导公式,第一个等式根据概率的普通性质,第二个等式根据上述的朴素贝叶斯假设(朴素贝叶斯假设非常棒,由此产生的算法很好的解决了很多问题)。

我们的模型中以 ϕi|y=1=p(xi=1|y=1) ϕi|y=0=p(xi=1|y=0) ϕy=p(y=1) 为参数。与往常一样,通过训练集 {(x(i),y(i));i=1,...,m} ,我们可以得到如下的joint似然性:


通过对 ϕy ϕy phii|y=0 最大化达到最大化似然估计目的:


在上述等式中,符号 的含义是“并且”的意思,表示符号前后两者的条件都要满足。参数的含义很好理解,比如说 ϕj|y=1 表示的含义是:包含单词 j 的垃圾邮件(y=1)占整体垃圾邮件的比例。

在对训练样本中所有的参数估计过后,为了对新的样本做出预测,可以对 p(y=1|x) 进行计算然后根据哪一类的后验概率更高对新样本进行分类:



Laplace平滑

朴素贝叶斯算法对于很多问题有非常不错的解决效果,但是对算法进行简单的修改可能会让效果更好,尤其是对于文本分类问题。这一小节会讨论朴素贝叶斯算法的问题以及如何修改。

针对之前的垃圾邮件分类问题,思考这样一个场景:如果你收到一封新的邮件,包含了从未在过往邮件中出现过的单词,甚至在训练集中都没有出现过,那么该如何判断这封邮件是否是垃圾邮件呢?
假设这个从未见过的单词在字典中处于第35000个位置,朴素贝叶斯垃圾邮件分类器会对 ϕ35000|y 进行最大似然估计。因为无论是在垃圾邮件或者非垃圾邮件的训练样本中都没有出现过这个单词,那么这封新的邮件出现在任何一类邮件中的概率都为0。


因此,当我们试着去决定这封包含着陌生词汇的邮件是垃圾邮件时,问题出现了。计算类的后验概率时,我们得到了如下等式,因为在两个分类(垃圾/非垃圾)中都存在 p(x35000|y)=0 ,所以我们的算法得到了0/0的结果,最终我们并不知道如何做出这个预测。


进一步说明这个问题,如果仅仅是因为在有限的训练集中没有某个事件就判断这个事件发生的概率为0,那么这种情况进行预测是非常糟糕的(预测也没有意义了不是吗)。

为了避免这个问题,我们可以使用Laplace平滑

之前对于多元随机变量 z{1,...,k} ,将多项式进行参数化 ϕi=p(z=i) 。给定一组m个独立观测值 {z(1),...z(m)} ,然后得到参数的最大似然估计


如果我们用这个最大似然估计,结果最终还是0,解决不了问题。那么Laplace平滑如何解决呢?它把上面的估计等式改成下面的这种形式:分子+1,分母+k。


要知道每个 ϕj 的估计的概率总和为1,我们在对等式修改之后并没有打破这个限制(我们对等式的更改,也就是更改了所有的 ϕj 的计算过程。每个 ϕj 相比原来的等式计算得到的结果一起放缩了相同的倍数,虽然个体发生了改变,但总的值并没有变化,还是1哦),而且,对所有的 j ϕj都不为0,解决了上述问题。Laplace平滑也对 ϕj 进行了优化估计。

回到朴素贝叶斯分类器问题,通过Laplace平滑处理,我们得到了改进后的参数估计:


(在实践中,并不在乎 ϕy 是否经过Laplace平滑处理过,因为对于垃圾邮件和非垃圾邮件我们都有合理的样本数据,所以 p(y=1) 的估计结果值为0是很状况外的情况)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值