Andrew Ng机器学习公开课笔记 -- Regularization and Model Selection

网易公开课,第10,11课 
notes,http://cs229.stanford.edu/notes/cs229-notes5.pdf

 

Model Selection

首先需要解决的问题是,模型选择问题,如何来平衡bais和variance来自动选择模型?比如对于多项式分类,如何决定阶数k,对于locally weighted regression如何决定窗口大小,对于SVM如何决定参数C 
For instance, we might be using a polynomial regression model  , and wish to decide if k should be 
0, 1, . . . , or 10.  Alternatively, suppose we want to automatically choose the bandwidth parameter τ for locally weighted regression, or the parameter C for our ℓ1-regularized SVM.

 

Cross validation

最典型的就是交叉验证,有3种方法,

hold-out cross validation (also called simple cross validation) 
用70%的数据作为训练集,用30%数据作为测试集,找出训练误差最小的h(7:3是比较典型的比例) 
这个方法的问题是,我们浪费了30%的数据,即使你在选定model后,拿整个数据集再做一遍训练,也无法改变你只用了70%来选择最优模型的事实 
尤其对于一些领域,数据集的收集的代价是很高的,就不太合适

k-fold cross validation,通常k=10 
把数据集随机分为k份,用k-1份来训练,用剩下的那份来测试,这样的过程可以进行k次(不同的组合) 
最终选取平均测试误差最小的h 
这个的问题,显然是计算量比较大

leave-one-out cross validation 
k-fold的特例,k=m,即k等于样本数,一份就是一个样本 
适用于样本非常少的情况

 

Feature Selection

One special and important case of model selection is called feature selection. 
对于比如文本分类问题,垃圾邮件分类,会有很大量的features,但其实只有其中一小部分和分类问题相关,比如很多stop word,a,the,都和分类不相关,而buy,shop等比较相关的只是一小部分,所以我们需要减少feature数来降低复杂度

Given n features, there are  possible feature subsets, thus feature selection can be posed as a model selection problem over  possible models.

显然计算和比较那么多的模型是不现实的,所以我们用heuristic search procedure,启发式的方式,去找到一个good feature subset,

forward search OR backward search

属于贪心算法,forward是一个个加,backward是一个个减,然后每次加减都通过cross validation做次局部最优的选择,即加个误差最小的,或减个误差最大的 
这种需要通过训练测试的方式来选择的,称为wrapper model feature selection,因为它就像wrapper,需要反复调用学习算法来评估feature。 
wrapper模型效果还是不错的,问题就是计算量比较大,需要调用这个数量级的次数的训练算法

Filter feature selection

效果没有wrapper那么好,但是比较cheaper,思路就是计算每个feature的score S(i) that measures how informative each feature xi is about the class labels y,最终我们只需要pick分数最高的那k个features就可以了,最常用的score就是mutual information 
In practice, it is more common (particularly for discrete-valued features xi) to choose S(i) to be the mutual informationMI(xi, y) between xi and y:

为了更直观的理解mutual information,这个式子还可以表示成,Kullback-Leibler (KL) divergence:

这个KL表示p(xi, y) and p(xi)p(y)的差异程度, 
如果x和y是没有关系的,即独立的,那么 ,即KL-divergence为0

 

特征选择常用算法综述,这篇综述很好,看这个就ok了

 

Bayesian statistics and regularization

这节内容主要讨论如何用贝叶斯规范化来解决过拟合(overfit)问题

可以想想前面碰到的回归问题,都是用的最大似然估计,

即找到让训练集最为正确的那组参数,这样很容易过拟合 
从统计学上看,最大似然估计,是一种frequentist statistics,即仅仅用频率来客观的估计概率,不加入任何主观的先验观念 
对于这里,就是完全根据客观出现的训练集来估计真实的参数 
并且对于frequentist 而言,最优参数是客观存在的,这里只是估计出他的真实值,所以式子中用的是“;”而不是“,”,表示本身并不作为条件

Frequentist or Bayesian

http://cos.name/2012/12/the-odyssey-of-stat-frequentist-or-bayesian/

那么在统计学中,对应于frequentist statistics的学派,叫Bayesian statistics 
对于Bayesian而言,首先参数是个随机值,任何值都有可能,只是出现概率不同而已 
再者,对于未知的参数,Bayesian会先给出主观的先验概率p()作为基础,再结合客观频率,综合给出结果

根据bayes定理,S表示训练集

分子比较好理解,分母我不理解,不过没事,反正仅仅需要比较大小,分母都是可以略去的

于是可以得到,

可以看看和上面极大似然的差别, 
首先这里是作为条件的,注意是“,”而不是前面的“;”,但这其实并不影响p的计算,无论“,”或“;”,p的计算公式都是一样的 
所以真正的不同只是加上了先验概率p()

为何加上先验概率就可以防止过拟合?

对于先验概率p(),常常是使用高斯分布(当然也可以使用其他的,但是高斯最常见) 

你可以想想对于均值为0的高斯分布,如果要让p() max,那么就越接近于0 
为0时,相当于消除了一维,就达到了balance模型复杂度的效果

实际的效果证明, Bayesian logistic regression在文本分类上有很好的效果,即便对于文本分类,特征数n要远远大于训练集m

 

下面的内容其实在第11课占很多的时间,但是在讲义中是没有的 
关注的问题,其实可以说是ML实战,觉得挺有意义的,所以记录在这里

Debugging Learning Algorithms

在使用ML算法,一定会碰到的问题是,如果算法实验的效果或准确率很差,我们应该怎样改进?

比如,用贝叶斯logistics回归做垃圾邮件过滤,结果误差有20%,如何改进? 
原因有可能有很多, 
训练样本集不够多,增加训练样本 (高variance) 
特征太多,减少特征数                (高variance) 
特征太少,增加特征数                 (高bias) 
特征选取的不恰当,选取更好的特征  (高bias)

梯度下降迭代的不够多,没有收敛     (优化算法问题) 
或应该使用其他的最优化算法,如牛顿 (优化算法问题) 
目标函数中的参数不够合理,调节参数 (目标函数问题) 
可能应该使用SVM。。。。。。        (目标函数问题) 

当然可能有几百种改进的方法,其中一些是有效的,也许是无效的,但都会耗费很多的时间 
所以,我们需要准确的找到优化的方向

首先需要确定的一点就是,当前的误差是高bias还是高variance?

这个其实很简单, 
如果训练误差远远小于测试误差,那么一定是高variance误差 
如果是高bias,那么训练误差也一定会很大,比如用线性函数去拟合二次函数

那么对于高variance误差,增加训练集就会比较有效果 
因为随着训练集m的增大,测试误差会逐渐变小,而训练误差会逐渐变大,从而缩小他们之间的差距 
为何训练集m变大,训练误差会变大,因为训练集越大,就越难完美的拟合

而对于高bias误差,训练误差已经超出预期,那么增加训练集是没有任何效果的,因为增加训练集只会更多增加训练误差,而也无法减小测试误差

 

其次,需判断的是,到底是因为优化算法有问题导致没有收敛,还是目标函数本身就选择的不对? 
比如还是上面的例子, 
你用贝叶斯logistics回归做垃圾邮件过滤,发现结果不是很满意,于是你使用SVM试了下,发现结果比较好,但是出于简单和效率考虑,你还是想用贝叶斯logistics回归 
此时如何定位问题? 
这里对于贝叶斯logistics回归或SVM,最终的目标都是拟合出最优的θ参数,即找到使目标函数J(θ)最大的θ 
那么这里我们可以把logistics回归或SVM得到的参数θ1和θ2,都代入贝叶斯logistics回归的目标函数J(θ)中,

如果J(θ1) < J(θ2), 即SVM确实找到了更优的参数θ,那么一定是我们的优化函数有问题,没有收敛到最优参数 
如果J(θ1) > J(θ2), 即SVM找到的参数不是更优参数,但是他实际的分类效果却比贝叶斯logistics回归好,说明当前的目标函数无法很好的描述这个问题,需要改变目标函数

其实我觉得这个方法有个问题,就是一定要找到类似SVM这样比当前算法效果好的相应算法 
NG又举了个他做直升机自动驾驶的例子,如果发现效果不好,可能的原因有 
直升机模拟器,无法模拟真实环境 
使用的强化学习算法有问题,无法收敛 
目标函数或Cost function有问题

那么他是如何来进行诊断的? 
首先他要确认是否是模拟环境的问题,方法是用训练出的参数,分别在模拟环境和真实环境中实验,如果模拟环境中运行的很好,而真实环境的效果很差,那么就是模拟环境有问题 
再者,和上面的思路一样,要找到一个比当前效果好的case 
上面使用的是SVM,而这里他是让人来实际驾驶直升机从而得到一组参数,人驾驶的效果一定是很好的 
下面就和上面一样,如果这组参数是更优参数,那么就是最优化算法的问题,否则就是目标函数有问题

 

Error Analysis

这个其实是一个比较简单的思路

因为在实际系统中,会有很多组件组成,当我们要优化这个系统时,首先需要知道这个系统的bottleneck在什么地方 
比如,NG举例,从图片中识别人的系统, 
会有,背景去除,人脸识别,眼睛识别,鼻子识别,logistics回归算法。。。 
到底优化哪个会对系统的整体提升最大

方法是,如果要知道这个模块提升的空间,就将该模块替换成基准值,即100%正确的值,这样看系统准确率的提升

比如将背景去除替换成基准值时,准确率从80%提升到81%,那么你就知道这是不值得优化的,因为就是优化到100%也只能提升整体的1% 
如果将人脸识别替换成基准值,准确率从80%提升到90%,那么你就知道这就是系统的bottleneck

另外一个思路也很自然,就是当系统有很多特性的时候,你想知道到底每个特性对系统的贡献有多大? 
比如对于垃圾邮件分类,你加了一些特别的特性,发送IP,标点符号,语法分析 
如果想知道,每个特性对系统的贡献,

方法是,把这个特性拿掉,看看系统的损失是多大,称为ablate分析

本文章摘自博客园,原文发布日期:2014-06-25

时间: 2025-01-30 00:50:12

Andrew Ng机器学习公开课笔记 -- Regularization and Model Selection的相关文章

Andrew Ng机器学习公开课笔记 -- 支持向量机

网易公开课,第6,7,8课  notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf SVM-支持向量机算法概述, 这篇讲的挺好,可以参考   先继续前面对线性分类器的讨论,  通过机器学习算法找到的线性分类的线,不是唯一的,对于一个训练集一般都会有很多线可以把两类分开,这里的问题是我们需要找到best的那条线 首先需要定义Margin,  直观上来讲,best的那条线,应该是在可以正确分类的前提下,离所有的样本点越远越好,why?  因为越

Andrew Ng机器学习公开课笔记–Principal Components Analysis (PCA)

网易公开课,第14, 15课  notes,10 之前谈到的factor analysis,用EM算法找到潜在的因子变量,以达到降维的目的 这里介绍的是另外一种降维的方法,Principal Components Analysis (PCA), 比Factor Analysis更为直接,计算也简单些 参考,A Tutorial on Principal Component Analysis, Jonathon Shlens   主成分分析基于, 在现实中,对于高维的数据,其中有很多维都是扰动噪音

Andrew Ng机器学习公开课笔记 -- 学习理论

网易公开课,第9,10课  notes,http://cs229.stanford.edu/notes/cs229-notes4.pdf 这章要讨论的问题是,如何去评价和选择学习算法   Bias/variance tradeoff 还是用这组图,学习算法追求的是generalization error(对未知数据的预测误差),而不是training error(只是对训练集) 最左边,underfit,我们说这种学习算法有较大的bias  Informally, we define the b

Andrew Ng机器学习公开课笔记–Reinforcement Learning and Control

网易公开课,第16课  notes,12 前面的supervised learning,对于一个指定的x可以明确告诉你,正确的y是什么  但某些sequential decision making问题,比如下棋或直升机自动驾驶  无法确切知道,下一步怎么样是正确的,因为这是一个连续和序列化的决策,比如直到最终直升机crash或下棋输了,你才知道之前的选择是不好的,但中间那么多步决策,到底是哪部分出了问题,可见这是个比较复杂的问题 强化学习,基本思路就是,既然不知道怎样是正确的,那就随便try,然

Andrew Ng机器学习公开课笔记 – Factor Analysis

网易公开课,第13,14课  notes,9 本质上因子分析是一种降维算法  参考,http://www.douban.com/note/225942377/,浅谈主成分分析和因子分析 把大量的原始变量,浓缩成少数几个因子变量  原始变量,代表浅层的表面现象,所以一定是很多和繁杂的  而因子变量,是代表深层的本质,因,是无法直接观察到的 所以因子分析,就是拨开现象发现本质的过程...很牛逼的感觉 举个例子,观察一个学生,你可以统计到很多原始变量, 代数,几何,语文,英语各科的成绩,每天作业时间,

Andrew Ng机器学习公开课笔记 -- 朴素贝叶斯算法

网易公开课,第5,6课  notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf 前面讨论了高斯判别分析,是一种生成学习算法,其中x是连续值  这里要介绍第二种生成学习算法,Naive Bayes算法,其中x是离散值的向量  这种算法常用于文本分类,比如分类垃圾邮件 首先,如何表示一个文本,即x?   以上面这种向量来表示,字典中的词是否在该文本中出现  其中每个词,可以看作是一个特征,对于特征的选取,可以过滤到stop word,或只选取出

Andrew Ng机器学习公开课笔记 -- Logistic Regression

网易公开课,第3,4课  notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 前面讨论了线性回归问题, 符合高斯分布,使用最小二乘来作为损失函数 下面继续讨论分类问题,分类问题和回归问题不同在于Y的取值是离散的  我们先讨论最简单的binary classification,即Y的取值只有0和1  分类问题一般不会使用回归模型,因为回归模型是输出是连续的,而分类问题需要的输出是离散的 但是一定要用也不是不可以,比如这里继续使用线性回归模型

Andrew Ng机器学习公开课笔记 -- Generalized Linear Models

网易公开课,第4课  notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 前面介绍一个线性回归问题,符合高斯分布  一个分类问题,logstic回归,符合伯努利分布 也发现他们有些相似的地方,其实这些方法都是一个更广泛的模型族的特例,这个模型族称为,广义线性模型(Generalized Linear Models,GLMs) The exponential family 为了介绍GLMs,先需要介绍指数族分布(exponential fa

Andrew Ng机器学习公开课笔记–Independent Components Analysis

网易公开课,第15课  notes,11 参考, PCA本质是旋转找到新的基(basis),即坐标轴,并且新的基的维数大大降低  ICA也是找到新的基,但是目的是完全不一样的,而且ICA是不会降维的 对于ICA,最经典的问题,"鸡尾酒会"问题  在鸡尾酒会,上很多人同时在说话,还有背景音乐,如果我们放若干个话筒进行声音采集  是否可以从采集到的数据中,分离出每个人独立的声音 假设有n个不同的人,m个时间采集点,一般会用和人数一样多的话筒,也是n个  is an n-dimensiona