cs229-note2

生成学习算法

 至今为止,我们主要学习对于模型p(y|x; θ),给定了x得到y的条件分布.在这一,我们要讲学习算法的另一种类型(a different type of learning algorithm).
 考虑我们想要基于动物的某些特征分辨大象(y = 1)和狗(y=0)的分类问题.给出一组训练集,逻辑回归与感知器算法尽力找出一条能够充当分类界限的直线,也就是能够区分大象和狗的直线.之后,为了分辨大象或者狗,只需要检查数据落在界限的哪一端就好了.
 现在有了一种不同的方法.首先,观察一头大象,我们能够建立大象的模型;观察一只狗,我们能够建立狗的模型.最后,为了鉴别一种动物,我们能够看这种动物匹配大象的模型,狗的模型还是其他的模型.
 可以直接获得p(y|x)的算法(如逻辑回归)或者尽力从输入X匹配到{0,1}的算法(比如感知器算法)被称为判别学习算法(discriminative learning algorithms).现在,我们要学习一种生成学习算法(generative learning algorithms).举例,如果y判别一个输入是狗(0)或者大象(1),那么p(x|y=0)对狗的特征的分布建模,p(x|y=1)对大象的特征的分布建模.
 如果建立好p(y)的模型(称为类先验(class priors))与p(x|y)的模型,我们的算法就可以根据贝叶斯法则得到给定xy的后验分布(posterior distribution):

 实际上,如果我们为了做出预测而计算p(y|x),我们不需要计算上式的分母,因为

1 高斯判别分析

 我们学习的第一个生成学习算法是高斯判别分析(Gaussian discriminant analysis(GDA)).在这个模型中,我们假设p(x|y)是多元正态分布(multivariate normal distribution).先讲一下多元正态分布.

1.1 多元正态分布

 多元正态分布也被称为多元高斯分布,由均值向量(mean vector)μ ∈ Rn协方差矩阵(covariance matrix)Σ ∈ Rn*n表示,而Σ>=0,并且是对称与半正定的矩阵.多元正态分布也写为N (μ, Σ),它的密度( density)由以下式子给定:

“|Σ|”表示矩阵Σ的行列式.


以下是一些高斯分布的密度的例子:

最左边的图片的均值向量是0(也就是说,2 × 1维的0向量),协方差矩阵Σ = I(2×2维单位矩阵) .均值向量为0并且协方差矩阵为单位矩阵的也被称为标准正态分布(standard normal distribution).中间的图像是均值向量为0,Σ = 0.6I;最右边的是均值向量为0,Σ = 2I.
 让我们看更多的例子.

以上的图片均值向量均为0,协方差矩阵分别为:

增大Σ非对角线的数字,密度图像更向45°线压缩,我们可以通过等高线图看的更清楚 :
等高线图
 以下是最后一个变化Σ的例子:

以上这些图片的Σ分别为:

通过观察最左边与中间的图像,我们能够看到减小非对角的元素,密度函数变得向相反的方向压缩.
 看我们最后一组例子,固定Σ = I,通过改变μ,我们可以得到以下密度图像:

以上图像固定Σ = I,而μ分别取以下值:

1.2 高斯判别分析模型

当我们有一个输入值为连续随机变量的分类问题时,我们能够使用高斯判别分析模型(The Gaussian Discriminant Analysis(GDA) model),也就是使用多元正态分布对p(x|y)建模。模型为下:

写出分布如下:

模型中的参数是φ,Σ , μ0 , μ1(注意有两个均值向量μ0 , μ1,这个模型通常只是用1个协方差矩阵Σ)。对数似然函数如下:

通过最大化l,我们能够推导出以下参数(查看斯坦福官网的Problem Set 1):

这个算法所做的事情能够由以下图片观察:

 图像中显示的是训练集与分别匹配这两种训练集的两个高斯分布的等高线.注意两个高斯分布的等高线有同样的形状与方向,因为他们有共同感的协方差矩阵Σ,但是它们有不同的均值向量μ0 , μ1.图像中显示的直线是由p(y=1|x) = 0.5给出的分界线.在分界线的一边,我们预测y=1是最有可能的输出,另一边则相反.

1.3 讨论:GDA与逻辑回归

GDA与逻辑回归有一个非常有趣的关系.如果我们把p(y=1|x; φ, μ0 , μ1,Σ )看作是以x为变量的函数.那么它能以一下形式表示:

θ是以φ, μ0 , μ1为变量的某种合适形式的函数.这也就是逻辑回归公式的形式.
 GDA和逻辑回归对于同样的数据集会给出不同的分界线.哪一个更好呢?
 如果p(x|y)是共有同一个Σ的多元高斯分布(multivariate gaussian),那么p(y|x)就应该遵从逻辑回归.然而,这个并不绝对;比如,p(y|x)是逻辑回归但p(x|y)并不是多元高斯分布.这显示出GDA比逻辑回归有更强的建模能力.也就是说,当这些建模假设是对的的时候,那么GDA能够找出更好的公式,也就是是更好的模型.特别地,当p(x|y)是共有同一个Σ的多元高斯分布,那么GDA是渐进有效(asymptotically efficient)的.非正式地说,这也就以为这大特别大数据集的极限情况下,没有哪个算法比GDA更好.
 与之相对的是,通过建立区分度不那么高的假设(by making significantly weaker assumptions),逻辑回归更健壮并且对于错误的模型假设更不敏感.比如,如果x|y=0~Possion(λ0)并且x|y=1~Possion(λ1),那么p(y|x)就是逻辑回归.如果我们调整这种不是高斯分布的数据为高斯分布,那么GDA可能(也可能不)工作的更好.
 总结:GDA有更强的建模能力,并且需要更少的训练集就能构建好的模型.逻辑回归建模能力较差,更健壮.特别地,如果数据集不是高斯分布,在大数据集的情况下,逻辑回归比GDA更有效.因为这个原因,在实际使用上,逻辑回归比GDA更常用.

2 朴素贝叶斯

在GDA中,特征向量x是连续的,实数向量.现在让我们谈论特征向量是离散值的算法.
 考虑通过机器学习构建一个垃圾邮件过滤器.我们希望通过鉴别它们是广告(垃圾)邮件与非垃圾邮件来进行分类.邮件分类是文本分类(text classification)的一个例子.
 假设我们已经有了训练集(很多已经分类为垃圾或者非垃圾的邮件).我们通过选取能够代表邮件的特征值xi来构建垃圾过滤器.
 我们要选取长度是字典(此处字典是包含所有单词的字典,稍后面有引用解释 –me)中单词个数的特征向量来代表一封邮件.也就是说,如果一封邮件包含字典中的第i个词,那么xi = 1;否则,xi=0.举例如下:

以上的特征向量表示一封包含单词”a”和”buy”的邮件,而不包含“aardvark,” “aardwolf” or “zygmurgy.”2.特征向量中的单词被称为词汇表(vocabulary),因此x的维度等于词汇表的大小.

2Actually, rather than looking through an english dictionary for the list of all english words, in practice it is more common to look through our training set and encode in our feature vector only the words that occur at least once there. Apart from reducing the number of words modeled and hence reducing our computational and space requirements, this also has the advantage of allowing us to model/include as a feature many words that may appear in your email (such as “cs229”) but that you won’t find in a dictionary. Sometimes (as in the homework), we also exclude the very high frequency words (which will be words like “the,” “of,” “and,”; these high frequency, “content free” words are called stop words) since they occur in so many documents and do little to indicate whether an email is spam or non-spam.(大意是实际上选取一个训练集中的的所有单词而不是单词字典中的所有单词更好)

 有了特征向量,现在需要对p(x|y)进行建模.但是如果我们有50000个单词的单词表,那么x ∈ {0, 1}50000(x是取值为0或1的50000维向量).如果我们把x建模为250000个可能输出的多项式分布.那么我们得到一个(250000 - 1)维的参数向量.这个很显然太多参数了.
 为了对p(x|y)建模,我们需要做一个假设.我们假设xi条件独立于给定的y.这个假设被称为朴素贝叶斯假设(Naive Bayes(NB) assumption),由此生成的算法叫做朴素贝叶斯分类器(Naive Bayes classifier).比如,如果y=1意味着垃圾邮件,“buy”是第2087个单词,“price”是第39831个单词;那么如果我告诉你y=1,那么对于x2087的值(意味着单词“buy”是否出现过)的认识与你对于x39831的值(意味着单词“price”是否出现过)的认识没有影响(原文:then we are assuming that if
I tell you y = 1 (that a particular piece of email is spam), then knowledge
of*x2087* (knowledge of whether “buy” appears in the message) will have no effect on your beliefs about the value of x39831 (whether “price” appears))。更正式地,这个可以写为p(x2087|y) = p(x2087|y,x39831).(注意,这个与x2087和x39831独立不一样,如果是独立的话应该写为p(x2087) = p(x2087|x39831),也就是说我们只是假设x2087x39831对于给定的y是条件独立的。)
 我们现在有:

第一个等式由概率的一般性质简单得到,第二个等式由朴素贝叶斯假设得到.我们注意到即使朴素贝叶斯假设是强假设(strong assumptions),由此得到的算法使用于很多问题.
 我们的模型的参数是φ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 likelihood):

由以下这些参数,我们可以最大化这个似然函数:

在以上的等式中,”∧”表示”与”.这些参数有很自然的解释。比如,φj|y=1表示垃圾邮件(y = 1)中第j个单词出现了。
 有了这些参数,对于一个新的例子我们可以预测如下:

并选出有最高后验概率(posterior probability)的那个。
 最后,我们注意到朴素贝叶斯算法主要适用于特征xi是二值变量(binary-valued),扩展到xi可以取多个值{1,2,…,ki}是很直观的。这里,我们将p(xi|y建模为多项式,而不是伯努利分布。甚至,如果原始输入值是连续的(比如,我们之前例子里面的房屋居住面积),也可以使其离散(discretize)。也就是,把它们转化成一系列的离散值,并且应用于朴素贝叶斯。比如,如果我们使用某些特征xi来代表居住面积,我们或许可以按照以下来离散输入值:

 如果连续的特征值不能很好的适用于多元正态分布,使这些特征值离散化并且使用朴素贝叶斯(而不是GDA)总能得到一个更好的分类器。

2.1 拉普拉斯平滑

 朴素贝叶斯对于很多问题总是能工作的很好,但是如果对其修改的话能使其工作的更好,特别是对于文本分类问题。
 考虑垃圾邮件分类问题,假设已经建立了一个垃圾邮件分类的模型.但是在你之前建立的模型中使用的训练集从来没有出现过”nips”.假设”nips”是字典中的第35000个单词,你的朴素贝叶斯垃圾过滤器已经建立了参数φ35000|y的最大似然函数如下:

比如,因为这个模型在之前的训练集中从没见过”nips”,所以它认为在任何类型的邮件中碰到”nips”的概率都是0.因此,当尝试去算出包含”nips”的消息是否是垃圾邮件时,它计算后验概率(posterior probabilities)遵循以下公式:

 评估某种在有限训练集中没有出现过的事物的概率为0是一个坏主意。假设现在有一个评估多项随机分布z取值在{1,…,k}之间的问题。我们能够由φi = p(z=i)来参数化我们的多项式分布。给出m个独立观测值{z(1),…,z(m)},可以得到其最大似然函数:

正如我们之前看到的,如果我们使用这个最大似然函数,那么某些φj或许等于0。为了避免这个,我们可以使用拉普拉斯平滑(Laplace smoothing),也就是使用以下公式来代替:

注意,这个等式依然有Σkj=1φj = 1这个性质。
 使用拉普拉斯平滑,回到我们的朴素贝叶斯分类器,可以得到以下式子:

2.2 文本分类的事件模型

让我们以谈论特别适用于文本分类的模型来结束生成学习算法的讨论。
 在文本分类的问题上,朴素贝叶斯方法使用多变量伯努利事件模型(multi-variate Bernoulli event model)这一特定的分类模型。在这个模型中,我们假设一封邮件(无论是垃圾邮件还是非垃圾邮件)的内容是随机决定的。并且,发送的邮件内容都能够在字典中找到,并且每一个单词是否在邮件中都是独立的,由此可以得到整个邮件的概率是p(y)∏ni=1p(xi|y)给出(∏表示连乘,在Windows下显示挺奇怪 –me)。
  现在有一个不同的模型,称为多项事件模型(multinomial event model)。为了描述这个模型,我们使用一个不同的记法。使用xi表示在邮件中的第i个单词,因此xi现在取值为{1,…,|V|}中的一个整数,|V|是我们的单词表(字典)的大小。一封有n个单词的邮件现在由n个向量(x1,…,xn表示。比如,如果一封邮件以A NIPS…开始,那么x1 = 1(“a”是字典中的第一个单词),x2 = 35000(如果“nips”是字典中的第35000个单词)。
 在多项事件模型中,我们假设邮件是由随机过程生成的,并且x2的选择与*x1独立,x3x4也一样。因此,一封邮件的概率由p(y)∏ni=1p(xi|y)给出,这个式子跟多变量伯努利事件模型中的式子一样,但是这里的xi|y是多项式,而不是伯努利分布。
 我们新的模型中的参数如以前一样,φy = p(y)φk|y=1 = p(xj = k|y=1(对于任意j)和φi|y=0 = p(xj = k|y=0。注意我们假设p(xi|y)对于所有j都一样(比如,一个单词的生成并不依赖于它在邮件中的位置j)。
 如果我们已有用了训练集{x(i),y(i); i = 1,…,m },x(i) = (x(i)1,x(i)2,…,x(i)ni)(ni是第i个训练集中的单词数量),可以得到似然函数为:

由以下参数可以最大化这个似然函数:

如果我们在评估φk|y=0φk|y=1应用拉普拉斯平滑,我们在分子上加1,在分母上加|V|,可以得到:

尽管不是最好的分类算法,朴素贝叶斯分类器总是能够很好的使用。鉴于它的简易型和易于实现,它总是一个非常好的“first thing to try”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值