您的位置:首页 > 其它

【机器学习 吴恩达】CS229课程笔记notes2翻译-Part IV生成学习算法

2017-10-15 17:23 519 查看

CS229课程笔记

吴恩达

 

Part IV 生成学习算法

      到目前为止,我们主要谈论建模p(y|x;θ)的学习算法,给定x的y的条件分布。例如,logistic回归建模p(y|x;θ)为hθ(x)=g(θTx),其中g为sigmoid函数。在这些笔记中,我们将讨论不同类型的学习算法。

      考虑一种分类问题,我们想要学习大象(y=1)和狗(y=0)之间的差别,基于动物的一些特征。给定一个训练集,一个算法,类似logistic回归或者感知器算法,试图找到一条直线——即,一个决策边界——分离大象和狗。那么,为了分类一种新的动物为大象或者狗,就将检查该动物掉落在决策边界的哪边,从而做出预测。

      这里有一种不同的方法。首先,观察大象,我们可以构建一个大象所属的模型;然后,观察狗,我们可以构建一个狗所属的模型;最后,为了分类一种新的动物,我们可以将这种新的动物和大象模型匹配,然后将它与狗模型匹配,来看新动物看起来更像我们在训练集中看到的大象还是狗。

      算法试图直接学习p(y|x)(比如logistic回归),或者算法试图直接学习从输入空间X到标签{0, 1}的映射(比如感知器算法),叫做判别学习算法。这里,我们将谈论算法,试图建模p(x|y)(和p(y))。这样的算法叫做生成学习算法。例如,如果y指示一个样本是一个狗(y=0)或者是一个大象(y=1),那么p(x|y=0)建模狗的特征分布,p(x|y=1)建模大象的特征分布。

      在建模p(y)(叫做先验类)和p(x|y)之后,我们的算法可以使用贝叶斯规则导出给定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),我们实际上不需要计算分母,由于


 
 

1  高斯判别分析

      我们将看到的第一个生成学习算法是高斯判别分析(GDA)。在该模型中,我们假定p(x|y)是分散的,依据多变量正态分布。在讨论GDA模型之前,让我们简要谈论多变量正态分布的特性。

1.1  多变量正态分布

      n维的多变量正态分布,也叫做多变量高斯分布,参数为一个均值向量μ∈Rn和一个协方差矩阵∑∈Rn×n,其中∑≥0是对称半正定矩阵,也写作“N(μ,∑)”,其密度函数由下式给定:


 
      在上面的等式中,“|∑|”代表矩阵∑的行列式。

      对于随机变量X的分布N(μ,∑),均值由μ给定:


 
      向量值随机变量Z的协方差定义为Cov(Z)=E[(Z-E[Z])(Z-E[Z])T]。这由一个实值随机变量方差的概念扩展而来。方差也可以被定义为Cov(Z)=E[ZZT]-(E[Z])(E[Z])T。(你应该能够自己证明这两个定义是等价的。)如果X~N(μ,∑),那么

Cov(X)=∑
      下面是一些高斯分布的密度图像的例子:


 
      最左图展示了一个均值为0的高斯分布(即,2×1的零向量),协方差矩阵∑=I(2×2的单位矩阵)。均值为0、协方差为单位矩阵的高斯分布叫做标准正态分布。中间的图展示了均值为0、∑=0.6I的高斯密度。最右图展示了均值为0、∑=2I的高斯密度。我们看到,随着∑变大,高斯分布变得更加分散,随着∑变小,高斯分布变得更加集中。

      让我们看更多的例子。


 
      上面的图展示了均值为0、协方差矩阵分别是下面所示:


 
      最左图展示了熟悉的标准正态分布,我们看到随着我们增加∑中的副对角线项,密度向着45°方向变得更加集中(由x1=x2给定)。我们可以更清楚地看到这个现象,当我们看这三个密度的等高线时:


 
      下面是通过改变∑生成的样本集合:


 
      上面的图使用下面的矩阵:


 
      从最左图和中间图,我们看到通过减少协方差矩阵的对角线元素,密度再次变得集中,但是是在相反的方向。最后,随着我们变化参数,等高线将形成椭圆(最右图展示了一个例子)。

      我们的最后一个样本集中,固定∑=I,通过变化μ,我们也可以移动密度的均值。


 
      上面的图用∑=I生成,μ如下所示


 
 

1.2 高斯判别分析模型

      当我们有一个分类问题,其中输入特征x是连续值随机变量,我们可以使用高斯判别分析(GDA)模型,使用多变量正态分布建模p(x|y)。该模型如下:


 
      写出该分布如下:


 
      这里,我们模型的参数是φ,∑,μ0和μ1.(注意当存在两个不同的均值向量μ0和μ1时,该模型通常仅使用一个协方差矩阵∑。)数据的对数似然函数如下给出:


 
      通过最大化l,我们发现参数的最大似然估计(见问题集1)是:



      该算法可以绘图如下:


 
      图中所示是训练集和在两类中拟合了数据的两个高斯分布的等高线。注意,两个高斯分布的等高线有相同的形状和方向,由于它们共享一个协方差矩阵∑,但是有不同的均值μ0和μ1。图中也展示出一条直线在p(y=1|x)=0.5处给出决策边界。边界的一边,我们预测y=1是最可能的输出,在边界的另一边,我们预测y=0。

 

1.3 讨论:GDA和logistic回归

      GDA模型与logistic回归有一个有趣的关系。如果我们观察p(y=1|x;φ,∑,μ0,μ1)为x的函数,我们将发现它可以被表示为如下形式:

 


      其中θ是φ,∑,μ0,μ1的函数,这是logistic回归的形式,一个判别算法,用来建模p(y=1|x)。

      我们什么时候更倾向于一个模型呢?GDA和logistic回归通常在相同的训练集上给出不同的决策边界,那个更好?

      我们认为,如果p(x|y)是多变量高斯分布(相同的∑),那么p(y|x)一定遵循logistic函数,反之不成立。例如,p(y|x)是一个logistic函数不意味着p(x|y)是多变量高斯分布。这展示出GDA比logistic回归做了更强的模型假设。结果,当这些模型假设是正确的,GDA将找到更好的对数据的拟合,是一个更好的模型。特别地,当p(x|y)实际上是高斯分布(相同的∑)时,GDA十分有效。这意味着在非常大的训练集(很大的m)的限制下,不存在比GDA更好的算法(依据我们估计p(y|x)的准确性)。特别地,在这种情况下,GDA是比logistic回归更好的算法,然而更多的是,对于小训练集,我们也希望GDA能够更好。

      相反,通过做出很弱的假设,logistic回归也更加健壮,对不正确的模型假设不太敏感。存在许多不同的假设集合,将导致p(y|x)取logistic函数的形式。例如,如果x|y=0~Poisson(λ0),x|y=1~Poisson(λ1),那么p(y|x)将是logistic函数。Logistic回归在这样的Poisson数据上也工作得很好。但是如果我们在这样的数据上使用GDA,拟合高斯分布到这样的非高斯数据上,那么结果预测得将没有那么好。

      总结:GDA做出更强的模型假设,当模型假设是正确的或者至少大部分是正确的,GDA更加高效(需要更少的训练数据就能学习得很好)。Logistic回归做出更弱的假设,对于从模型假设中推导明显更加鲁棒。特别地,当数据实际上是非高斯分布时,在大数据情况下,logistic回归做得总是比GDA好。因为这个原因,实际上logistic回归比GDA更加常用。(一些关于判别模型和生成模型的考虑也应用到我们下面讨论的朴素贝叶斯算法中,但朴素贝叶斯算法仍然认为是一个非常好的、非常受欢迎的分类算法。)

 

2  朴素贝叶斯算法

      在GDA中,特征向量x是连续的实值向量。我们现在谈论一个不同的学习算法,其中x是离散值的。

      考虑运用机器学习构建一个垃圾邮件分类器。这里,我们希望依据邮件是未经请求的商业垃圾邮件还是非垃圾邮件将邮件进行分类。学习后,我们可以生成邮件阅读器,自动过滤出垃圾邮件并把它们放在单独的邮件文件夹中。分类邮件是一个更大的问题集合中的一个例子,叫做文本分类。

      我们说我们有一个训练集(一个邮件集合,标记为垃圾或非垃圾邮件)。我们将开始构建我们的垃圾邮件过滤器,通过指定用特征xi代表一封邮件。

      我们将通过一个特征向量代表一封邮件,向量长度等于字典中词的数量。特别地,如果邮件中包含字典中的第i个词,我们将设置xi=1;否则,设置xi=0。例如下面向量:


 
      该向量用来表示一封邮件,包含单词“a”和“buy”,但不包含“aardvark”,“aardwolf”或者“zygmurgy”。编码进特征向量的单词集合叫做词汇表,因此x的维度等于词汇表的大小。

      选择了特征向量,我们现在想要构建一个判别模型。因此,我们必须建模p(x|y)。但是,如果我们有一个50000个词的词汇表,那么x∈{0,1}50000,(x是一个50000维的0或1的向量),如果我们用多项式分布建模x,就会得到250000个可能的输出,那么我们将有(250000-1)维的参数向量。这很明显,有太多的参数了。

      为了建模p(x|y),我们将做出一个非常强的假设。我们将假设给定y后x是条件独立的,该假设叫做朴素贝叶斯假设,算法叫做朴素贝叶斯分类。例如,如果y=1的含义是垃圾邮件;“buy”是词2087,“price”是词39831;那么我们假定如果我告诉你y=1(该邮件是垃圾邮件),那么x2087与x39831的值无关。更正式地,这可以被写作p(x2087|y)=p(x2087|y,x39831)。(注意,这与所说的x2087和x39831是独立的不同,它可以写作p(x2087)=p(x2087|x39831));然而,我们仅仅假定x2087与x39831在给定y的条件下是条件独立的。)

      我们现在有:


 
      第一个等式遵循着通常的概率特性,第二个等式使用朴素贝叶斯假设。我们注意到,即使朴素贝叶斯假设是一个特别强的假设,该算法也在很多问题上工作得很好。

      我们的模型由φ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、φi|y=0、φi|y=0的似然函数,给出最大似然估计如下:


 
      在上面的等式中,“∧”符号意味着“与”。参数有一个非常自然的解释。例如,φj|y=1是当单词j出现时是垃圾邮件的分数。

拟合了所有这些参数,为了在一个新的具有特征x的样本上做出预测,我们可以简单地计算如下:


 
      然后挑选哪一类有更高的后验概率。

      最后,我们注意到,尽管我们设计了朴素贝叶斯算法主要用于特征xi是二值的,对于该方法的扩展可以直接得到,xi取值{1, 2, ..., ki}。这里,我们将简化模型p(xi|y)为多项式分布,而不是Bernoulli分布。实际上,即使某个最初的输入属性(例如,我们早期例子中的房屋居住面积)是连续值的,我们也可以将其离散化——也就是说,将其转变成一个小的离散值集合——然后应用朴素贝叶斯算法。例如,如果我们使用某个特征xi来代表居住面积,我们可以离散化该连续值如下:


 
      因此,对于一个居住面积为890平方英尺的的房屋,我们设置相应的特征xi的值为3。我们可以应用朴素贝叶斯算法,用多项式分布建模p(xi|y),如之前描述。当最初的连续值属性没有用多变量正态分布很好地建模时,离散化特征并使用朴素贝叶斯(代替GDA)通常会带来更好的分类。

 

2.1  Laplace平滑

      我们描述的朴素贝叶斯算法在许多问题上工作得相当好,但是,我们可以做一个简单的改变使得该算法工作得更好,特别对于文本分类。让我们简要讨论一个问题,运用该算法现在的形式,并讨论我们怎么解决这个问题。

      考虑垃圾邮件分类问题,我们假设,上完了CS229课程并已经做了很好的项目,你们决定大约2003年六月向NIPS会议提交工作以便发表。(NIPS是一个顶级机器学习会议,提交论文的截止时间是在六月底或七月初。)因为你在邮件中讨论该会议,你开始得到包含“nips”单词的邮件。但是,这是你的第一个NIPS论文,你之前从未收到过任何包含单词“nips”的邮件,“nips”从来没有出现在你的垃圾/非垃圾邮件中。假定“nips”是词典中的第35000个词,你的朴素贝叶斯垃圾邮件过滤器挑选了参数为φ35000|y的最大似然估计如下:


 
      因为过滤器之前在垃圾或者非垃圾邮件训练样本中从未见过“nips”,它认为在任何类型的邮件中看到该词的概率都为0。因此,当我们试图决定这些邮件中包含“nips”的某个邮件是否为垃圾邮件时,计算其后验概率如下:


 
      这是因为

的每一项包括p(x35000|y)=0项,因此,我们的算法包含0/0,便不知道怎样做出预测。

      更加宽泛地陈述这个问题,估计某事件的概率为0仅仅因为你之前在有限的训练集中从未见过它。估计一个多项式随机变量z的均值,取值{1,...,k}。我们可以用φi=p(z=i)参数化我们的多项式。给定一个m个独立观察{z(1),...,z(m)}的集合,最大似然估计由下式给出:


 
      如我们之前所见,如果我们使用这些最大似然估计,φj的一些值可能为0,这是一个问题。为了避免该问题,我们使用Laplace平滑,用下式代替上面的估计:


 
      这里,我们为分子加1,分母加k,保证

,这是一个期望的特性,φj是概率估计,概率和为1,对所有j值,φj≠0,用以解决我们估计的概率为0的问题。在确定的条件下,Laplace平滑实际上给出了φj的最优估计。

      返回到我们的朴素贝叶斯分类中,运用Laplace平滑,我们获得了下面的参数估计:


 
      (实际上,我们是否对φy应用Laplace平滑并无多大关系,由于我们对每个垃圾和非垃圾邮件有一个公平的分数,因此φy将是p(y=1)的一个合理估计,与0的距离很远。)

2.2  文本分类事件模型

      继续我们对生成学习算法的讨论,我们讨论更多的专用于文本分类的模型。我们讲的朴素贝叶斯算法对很多分类问题都工作得很好,对于文本分类,有一个相关的模型做的更好。

      在文本分类的特殊环境中,我们讲的朴素贝叶斯使用一种模型叫做多变量Bernoulli事件模型。在这种模型中,我们假定邮件生成的方式是随机决定的(依据先验类p(y))。然后,发送邮件的人遍历词典,决定邮件中是否包含某个词i,概率为p(xi=1|y)=φi|y。因此,邮件是否为垃圾邮件的概率由

给定。

      这是一个不同的模型,叫做多项式事件模型。为了描述这个模型,我们将使用一个不同的符号和特征集来表示邮件。我们让xi代表邮件中第i个的词的ID,因此,xi是一个整数,取值{1, ..., |V|},其中|V|是词典的大小。一个有n个词的邮件由长度为n的向量(x1, x2, ..., xn)表示;n在不同的文本中是变化的。例如,如果邮件以“A
NIPS ...”开始,那么x1=1(“a”是词典中的第一个词),x2=35000(如果“nips”是词典第35000个词)。

      在多项式事件模型中,我们假定邮件生成的方式是通过一个随机过程,垃圾/非垃圾邮件依据p(y)先定下来。然后,邮件的发送者通过首先依据多项式分布生成x1(p(x1|y))。接下来,第二个单词x2独立于x1,但也服从相同的多项式分布,x3,x4等等也相似,直到邮件所有的n个词都生成。因此,邮件是垃圾邮件的概率的概率为

。注意,该公式看起来更像我们早期看到的在多变量Bernoulli事件模型下邮件的概率,但公式中的这些项现在的含义不同。特别地,xi|y是一个多项式分布,而不是Bernoulli分布。

      我们新模型的参数是φy=p(y),φi|y=1=p(xj=i|y=1)(对于任何j),φi|y=0=p(xj=i|y=0)。注意我们已经假定p(xj|y)对所有的j值都是相同的(单词生成的概率分布与单词在邮件中的位置无关)。

给定训练集{(x(i),y(i);
i=1, ..., m},其中x(i)=(x1(i),x2(i),...,xni(i)),这里ni是在第i个训练样本中单词的数量,数据的似然函数如下给定:


 
      最大化似然估计中的参数取值如下:


 
      当我们估计φk|y=0和φk|y=1时,如果我们应用Laplace平滑算法(实践中这有很好的性能),我们对分子加1,对分母加|V|,获得下式:


 
      不需要最好的分类算法,朴素贝叶斯分类通常工作得很好,该算法也通常是需要尝试的第一个算法,由于它很简洁,也很容易实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐