作者:teeyohuang
本文系原创,供交流学习使用,转载请注明出处,谢谢
声明:此系列博文根据斯坦福CS229课程,吴恩达主讲 所写,为本人自学笔记,写成博客分享出来
博文中部分图片和公式都来源于CS229官方notes。
CS229的视频和讲义均为互联网公开资源
Lecture5
主要内容:
· Generative learning algorithm(生成学习算法)
· Gaussian Discriminant Analysis(高斯判别分析)
· Digression about Gaussian(高斯分布的拓展)
· Generative / Discriminativelearning algorithm(对比生成学习算法和判别学习算法)
· Naïve Bayes(朴素贝叶斯)
· Laplace smoothing(拉普拉斯平滑)
1、 Generative learning algorithm
用之前提过的判别良性和恶性肿瘤的例子做个讲解,我们单独对训练集中的良性肿瘤样本建立一个模型,又再单独对恶性肿瘤样本建立一个模型,这样我们得到两个模型,当我们需要判别一个新的病例的时候,分别与这两个模型进行匹配,看它更符合哪个模型,这样的一个过程就是 生成学习算法。下面给出一些形式化的定义:
Discriminant learning algorithm(判别学习算法):
Generative learning algorithms(生成学习算法):
分母可以用全概率公式进行计算:
下面介绍一个生成学习算法的例子:高斯判别分析。
2、 GaussianDiscriminant Analysis
①先回顾一下(multivariate normal distribution)多维正态分布的一些特点
给出几个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/303651aa0fe327506305abffdb4c1e85.png)
再给出几个例子以探讨协方差矩阵的影响:
![](https://i-blog.csdnimg.cn/blog_migrate/6598df1179539e8b207c3cc5d84de83d.png)
②GaussianDiscriminant Analysis model 高斯判别模型
当我们处理一个分类问题时,输入变量X如果是连续值随机变量,那么我们就可以考虑使用GDA模型。对 p(x|y)使用多维正态分布建模:
求取上述似然函数的最大值,我们就得到相应的参数的估计值:
总得来说,算法做的事情如下所示:
图里的小圆圈和小叉是训练集的数据,大的环状是俯瞰二维高斯分布的轮廓图(此例中输入变量X只考虑了两个特征,即小圆圈和小叉叉是由两个坐标值确定的,所以对应的就是二维高斯分布)。
注意到两个二维高斯轮廓的形状和方向都是一样的,因为我们的协方差矩阵取得是一个,只是位置不一样,因为均值向量取了两个。
中间的那条直线,把所有训练集划分成了两个部分,一个部分我们就认为是y=0,另一个部分认为是y=1.
回想一下本文前面讲的生成学习算法的概念,你就会明白,这里的两个高斯分布,就是对训练集的数据特征进行建模,即对训练集的数据获得p(x|y=0)和p(x|y=1)。然后对于新的输入x,看这个输入x落在哪个高斯分布的范围内,那么我们就认为它更倾向于哪一类。
③讨论:GDA和Logisticregression
事实上,GDA算法和Logistic regression 有点联系,
这里的θ是其他几个参数的一种适当的表达,那么这个形式其实就是Logistic regression,用来对p(y=1|x) 进行建模。
吴老师直接给出结论:
但是呢,当作出一些较弱的假设的时候,Logistic regression 的结果更加具有鲁棒性,在建模时对于负样例的干扰不敏感。
总结起来:GDA具有更强的建模假设,并且当建模假设是正确的或至少是近似正确的时候,GDA能够更有效地处理数据(需要更少的数据量以得到好的模型)。Logisticregression使假设变得更弱,并且对与建模假设的偏差具有更强的鲁棒性。
具体来说,当数据是非高斯分布时,在大数据集的限制下,Logistic regression几乎总是比GDA做得更好。由于这个原因,在实践中,Logistic regression比GDA更常用。
3、 Naïve Bayes(朴素贝叶斯)
在上面的GDA中,输入变量X是连续的,现在我们讨论的朴素贝叶斯算法,X是取离散值。
吴老师以垃圾邮件分类的例子来阐述Naïve Bayes,其实考虑的就是文本分类的问题。现在令X这个特征向量包含n个元素,n是一个字典中单词的数量,每个元素只能取1或者0,分别代表该邮件中存在或者不存在这个单词,如下例:
编码成特征向量的词集称为词汇表(vocabulary),所以X的维度就是词汇表的size。如果我们要使用Generative learning algorithm,那么就是要对p(x|y)进行建模。考虑到X的每个元素有0或者1两种取法,如果词汇表中有50000个单词,那么若对其采用多项分布进行建模,就会用到2^50000-1个参数(我们在讲softmax时讲到过),很明显参数数目太多。那么我们就
不考虑用多项分布进行建模。
注意这个假设并不是说Xi之间是相互独立的,而是给定y的条件下相互独立的。所以我们得到如下公式:
我们这里要求X是离散值,但是有时候我们对于连续值的X采用GDA进行建模的时候,如果结果并不理想,那么我们可以对连续值进行手动离散化,比如隔几段取个区间,就像分段函数一样把连续值映射成离散值,然后再来采用Naïve Bayes 进行建模,也是可以的。
4、 Laplacesmoothing(拉普拉斯平滑)
考虑这样一个例子,如果出现一个关键单词,在你之前的所有垃圾或正常邮件中都不曾出现过,比如吴老师举例为NIPS,设这个单词是字典中的第35000个,那么计算公式为这两个参数都为0的原因是,这个单词从未出现在训练集中。也就是它的出现次数为0,进而它的后验概率为:
为了避免出现0/0的情况出现,就需要进行一下拉普拉斯平滑处理:
在分子上加1,在分母上加k,k表示y可以取的情况的数目。此例中y可取值为0和1,则k=2、
那么关于生成学习算法的讨论到此为止,