本讲视频及讲义链接
生成学习算法
生成学习算法和判别学习算法的区别
判别学习算法(Discriminative)
我们之前学习过Logistic算法来解决分类问题,回想一下分类过程:我们使用所有训练样本训练出一个函数, 之后若要预测一个样本的类别,只需要将这个样本的特征作为得到的函数 的输入,看看输出是啥即可。类似这样的分类方法,称为判别学习算法,判别学习算法一般有以下两种类型:
直接学习 。 给出一个 ,得到 的值,接着比较 和 时 的值的大小,就能够判定x的类别。
或直接学习一个算法 ,就和之前的logistic分类一样。
生成学习算法(Generative)
以二分类问题为例:假设我们需要对一组癌症肿瘤样本进行分类,得到一个能够区分良性肿瘤和恶性肿瘤的算法。在生成学习算法的思路中,不是直接用样本去拟合一个函数 来预测新的输入的类别,而是分别对训练样本中的良性样本和恶性样本进行拟合,得到两个模型,接着当需要预测一个新肿瘤样本的类别的时候,就用新样本的特征数据分别输入两个模型中,哪个模型的拟合程度高,就认为新样本属于哪个类别。
形式化地说,生成学习算法对 和 进行建模,接着通过贝叶斯公式计算出 ,式中的 可以通过 计算出。
生成学习算法的例子——高斯判别分析
假设 且是一个连续值,高斯判别分析要求 符合高斯分布。
多元(高维)高斯分布:是一维高斯分布的推广, 其中随机变量Z是符合高维高斯分布的一个高维向量 , 是协方差矩阵, 是高斯分布的均值。这样高维高斯分布的概率密度公式就是 这个公式不需要记,但是需要知道 和 的含义以及它们对高斯分布图像的影响。
补充:协方差矩阵的知识
是单位矩阵, 是零向量
此时的图像一般被认为是标准图像:
减小 中对角线的值
实际上是减小了各个维度上随机变量的方差,因此各维数据都更加聚集,图像整体更加“瘦长”:
增大 中对角线的值
实际上是增大了各个维度上随机变量的方差,因此各维数据都更加分散,图像整体更加“矮胖”:
增加非主对角线上的元素值
实际上增加了各维随机变量的关联性:
-
0.5
-
0.8
减小非主对角线上的元素值
实际上增加了各维变量的关联性(另一个方向)
改变 的值
实际上改变了图像的位置
用高斯判别分析来分类两种肿瘤样本
俯视图:
这个分割线和Logistic方法梯度上升得出的分割线的斜率有些不同,接下来介绍高斯判别分布的具体过程。
-
符合伯努利分布
因此
-
符合高斯分布
因此
-
联合似然性(joint likelyhood)
上述公式中,我们的似然性公式中的每一个因子是 是联合分布,因此这个式子称为"联合似然性"公式,而在判别学习算法(如Logistic)中,我们的似然公式如下:
这个式子中的每个因子为 ,因此这个似然公式称为“条件似然公式(conditional likelyhood)”
现在,假设给定m个样本,我们开始具体的建模和预测过程:
根据训练样本数据计算出极大似然分布参数
-
实质上计算的是所有非恶性肿瘤样本 的特征的均值。
-
实质上计算的是所有恶性肿瘤样本 的特征的均值。
-
将这些公式及具体的样本数据代入,就能计算出 。
根据 进行预测
上式中的 的含义是:使得 的值最大的 。由于 的值与 无关,所以上式化简了分母
如果y是均匀分布的,也就是取得每种类别的概率都相同,那么上式可以继续化简:
这种情况并不常见,因此多数使用的还是式子:
而 已经由训练样本数据拟合出来,因此只需要代入要预测的样本特征 ,求出 即可。
具体求解方法视频和讲义中都没讲,我认为应该是将要预测的 代入之前推得的 和 的表达式中(此时表达式的参数已经由极大似然估计求得),之后比较大小即可。
高斯判别分析和Logistic的关系
一个有趣的事情是,如果你将 看做是 的函数,那么这个函数将能够用 表示,这和sigmod函数的表达式是一致的。但是高斯判别分析(GDA)和Logstic方法得到的两个函数的图像是不一样的(虽然它们的形式是一样的)。
注:根据贝叶斯公式,
而右式中的所有式子的参数都已经用训练样本拟合出来,因此可以计算出左式的数学表达式,发现计算结果是一个sigmod具有相同形式的函数。
生成学习算法和判别学习方法的权衡
正如上一节提及的,在高斯判别分析中,我们假设 符合高斯分布,从而得出一个结论(没有提供证明): 的分布函数符合logistic后验分布函数 。
其实,不仅是高斯分布,如果 和 都符合泊松分布,上述结论仍然成立,即
实际上有更一般的结论:如果 且 ,则 是logistic函数。这其实反过来印证了logistic函数的鲁棒性,因为它能够较好地拟合指数分布族能够表示的分布的数据。
生成学习算法的优势
在已知 符合哪种分布的情况下,使用生成学习算法的效果往往比使用判别学习算法的效果好。以高斯判别分析为例,它假设 符合高斯分布,且之前的结论告诉我们在这个假设下推导出的 是符合logistic函数形式的;因此可以认为生成学习算法使用了比判别学习算法更强的假设,因此更加具有针对性,如果使用了正确的分布模型(比如对一个组 符合或近似符合高斯分布的样本使用高斯判别分布),那么将会得到比判别分析更好的效果。反之,如果不知道 符合哪种分布,那么具有更加弱的假设的判别学习算法将很有可能得到更好的效果。
生成学习算法需要更少的数据来拟合模型。这仍然是因为判别学习算法做了更弱的假设,因此如果要拟合出和生成学习算法同等效果的模型(假设生成学习算法选用了正确的分布),判别学习算法需要更多的数据来保证模型的鲁棒性。
另一个生成学习算法——朴素贝叶斯(Naive Bayes)
使用朴素贝叶斯算法来区分垃圾邮件
特征选择
我们使用一个代表单词列表的位向量来描述邮件,如
向量中的每一个元素代表了一封邮件中是否出现对应的单词。这个列表可以通过读取大量近期邮件(如近两个月的邮件)的内容来获得。
判别学习算法不可取
现在我们说明拟合出一个函数 来作为判定函数是不可取的:
特征选择的方式决定了特征向量 的维数是很大的(一般是50000这个数量级),因此 共有 种可能的取值。 如果使用多项式分布(这是比较适合这个问题的概率分布)来拟合,则需要拟合 个参数,这是很难的,因此需要令求捷径来解决这个问题。
注:和由伯努利分布推导出sigmod函数的推导过程一样,多项式分布的函数也可以通过指数分布族自然推出(具体过程在上一讲的讲义中)
生成学习算法——朴素贝叶斯假设
为了解决这个问题,我们需要做出一个很强的假设:
朴素贝叶斯假设:对给定的 , 是条件独立的。
根据概率论的链式法则(注意这个式子没有用到任何假设):
使用贝叶斯假设之后:
贝叶斯假设通俗来讲就是:不论一封邮件是不是垃圾邮件,那单词之间出现的概率都不会相互影响,比如单词"a"的出现将不会影响单词"buy"出现的概率。也就是在你了解了一封邮件是不是垃圾邮件的前提下,知道其中的一部分词汇并不会帮助你预测其中可能出现的其他词汇。
这个假设是不可能成立的,因为一封垃圾邮件中出现"csapp"的概率显然比出现"buy"的概率要小得多;如果一封邮件中出现了"cs299",那么邮件中很有可能会出现这个课程的老师或助教的名字。
虽然这个假设字面上是错误的,但是它在文本、邮件、网页内容的分类上的效果是非常好的(这就很神奇:O)
开始建模
这个模型的参数如下:
接着写出联合似然分布的表达式:
用训练样本数据拟合出使得上式取最大值的参数:
上面第三个式子的含义是:遍历每个垃圾邮件,统计其中出现单词列表中第个单词的邮件的频率; 的含义就是垃圾邮件中包含单词列表中第j个单词的邮件的概率。
进行预测
接下来根据得到的参数来预测新样本的类别:
首先在贝叶斯假设的前提下计算:
然后计算:
比较上述两式的结果,哪个大,新样本就属于哪一类。
拉普拉斯平滑(Laplace Smoothing)
上面介绍的贝叶斯分类器存在一个问题:
在判定一个新样本的类别时,如果这个新样本中出现了一个训练样本中从未出现过的词,比如"NIPS",那么根据链式法则和贝叶斯假设:
假设“NIPS”是词典中的第30000个词,那么根据极大似然估计得到的参数:
因此
这是个未定义的值。也就是说,如果新的样本中出现了一个之前没有出现过的词,那么这个词不论在垃圾邮件还是非垃圾邮件中出现的概率都是0,这时贝叶斯分类器将会无法正确判定这个样本属于哪个类别。
这是因为用训练样本拟合参数时,我们仅仅因为训练样本数据中没有出现过某个词,就认为未来出现这个词的概率为0,这显然是不合理的。
因此需要一种方式来修正参数,那就是Laplace平滑:
之前我们使用公式
来预测 ,如果 , 那么
也就是说如果训练样本中没有垃圾邮件,那么贝叶斯分类器将会认为未来出现垃圾邮件的概率也是0。
在Laplace平滑中,改用下面的方法计算:
这样,在上述同等情况下, 的值就变为:
这显然是一个更合理的参数,因为训练样本中未出现垃圾邮件,所以我们预测接下来出现垃圾邮件的概率较小(而不是0).
同理,对其它参数也应用Laplace平滑:
贝叶斯分类中的Laplace平滑的过程总结来说就是分子的每一项加上1,分母加上总的类别数。