斯坦福大学公开课 机器学习课程note2翻译.docx
《斯坦福大学公开课 机器学习课程note2翻译.docx》由会员分享,可在线阅读,更多相关《斯坦福大学公开课 机器学习课程note2翻译.docx(15页珍藏版)》请在冰点文库上搜索。
![斯坦福大学公开课 机器学习课程note2翻译.docx](https://file1.bingdoc.com/fileroot1/2023-8/5/a65ed135-f8f9-4099-aa01-65b26d934297/a65ed135-f8f9-4099-aa01-65b26d9342971.gif)
斯坦福大学公开课机器学习课程note2翻译
PartIV
GenerativeLearningalgorithms生成学习算法
到现在为止,我们已经学习关于
模型、y关于x的条件分布学习算法。
例如:
回归分析模型的
是应用
,g是激活函数。
在本节中,我们将会学习到一些不一样类型的学习算法。
思考一个分类问题我们想要把大象(y=1)和狗(y=0)识别出来基于一些动物的特征.给定一个训练集,一个类似于逻辑回归的算法或者感知计算法试图找到一条直线-----一个判定边界----去区分大象和狗。
然后,去分类一个动物既不是大象也不是狗,这个算法核实这个动物是在这个判定边界的哪一边,并且给出他相应的预测是大象或者是狗。
这里有一个不一样的方法。
首先,对于大象,我们能建立一个什么是大象的模型。
然后对于狗,我们能建立一个单独的模型对于什么是狗。
最后,去识别一个新的动物,我们会拿这个动物去和大象的模型对比,然后再去和狗的模型去对比,看这个新的动物是像大象多一些还是像狗多一些在我们的训练集中。
算法试图直接去得到一个函数P(y|x)(像逻辑回归那样)或者算法试图去直接从输入x到标签{0,1}建立一个映射(像感知机算法一样)都叫做区别学习算法。
这里,我们将要学习一个算法不是去建立一个函数P(x|y)。
这些算法被叫做生成学习算法。
例如,如果y的值表示一个样本是狗或者大象,那么p(x|y=0)代表狗的特征的分布p(x|y=1)代表着大象的特征的分布。
建立模型p(y)和p(x|y)之后,我们的算法能够用贝叶斯规则去表示y在给定x的条件下的概率
这里分母是由p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)得到。
(全概率公式)因此也同样能够表示p(x|y)和p(y)。
事实上,如果我们计算p(y|x)只是为了去做预测,我们根本不需要去算这个分母的值因为:
1Gaussiandiscriminantanalysis高斯判别分析
我们将要学习的第一个生成学习算法是高斯判别分析。
在这个模型中我们假设p(x|y)是离散的用一个正态分布函数去赋值。
在讲这个算法前,简单说一下正态分布。
1.1Themultivariatenormaldistribution
多元正态分布在n维空间中也叫做多维高斯分布,由参数μ(μ∈
)和协方差矩阵∑(∑∈
),∑>=0并且是正定的和对称的。
也写作
,他的概率密度分布是
在上面的等式中,|∑|是∑的模。
对于一个随机的变量X分布为
,均值是μ
随机变量Z的协方差的定义是Cov(Z)=E[(Z—E[Z])(Z—E[Z])T].把这个公式推广到一般化。
这个协方差也被定义为Cov(Z)=
(你可以自己证明这两个等式是相等的。
)如果X~N(μ,∑),Cov(X)=∑
下面有一些高斯分布的图像:
最左边的图像表示的是均值是0(2*1的零向量)协方差矩阵∑=1(2*2的单位矩阵)这个高斯分布也叫做标准正态分布。
中间的图像表示的均值是0和∑=0.6I;右边的表示的是∑=2I。
我们从图中可以看出来∑越大,高斯分布越“细长”当他变小时候分布变的更加“扁平”
来看更多的例子:
上面的图像表示的是高斯分布的均值都是0,协方差矩阵分别为:
最左边的图像表示的是常见的标准正态分布,我们可以看到当我们增加∑的副对角线的元素的值时,这个分布的密度变的更加“扁平”朝着45度方向(x1=x2)。
我们能够更清楚的看出来这个规律,当我们看这三副图的俯视图的时候。
下面这个是最后一个训练样本的一组俯视图通过改变∑
从最左边和中间的图像,我们可以看到通过减少协方差矩阵副对角线元素的值,这个图像密度再次变“扁平”,但是在相反的方向。
最后我们改变使的形状类似一个椭圆(最右边的图像表示出来了。
)
像我们在最后一个例子中设置的,使的∑=I,通过改变μ的值,我们也能改变这个密度。
1.2TheGaussianDiscriminantAnalysismodel高斯判别分析模型
当我们拿到一个输入变量是连续分布的随机值的分类问题的时候,这时我们能够使用高斯判别分析模型去处理,像对于p(x|y)使用多元正态分布。
这个模型是:
写出这个分布规律:
这里,我们模型使用的参数是φ,∑,μ0,μ1。
(注意这里有两个不同含义的变量值μ0和μ1,这个模型通常使用一个协方差矩阵∑)这个数据极大似然对数是:
通过最大化关于参数的函数ι,我们找到了使的极大似然函数最大化的参数值:
在下面图中可以很明显的看出来这个算法是怎么工作的:
在图中显示的是训练集,两个高斯分布的等高线已经表明把这个训练集分为两部分。
注意这两个高斯的等高线是一样的形状和方向,因此他们的使用的是一个相同的协方差矩阵∑,但是他们有不一样的均值μ0和μ1。
在这个图中另外一个就是这条直线给出了判定边界在
p(y=1|x)=0.5处。
在这个边界的一边我们可以预测y=1对大部分的输入都是成立的,在另一边我们预测y=0的。
1.3Discussion:
GDAandlogisticregression
1.3讨论:
GDA和逻辑回归
高斯判别模型和逻辑回顾之间有一个有意思的联系。
如果我们把这个数量p(y=1|x;φ;μ0;μ1;∑)看作是x的函数,我们会发现他可以被表示为:
θ是φ,∑,μ0,μ1的函数。
这确实是逻辑回归的一种形式---一个区别的算法---适用于模型p(y=1|x)。
什么时候我们会觉得一个模型比另一个更好?
一般情况下,GDA和逻辑回归有不一样的判定边界对同样一组训练集。
那一个更好呢?
我们仅仅确定p(x|y)是多元高斯分布(∑已给定)那么p(y|x)必定是一个逻辑函数。
然而,反过来这个结论是不成立的;例如:
p(y|x)是一个逻辑函数但不是代表p(x|y)是一个多元高斯函数。
这也表明GDA比着逻辑函数有着更强的模型假设能力。
那也表明当假设模型是正确的时候,GDA或更好的适合数据,也会是一个更好的模型。
特别的是,当p(x|y)确实是高斯分布,GDA就会渐渐有效。
不严格的说,对于有限制的大型数据训练集,没有什么算法比GDA更加好的算法。
(也可以说没有其他算法可以更精确的预测p(y|x))。
特别的是,在这个环境中也可以证明GDA是一个比着logistic回归更好的算法,更一般的说,即使对于小的训练集,我们也希望GDA更好。
相反的是,在一些微弱的假设中,逻辑回归函数也是很强健的和对错误的模型预测不敏感的算法。
这有一些使用逻辑回归算法预测想法。
例如:
如果x|y=0~Poisson(λ0),并且x|y=1~Poissson(λ1),这个p(y|x)就是逻辑回归函数。
逻辑回归函数在泊松分布数据上的应用很好。
但是如果我们想使用GDA在这个数据上—并且找到一个高斯分布函数在没有高斯分布的数据上---这个结果将会不好说的,有可能GDA会做的更好,也有可能更差。
总结一下:
GDA给出了很好的模型预测,并且适合于大多数的数据。
(需要很少的数据就可以学习的很好)当这个模型预测是对的或者是接近的对的。
逻辑回归模型给出了相对较差的模型预测,并且预测出来的模型和真是数据有偏差。
特别的是,当数据不是高斯分布是,在大量的预测数据条件下,逻辑回归模型几乎经常比GDA做的更好。
鉴于这个原因,在实践中,逻辑回归比GDA使用的更多更经常。
(一些有关联的需要考虑的因素影响模型更加适合贝叶斯模型,我们在接下来的章节中会讨论,但是贝叶斯算法仍然被认为是一个很好并且是一个很流行的分类算法。
)
2NaiveBayes朴素贝叶斯
在GDA算法中,特征向量x是连续的、实际的值。
现在我们讨论一种不一样的算法,训练集x是离散的值。
对于我们的激励函数的例子,考虑建造一个邮件分类系统使用机器学习。
这里我们想分类这些邮件基于是否他们是未经许可的商业邮件(垃圾邮件),或者非垃圾邮件。
当学习到做这些之后,我们接下来可以使我们的邮件分类器自动的分开这些垃圾邮件并且把他们放在一个隔开的邮件文件夹中。
分类邮件只是一个使用界限分类的文本分类的例子。
现在我们有一个训练集(一个关于垃圾邮件和非垃圾邮件的训练集)。
我们会开始我们的构建关于我们的邮件分类器通过指定关于能识别出来邮件x的特征。
我们会描绘一封邮件通过一个特征向量,这个特征向量的值是邮件中的单词在字典中的号码。
特别的是,如果一封邮件包含了第i个单词,我们会令xi=1;否则会使xi=0.
例如,这个向量:
就是用来表示一封邮件中包含单词“a”和“buy”,但是不包含“aardvark”“aaedwolf”或者“zygmurgy”。
这个给向量编码的方式叫做词汇表法,因此这个x的维度就是词汇表的长度。
已经选定了我们的特征向量,现在我们想要去构建一个比较有识别力的模型。
因此,我们不得不对p(x|y)进行建模。
但是如果我们有一个词汇表包含50000个单词,那么
x∈{0,1}^50000(x是一个50000维0和1组成的向量),并且如果我们想要对一个多元分布x精确建模那将会有2^50000个输出,我们需要有(2^50000-1)维的参数向量。
很明显这太多了。
为了对p(x|Y)进行建模,我们因此做一个很强烈的假设。
我们会假设Xi和y是相对独立的。
这个假设被叫做朴素贝叶斯假设,并且这个结果算法被叫做朴素贝叶斯分类器。
例如:
如果y=1代表垃圾邮件;“busy”是第2087个单词和“price”是第39831个单词,然后我们会假设如果我告诉你y=1(代表这个是垃圾邮件),然后x2087(表示“buy”是否出现在这个信息里)对x39831这个值是否出现在邮件中没有任何的影响。
更一般的说,这个也可以被写成
。
(这个并不表示x2087和x39831是相互独立的表示为
),然而,我们仅仅是假设x2087和x39831对于y是相对独立的。
现在有:
第一个等式代表了一般的概率的表达式,第二个式子是用了NB假设。
我们注意即使朴素贝叶斯假设是极端强烈的假设,这个结果算法对很多问题都能算出很好的结果。
我们的模型参数化
。
通常情况下,给定一个训练集(
);i=1,…,m),我们能够写出下列结合极大似然函数:
改变
以便最大化这个似然函数,
和
给了极大似然函数一个估算
在上面的等式中,“
”表示“和”。
这个参数有一个很自然的解释。
例如,
是一部分的j没有出现的垃圾邮件。
调整好参数后,预测一个新的关于x的样本,我们可以简单的计算:
并且挑选出后验概率比较大的哪些类。
最后,我们注意到当我们提升朴素贝叶斯算法主要是针对xi特征变量是二值函数时,x可以简单的取{1,2,…,ki}里面的任何值。
这里,我们会简单的说一下创建一个关于多值的p(xi|y)的模型而不是二值的。
确实,即使一些原始的输入属性是连续的数据,他们确实共同的可以使其离散化---把他转化为一个小的离散的训练集----并且适合于朴素贝叶斯。
例如:
如果我们使用一些特征xi表示居住面积,我们可以把连续值离散化为如下形式:
因此,对于一个居住面积是890平方英尺的房子,我们会把他归属到xi=3这个里面。
我们接下来会使用这些数据适应朴素贝叶斯算法,并且对p(xi|y)进行建模使用多元正态分布像前面描述的一样。
当这个原型,连续的值并不是很好的适应多元正态分布的时候,这时候使用朴素贝叶斯算法通常会得到一个更好的分类标准。
2.1Laplacesmoothing拉普拉斯平滑
朴素贝叶斯算法正如我们所介绍的那样对大多数的问题都会做的很好,但是如果做一个小小的修改,那将会使他工作的更好,特别是对文本分类的情况。
先简单的讨论一个问题使用这个算法的一般形式,然后决定怎么去修改他。
考虑垃圾邮件分类的问题,让我们做一个假设,当你完成CS229这门课程以后并且做的很出色在你的作业上,你决定在大约2003年6月分递交你的作业给NIPS会议用来出版。
(NIPS是顶尖的机器学习会议,这个递交论文的最后期限是6月底到7月初)。
因为你结束讨论这个会议在你的邮件中,你在开始也用了“nips”。
但是这是你的第一份NIPS论文,并且在这之前,你没有收到过任何的邮件里面包含“nips”这个单词;特别是“nips”没有在你的训练集中出现。
假设“nips”是第35000个单词在字典中,你的朴素贝叶斯垃圾分类因此计算他的极大似然估计用
是:
也即是说因为他以前没有看到“nips”这个单词不论是在垃圾邮件还是非垃圾邮件的训练集中,他认为看到他的可能性在每个类别中都是0.因此,当试图去判断一封包含“nips”的邮件是不是垃圾邮件,他会计算这个类的后验概率,并且得到如下结果:
这是因为每一个“
”包含一个
乘上以后结果就是0.因此,我们的算法得到0/0,并且不知道怎么去判断。
把这个问题扩大化,在统计上这是一个坏注意去估计一些事件的可能性为0仅仅是因为在你有限的训练集中没有出现这个数据。
估算这个随机多元变量z的均值从{1,2,…,k}中取值。
我们能够使用多元参数φi=p(z=i)。
给定一个关于m的训练集和观测值{z1,z2。
。
。
zm}之间独立,这个极大似然估计由下式给出:
像我们以前看到的那样,如果我们想使用极大似然估计去预测,一些φj可能会等于0,这是一个问题。
为了防止这个现象的发生,我们可以使用拉普拉斯平滑,替代上面的估计用下列式子:
这里,我们给分子加1,给分母加k。
注意
依然成立(自己验证),这个是符合要求的对于我们的概率估计要求总和为1。
并且对于所有的j有
不等于0成立,解决了我们估计等于0的问题。
在某些情况下,可以被证明拉普拉斯平滑确实给出了最好的预测模型对
。
返回朴素贝叶斯分类器,使用上拉普拉斯平滑之后我们可以得到下面的对参数的预测:
(特别的是,通常情况下不管我们有没有使用拉普拉斯平滑对
,一旦我们将要对一个垃圾邮件分类系统做预测会有一个公平的牵制,因此
会离0非常远的。
)
2.2Eventmodelsfortextclassication文本分类模型
为了结束我们的生成学习算法,我们最后讨论一个模型特别适用于文本分类。
然而,朴素贝叶斯分类器我们已经给出了,他对很多分类问题都可以做的很好,对于文本分类,这里有一个相关的模型也可以做的很好。
在这个特别的环境关于文本分类,朴素贝叶斯使用的是被叫做多值伯努利时间模型。
在这个模型红,我们假设一封邮件的生成是第一次,同时随机决定的(根据类p(y))不论是垃圾邮件还是非垃圾邮件都会给你发下一封。
然后,这个人发送邮件通过字典对照,决定是否包含在邮件中的第i个单词是否相互独立依赖概率
。
因此,这个信息的可能性给出是
这里有一个不一样的模型,叫做多项事件模型。
为了描述这个模型,我们将会使用一些不同的符号并且定义一些特征值来表示这些邮件。
我们令
表示邮件中的第i个单词。
因此
现在的值是取{1,…,|V|},|V|是字典的长度。
一封邮件有n个单词现在被转换为一个向量(x1,x2,…,xn)长度为n;注意n可以使用不同的字母代替。
例如,如果一个邮件是以“ANIPS…,”开始,那么x1=1(“a”是字典中的第一个单词),x2=35000(如果“nips”是在字典中的第35000的位置)
在这个多事件模型中,我们假设垃圾邮件还是非垃圾邮件的第一层产生方式是随机的。
然后这个发送者写邮件通过第一次产生x1从多元正态分布得到。
接下来第二个单词x2得到和x1相互独立但是也是从这个多元正态分布中获得,对于剩下的都是一样,知道所有邮件中的n个单词都产生出来。
因此,这个总体的概率是由
决定。
注意这个公式看起来想我们以前在多元伯努利事件模型中的一样,但是这里面的变量的意义和他是不一样的。
特别的是xi|y现在是一个多项式,而不是伯努利分布。
我们模型的参数还是和以前一样是
,
(对于所有的j)和
。
注意我们已经假设
适合所有的j是一样的(例如:
一个单词在邮件中分布的位置不是有J决定的)
如富哦我们给定一组训练集{(
);i=1,…,m}(
(这里ni是单词在第i个训练样本中。
)
极大似然函数是:
最大化这个极大似然函数是的参数值:
如果我们想要应用拉普拉斯平滑(想要得到更好的模型)当估计
,我们给分子加上1,给分母加上一个|V|,可以得到:
然而未必是最好的分类算法,朴素贝叶斯分类器经常能做的特别好。
他也通常是一个很好的“第一个去尝试”,给出他的单纯并且容易实现。