cs229 机器学习笔记二 生成模型与判别模型

生成学习算法

至此,我们已经对给定 x y的条件概率 p(y|x;θ) 进行建模的学习算法。例如逻辑回归模型将 p(y|x;θ) 建模得到 hθ(x)=g(θTx) 这里函数 g 为sigmoid函数,在这个笔记中,我们将介绍另外一种学习算法。

我们先来考虑这样一个分类问题:我们想区分大象(y=1)和狗 y=0 ,通过一些给定的动物特征。对于一个给定的训练集,我们通过一个算法例如:逻辑回归算法或者感知器算法。希望找到一条直线(也就是一条决策线)来划分大象和狗。所以当我们想预测一个未知的动物是大象还是狗时,我们可以根据它落在直线的哪边来给出预测结果。

这里还有一种不同的方法。首先我们先对大象进行研究,我们了以建立一个模型告诉我们大象是怎样的。接下来再对狗进行研究,可以建立一个模型告诉我们狗是啥样的。最后呢,对已一个我们想要分类的未知的动物,我们先将它和训练集里的大象作比较,然后再和训练集里的狗做比较,最后看它是更像狗还是更像大象,从而给出我们的预测结果。

对于想直接学习到 p(y|x) (比方说逻辑回归)或是想直接学习到从输入空间 X 到标签 {0,1} 映射关系的算法(例如感知器算法),我们把之类算法叫做判别模型学习算法.这里我们希望讨论另外一种算法,这类算法希望对 p(x|y)(and)p(y) 进行建模,我们称这类算法为生成模型算法。例如:如果 y 表示一个样本是狗(y=0)还是大象 (y=1) ,那么 p(x|y=0) 告诉了我们狗的特征有哪些, p(x|y=1) 告诉我们大象的特征有哪些。

在得到先验概率 p(y) p(x|y) 后,我们可以再利用贝叶斯规则推导出后验概率:

p(y|x)=p(x|y)p(y)p(x)

这里的分母我们可以通过式子 p(x)=p(x|y=1)+p(x|y=0) 得到,我们可以将其标傲世为 p(x|y) p(y) 的一个定量的式子。实际上,若果我们是想通过 p(y|x) 来做预测,我们是可以不计算分母的(因为对所有的预测样本分母的值是一样的),因此:
argmaxy=argmaxyp(x|y)p(y)p(x)=argmaxyp(x|y)p(y)

高斯判别分析

我们将接触第一个生成模型算法,高斯判别分析(GDA).在这个模型中,我们假设 p(x|y) 服从多元正态分布,首先我们先来讨论一下多元正态分布的特性。

多元正态分布

n 维的多元正态分布也叫做多元高斯分布,由参数:均值向量μRn和协方差矩阵 ΣRm×n ,这里 Σ0 是一个半正定的对称矩阵。多元正态分布通常记为 N(μ,Σ) ,它的定义如下:


上式中: |Σ| 表示矩阵 Σ 的行列式。
对于一个满足正态分布 N(μ,Σ) 的随机变量 X ,均值的定义为:
E[X]=xxp(x;μ,Σ)dx=μ

对于一个向量的随机变量 Z 的协方差定义为:Cov(Z)=E[(ZE[Z])(ZE[Z])T],这是由实数的方差推广而来的,协方差矩阵也可以定义为: Cov(Z)=E[ZZT](E[Z])(E[Z])T ,如果 XN(μ,Σ) ,则 Cov(X)=Σ .下图是高斯分布的密度分布图的几个例子。最左边的图像展示了均值为0( 2×1 的0向量),方差为单位矩阵的高斯分布的概率密度图。均值为0,方差为单位矩阵的高斯分布通常叫做标准正态分布。以上三幅图的均值都为0,方差依次为 I0.6I2I ;可以看到方差越大,概率密度图越平坦,越小陡峭。
13
我们再来看几个例子:
14
上面的图像显示的高斯分布的方差还是0,协方差矩阵为: 15
再来看几个例子:
16
17

高斯判别分析模型

当我们在处理一个输入特征 x 是连续随机变量时,我们可以利用高斯判别分析模型,这里将p(x|y)建模成多元正态分布。且有:
18
将分布表示出来有:
19
在我们模型中的参数有: ϕ,Σ,μ0,μ1 (这里两个均值的取值是不一样的,但是方差是一样的),log似然函数的置为:
21
通过将 最大化我们得到参数的最大似然估计值为:
22
将这个过程图像化,这个图是画出了所有的训练集,以及这两个高斯分布的轮廓,我们可以看到这两个高斯分布有相同形状的轮廓这是因为他们的协方差矩阵是一样的,图像中的直线给出了决策边界。

讨论:GDA以及逻辑回归

GDA模型和逻辑回归模型有一个很有意思的关系,如果我们将定式: p(y=1|x;ϕ,μ0,μ1,Σ) 看成是 x 的函数。我们将可以把它表示成:

p(y=1|x;ϕ,Σ,μ0,μ1)=11+exp(θTx)

这里 θ ϕ,Σ,μ0,μ1 的函数,这正是逻辑回归模型的形式(判别算法用来对 p(y=1|x) 进行建模)。
通常对于相同的训练数据,GDA和逻辑回归模型会给出不同的决策边界。那,那个模型更好呢?
我们仅讨论 p(x|y) 是多源高斯分布的的情形(且协方差矩阵是一样的),那么 p(y|x) 必然服从逻辑回归函数,但是反过来却不一定成立。这表明GDA的假设要比逻辑回归要严格。并且结果表明,当这些模型的假设是正确的时候,GDA的效果更好。尤其当 p(x|y) 是高斯分布时,GDA是渐进有效的(asymptotically efficient,也就是说对于训练样本十分大时,将没有算法的性能会比GDA好),这里的前提是 p(x|y) 严格服从高斯分布。
相反的,由于逻辑回归模型它的假设要弱些,因此它的鲁棒性要更强,并且对错误的模型假设也更不敏感。这里有很多不同的假设也可以使得 p(y|x) 具有逻辑回归函数的形式,比如: x|y=0Poisson(λ0) 以及 x|y=1Poisson(λ1) ;逻辑回归模型对泊松分布的数据也能处理的很好,但是GDA就不一定,可能可以处理,也可能得到的预测效果会比较差。
总结24

23

朴素贝叶斯

在GDA中,特征向量 x 是实数且连续的向量,现在我们要讨论另外一种算法来处理离散的特征向量。我们再来考虑邮件分类这个例子,邮件分类是文本分类问题中的一个例子。假定我们现在有一个训练集(已经标记为正常邮件和垃圾邮件),现在我们开始构建我们自己的垃圾邮件过滤器。
首先我们利用一个特征矩阵来表示邮件,这个特征矩阵的长度等于字典中单词的数目,如果邮件中包含了字典中的第i个单词,那么我们令 xi=1 否则的话 xi=0 ,比如
25
现在我们已经有了特征向量,所以我们现在构建一个判决模型。因此我们必须对 p(x|y) 进行建模,但是若果说,我们有一个字典有50000个词,那么 x{0,1}50000 x 是一个50000维的矩阵,如果我们对x构建多项式分布,由于有 250000 那么就会有 2500001 个参数,显然这实在是太多了。
为了对 p(x|y) 进行建模,我们必须做一个很强的假设。我们假设对于给定的 y xi是条件独立的。这个假设叫做朴素贝叶斯假设,以及通过这个假设我们的到的算法叫做朴素贝叶斯分类器.例如:若 y=1 表示垃圾邮件,单词”buy”是第2087个单词,”price”是第39831个单词。然后,我告诉你一封邮件是垃圾邮件,此时, x2087 的值为多少与 x39831 的值没有一毛钱关系。(注意这与 x2087 x39831 是独立的是不相同的,这里是对于给定的 y ),那么我们有:
26
第一个式子是由概率的基本性质得到的,第二个等式运用了NB(朴素贝叶斯)假设。虽然朴素贝叶斯假设是一个强假设,但是对于处理一些问题却还是很有用。
我们构建的这个模型的参数有:.与之前一样,对于一个给定的训练集 {(x(i),y(i));i=1,,m} ,这些数据的联合似然函数为:

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

将其最大化,我们得到 ϕy,ϕi|y=1,ϕi|y=0 的最大似然估计为:
27
在上式中,符号 表示”and”的意思。之后我们可以通过拟合得到的参数对一个特征为 x 的新样本进行预测:
28
然后选择后验概率大的那一类作为识别结果。(上式可以转化为参数的函数)。
刚才我们看到了用于处理特征是二值的朴素贝叶斯算法,显然特征值可以推广到多值的情况,即xI{1,2,,ki},在这种情况我们可以将 p(x|y) 建模为多项式分布而不是被努力分布。对于一些原始的输入属性(例如:房子的面积)通常为连续值,将它们离散化为一个很小的离散值的集合是一种很常见的处理方法。然后在采用朴素贝斯方法。例如:假如利用一些特征 xi 来表示居住面积,我们可能将连续值离散化为:

居住面积(单位 feet2 <400400-800800-12001200-1600
1600
xi 12345

因此,对于一个面积为890 feet2 的房子,我们将把其对应未知的特征值 xi 设为3.
当原始的连续的属性不容易建模成多项式的正态分布模型(GDA),我们可以将其离散化然后再使用朴素贝叶斯方法来得到一个更好的分类器。

拉普拉斯平滑

朴素贝叶斯算法通常可以很好的解决一些问题,但是给它在加一点处理,它将工作的更好,尤其对于文本分类。下面我们先简单的说一下我们的问题,然后在讨论如何进行一点小的改进。
假定对于先前建立的邮件分类算法,在训练样本中没有”nips”这个单词,我们假定“nips”这个单词在我们的字典中是存在的且为第35000个单词。所以NB对参数 ϕ35000|y 的最大似然估计的取值为:
29
也就是说,由于在训练集的垃圾邮件和非垃圾邮件中都没有见到过“nips”,分类器就认为在任何类型的邮件中”nips”都不会出现。当我们来确认一个包含“nips”的邮件是垃圾邮件的概率时,计算公式为:
30
这是因为每个 ni=1p(xi|y) 都包含项 p(x35000|y) 因此相乘后为0.由于最后的结果为 0/0 ,分类器将不知道如何给出预测结果。
将这个问题进行一个更加通用的陈述,分类器会将在有限的训练集中没有见过的事件的概率错误的估计为0。考虑这样一个问题,估计一个取值为 {1,,k} 随机变量 Z 的多项式分布的的均值。我们可以将这个多项式模型参数化为:ϕi=p(z=i),给定 m 个相互独立的观测值{z(1),,z(m)}最大似然估计为:

ϕj=mi=11{zi=j}m

正如我们之前看到的,如果我们使用这些最大似然估计,那么一些 ϕj 的值将为0。为了避免这个问题,我们可以利用 拉普拉斯平滑,上面的估计将会被下式代替:
ϕj=mi=11{zi=j}+1m+k

这里我们在分子上加了一个1,在分母加了k,注意: ki=1ϕj=1 仍然满足,这是我们期望具有的一个特性,因为 ϕj 对应的是概率,因此相加必须为1.同时对于所有的 ϕj0 解决了我们上面概率为0的问题。
返回到我们的朴素贝叶斯分类器,在经过拉普拉斯平滑之后,我们可以得到下面的估计参数:
31
在实际应用中我们一般不需要对 ϕy 进行拉普拉斯平滑。因为在在训练样本中我们一般会保证样本的平衡。

文本分类的事件模型

我们之前看到的NB使用了多变量伯努利事件模型.在这个模型中,我们首先随机选定了邮件的类型(垃圾或者普通邮件,也就是 p(y) ,然后一个人翻阅词典,从第一个词到最后一个词,随机决定一个词是否要在邮件中出现,出现标示为 1,否则标示为 0。然后将出现的词组成一封邮件。决定一个词是否出现依照概率 p(xi|y) 。那么这封邮件的概率可一表示为 p(y)ni=1p(xi|y) .
这里有一个不同的模型,叫做多项式事件模型。为了描述这个模型,我们要建立另外一套符号。我们用 xi 表示邮件中的第 i 个单词。因此xi是一个整数值了,它的取值范围为: {1,,|V|} 其中 |V| 是字典的大小。现在一封包含 n 个单词的邮件可以用向量{x1,x2,,xn}来表示。例如:若果一封邮件以单词”a NIPS …”那么 x1=1,x2=35000
在一个多项式分布事件模型中,我们假定在确定邮件类型(垃圾邮件和非垃圾邮件)后,这封邮件的生成过程是一个随机过程。那么发件人首先从从一个多项式分布中选择第一个单词 x1 ,也就是 p(x1|y) ,接下来第二个单词 x2 ,第二个单词与第一个单词是相互独立的,并且也是从相同的多项式分布中选取,其他的单词与之个也是一样的。因此这封邮件的总概率为 p(y)ni=1p(xi|y) ,现在 xi|y 是多项式分布而不是伯努利分布。
新的模型的参数为: ϕy=p(y);ϕi|y=1=p(xj=i|y=1) 对于所有的 j ;另外ϕi|y=0=p(xj=i|y=0),这里生成的单词与其所在的位置是无关的。
若有一个训练集 {(xi,yi);i=1,,m} ,因此我们可以得到训练数据的似然函数:
32
将其最大化,就可以得到最大似然参数的值:
33
其中, ni 是是第 i <script type="math/tex" id="MathJax-Element-6005">i</script>个样本的单词数采用拉普拉斯平滑后我们可以得到:
34

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值