红色石头的个人网站:redstonewill.com

上节课我们主要讲了为了避免overfitting,可以使用regularization方法来解决。在之前的EinEinE_{in}上加上一个regularizer,生成EaugEaugE_{aug},将其最小化,这样可以有效减少模型的复杂度,避免过拟合现象的发生。那么,机器学习领域还有许多选择,如何保证训练的模型具有良好的泛化能力?本节课将介绍一些概念和方法来解决这个选择性的问题。

一、Model Selection Problem

机器学习模型建立的过程中有许多选择,例如对于简单的二元分类问题,首先是算法A的选择,有PLA,pocket,linear regression,logistic regression等等;其次是迭代次数T的选择,有100,1000,10000等等;之后是学习速率ηη\eta的选择,有1,0.01,0.0001等等;接着是模型特征转换ΦΦ\Phi的选择,有linear,quadratic,poly-10,Legendre-poly-10等等;然后是正则化regularizer的选择,有L2,L1等等;最后是正则化系数λλ\lambda的选择,有0,0.01,1等等。不同的选择搭配,有不同的机器学习效果。我们的目标就是找到最合适的选择搭配,得到一个好的矩g,构建最佳的机器学习模型。

假设有M个模型,对应有H1,H2,⋯,HMH1,H2,⋯,HMH_1,H_2,\cdots,H_M,即有M个hypothesis set,演算法为A1,A2,⋯,AMA1,A2,⋯,AMA_1,A_2,\cdots,A_M,共M个。我们的目标是从这M个hypothesis set中选择一个模型Hm∗Hm∗H_{m^*},通过演算法Am∗Am∗A_{m^*}对样本集D的训练,得到一个最好的矩gm∗gm∗g_{m^*},使其Eout(gm∗)Eout(gm∗)E_{out}(g_{m^*})最小。所以,问题的关键就是机器学习中如何选择到最好的矩gm∗gm∗g_{m^*}。

考虑有这样一种方法,对M个模型分别计算使EinEinE_{in}最小的矩g,再横向比较,取其中能使EinEinE_{in}最小的模型的矩gm∗gm∗g_{m^*}:

但是EinEinE_{in}足够小并不能表示模型好,反而可能表示训练的矩gm∗gm∗g_{m^*}发生了过拟合,泛化能力很差。而且这种“模型选择+学习训练”的过程,它的VC Dimension是dVC(H1∪H2)dVC(H1∪H2)d_{VC}(H_1\cup H_2),模型复杂度增加。总的来说,泛化能力差,用EinEinE_{in}来选择模型是不好的。

另外一种方法,如果有这样一个独立于训练样本的测试集,将M个模型在测试集上进行测试,看一下EtestEtestE_{test}的大小,则选取EtestEtestE_{test}最小的模型作为最佳模型:

这种测试集验证的方法,根据finite-bin Hoffding不等式,可以得到:

Eout(gm∗)≤Etest(gm∗)+O(logMNtest−−−−−√)Eout(gm∗)≤Etest(gm∗)+O(logMNtest)

E_{out}(g_{m^*})\leq E_{test}(g_{m^*})+O(\sqrt \frac{log M}{N_{test}})

由上式可以看出,模型个数M越少,测试集数目越大,那么O(logMNtest−−−−√)O(logMNtest)O(\sqrt \frac{log M}{N_{test}})越小,即Etest(gm∗)Etest(gm∗)E_{test}(g_{m^*})越接近于Eout(gm∗)Eout(gm∗)E_{out}(g_{m^*})。

下面比较一下之前讲的两种方法,第一种方法使用EinEinE_{in}作为判断基准,使用的数据集就是训练集D本身;第二种方法使用EtestEtestE_{test}作为判断基准,使用的是独立于训练集D之外的测试集。前者不仅使用D来训练不同的gmgmg_m,而且又使用D来选择最好的gm∗gm∗g_{m^*},那么gm∗gm∗g_{m^*}对未知数据并不一定泛化能力好。举个例子,这相当于老师用学生做过的练习题再来对学生进行考试,那么即使学生得到高分,也不能说明他的学习能力强。所以最小化EinEinE_{in}的方法并不科学。而后者使用的是独立于D的测试集,相当于新的考试题能更好地反映学生的真实水平,所以最小化EtestEtestE_{test}更加理想。

但是,我们拿到的一都是训练集D,测试集是拿不到的。所以,寻找一种折中的办法,我们可以使用已有的训练集D来创造一个验证集validation set,即从D中划出一部分DvalDvalD_{val}作为验证集。D另外的部分作为训练模型使用,DvalDvalD_{val}独立开来,用来测试各个模型的好坏,最小化EvalEvalE_{val},从而选择最佳的gm∗gm∗g_{m^*}。

二、Validation

从训练集D中抽出一部分K个数据作为验证集DvalDvalD_{val},DvalDvalD_{val}对应的error记为EvalEvalE_{val}。这样做的一个前提是保证DvalDvalD_{val}独立同分布(iid)于P(x,y),也就是说DvalDvalD_{val}的选择是从D中平均随机抽样得到的,这样能够把EvalEvalE_{val}与EoutEoutE_{out}联系起来。D中去除DvalDvalD_{val}后的数据就是供模型选择的训练数据DtrainDtrainD_{train},其大小为N-k。从DtrainDtrainD_{train}中选择最好的矩,记为g−mgm−g_m^-。

假如D共有1000个样本,那么可以选择其中900个DtrainDtrainD_{train},剩下的100个作为DvalDvalD_{val}。使用DtrainDtrainD_{train}训练模型,得到最佳的g−mgm−g_m^-,使用g−mgm−g_m^-对DvalDvalD_{val}进行验证,得到如下Hoffding不等式:

Eout(g−m)≤Eval(g−m)+O(logMK−−−−−√)Eout(gm−)≤Eval(gm−)+O(logMK)

E_{out}(g_m^-)\leq E_{val}(g_m^-)+O(\sqrt \frac{log M}{K})

假设有M种模型hypothesis set,DvalDvalD_{val}的数量为K,那么从每种模型m中得到一个在DvalDvalD_{val}上表现最好的矩,再横向比较,从M个矩中选择一个最好的m∗m∗m*作为我们最终得到的模型。

现在由于数量为N的总样本D的一部分K作为验证集,那么只有N-k个样本可供训练。从DtrainDtrainD_{train}中得到最好的g−m∗gm∗−g_{m^*}^-,而总样本D对应的最好的矩为gm∗gm∗g_{m^*}。根据之前的leraning curve很容易知道,训练样本越多,得到的模型越准确,其hypothesis越接近target function,即D的EoutEoutE_{out}比DtrainDtrainD_{train}的EoutEoutE_{out}要小:

所以,我们通常的做法是通过DvalDvalD_{val}来选择最好的矩g−m∗gm∗−g_{m^*}^-对应的模型m∗m∗m^*,再对整体样本集D使用该模型进行训练,最终得到最好的矩gm∗gm∗g_{m^*}。

总结一下,使用验证集进行模型选择的整个过程为:先将D分成两个部分,一个是训练样本DtrainDtrainD_{train},一个是验证集DvalDvalD_{val}。若有M个模型,那么分别对每个模型在DtrainDtrainD_{train}上进行训练,得到矩g−mgm−g_{m}^-,再用DvalDvalD_{val}对每个g−mgm−g_{m}^-进行验证,选择表现最好的矩g−m∗gm∗−g_{m^*}^-,则该矩对应的模型被选择。最后使用该模型对整个D进行训练,得到最终的gm∗gm∗g_{m^*}。下图展示了整个模型选择的过程:

不等式关系满足:

Eout(gm∗)≤Eout(g−m∗)≤Eval(g−m∗)+O(logMK−−−−−√)Eout(gm∗)≤Eout(gm∗−)≤Eval(gm∗−)+O(logMK)

E_{out}(g_{m^*})\leq E_{out}(g_{m^*}^-)\leq E_{val}(g_{m^*}^-)+O(\sqrt \frac{log M}{K})

下面我们举个例子来解释这种模型选择的方法的优越性,假设有两个模型:一个是5阶多项式HΦ5HΦ5H_{\Phi_5},一个是10阶多项式HΦ10HΦ10H_{\Phi_{10}}。通过不使用验证集和使用验证集两种方法对模型选择结果进行比较,分析结果如下:

图中,横坐标表示验证集数量K,纵坐标表示EoutEoutE_{out}大小。黑色水平线表示没有验证集,完全使用EinEinE_{in}进行判断基准,那么HΦ10HΦ10H_{\Phi_{10}}更好一些,但是这种方法的EoutEoutE_{out}比较大,而且与K无关。黑色虚线表示测试集非常接近实际数据,这是一种理想的情况,其EoutEoutE_{out}很小,同样也与K无关,实际中很难得到这条虚线。红色曲线表示使用验证集,但是最终选取的矩是g−m∗gm∗−g_{m^*}^-,其趋势是随着K的增加,它对应的EoutEoutE_{out}先减小再增大,当K大于一定值的时候,甚至会超过黑色水平线。蓝色曲线表示也使用验证集,最终选取的矩是gm∗gm∗g_{m^*},其趋势是随着K的增加,它对应的EoutEoutE_{out}先缓慢减小再缓慢增大,且一直位于红色曲线和黑色直线之下。从此可见,蓝色曲线对应的方法最好,符合我们之前讨论的使用验证集进行模型选择效果最好。

这里提一点,当K大于一定的值时,红色曲线会超过黑色直线。这是因为随着K的增大,DvalDvalD_{val}增大,但可供模型训练的DtrainDtrainD_{train}在减小,那得到的g−m∗gm∗−g_{m^*}^-不具有很好的泛化能力,即对应的EoutEoutE_{out}会增大,甚至当K增大到一定值时,比EinEinE_{in}模型更差。

那么,如何设置验证集K值的大小呢?根据之前的分析:

当K值很大时,Eval≈EoutEval≈EoutE_{val}\approx E_{out},但是g−mgm−g_m^-与gmgmg_m相差很大;当K值很小是,g−m≈gmgm−≈gmg_m^-\approx g_m,但是EvalEvalE_{val}与EoutEoutE_{out}可能相差很大。所以有个折中的办法,通常设置k=N5k=N5k=\frac N5。值得一提的是,划分验证集,通常并不会增加整体时间复杂度,反而会减少,因为DtrainDtrainD_{train}减少了。

三、Leave-One-Out Cross Validation

假如考虑一个极端的例子,k=1,也就是说验证集大小为1,即每次只用一组数据对gmgmg_m进行验证。这样做的优点是g−m≈gmgm−≈gmg_m^-\approx g_m,但是EvalEvalE_{val}与EoutEoutE_{out}可能相差很大。为了避免EvalEvalE_{val}与EoutEoutE_{out}相差很大,每次从D中取一组作为验证集,直到所有样本都作过验证集,共计算N次,最后对验证误差求平均,得到Eloocv(H,A)Eloocv(H,A)E_{loocv}(H,A),这种方法称之为留一法交叉验证,表达式为:

Eloocv(H,A)=1N∑n=1Nen=1N∑n=1Nerr(g−n(xn),yn)Eloocv(H,A)=1N∑n=1Nen=1N∑n=1Nerr(gn−(xn),yn)

E_{loocv}(H,A)=\frac1N\sum_{n=1}^Ne_n=\frac1N\sum_{n=1}^Nerr(g_n^-(x_n),y_n)

这样求平均的目的是为了让Eloocv(H,A)Eloocv(H,A)E_{loocv}(H,A)尽可能地接近Eout(g)Eout(g)E_{out}(g)。

下面用一个例子图解留一法的过程:

如上图所示,要对二维平面上的三个点做拟合,上面三个图表示的是线性模型,下面三个图表示的是常数模型。对于两种模型,分别使用留一交叉验证法来计算EloocvEloocvE_{loocv},计算过程都是每次将一个点作为验证集,其他两个点作为训练集,最终将得到的验证误差求平均值,就得到了Eloocv(linear)Eloocv(linear)E_{loocv}(linear)和Eloocv(constant)Eloocv(constant)E_{loocv}(constant),比较两个值的大小,取值小对应的模型即为最佳模型。

接下来,我们从理论上分析Leave-One-Out方法的可行性,即Eloocv(H,A)Eloocv(H,A)E_{loocv}(H,A)是否能保证EoutEoutE_{out}的矩足够好?假设有不同的数据集D,它的期望分布记为εDεD\varepsilon_D,则其Eloocv(H,A)Eloocv(H,A)E_{loocv}(H,A)可以通过推导,等于Eout(N−1)Eout(N−1)E_{out}(N-1)的平均值。由于N-1近似为N,Eout(N−1)Eout(N−1)E_{out}(N-1)的平均值也近似等于Eout(N)Eout(N)E_{out}(N)的平均值。具体推导过程如下:

最终我们得到的结论是Eloocv(H,A)Eloocv(H,A)E_{loocv}(H,A)的期望值和Eout(g−)Eout(g−)E_{out}(g^-)的期望值是相近的,这代表得到了比较理想的Eout(g)Eout(g)E_{out}(g),Leave-One-Out方法是可行的。

举一个例子,使用两个特征:Average Intensity和Symmetry加上这两个特征的非线性变换(例如高阶项)来进行手写数字识别。平面特征分布如下图所示:

Error与特征数量的关系如下图所示:

从图中我们看出,随着特征数量的增加,EinEinE_{in}不断减小,EoutEoutE_{out}先减小再增大,虽然EinEinE_{in}是不断减小的,但是它与EoutEoutE_{out}的差距越来越大,发生了过拟合,泛化能力太差。而EcvEcvE_{cv}与EoutEoutE_{out}的分布基本一致,能较好地反映EoutEoutE_{out}的变化。所以,我们只要使用Leave-One-Out方法得到使EcvEcvE_{cv}最小的模型,就能保证其EoutEoutE_{out}足够小。下图是分别使用EinEinE_{in}和EoutEoutE_{out}进行训练得到的分类曲线:

很明显可以看出,使用EinEinE_{in}发生了过拟合,而EloocvEloocvE_{loocv}分类效果更好,泛化能力强。

四、V-Fold Cross Validation

接下来我们看看Leave-One-Out可能的问题是什么。首先,第一个问题是计算量,假设N=1000,那么就需要计算1000次的EloocvEloocvE_{loocv},再计算其平均值。当N很大的时候,计算量是巨大的,很耗费时间。第二个问题是稳定性,例如对于二分类问题,取值只有0和1两种,预测本身存在不稳定的因素,那么对所有的EloocvEloocvE_{loocv}计算平均值可能会带来很大的数值跳动,稳定性不好。所以,这两个因素决定了Leave-One-Out方法在实际中并不常用。

针对Leave-One-Out的缺点,我们对其作出了改进。Leave-One-Out是将N个数据分成N分,那么改进措施是将N个数据分成V份(例如V=10),计算过程与Leave-One-Out相似。这样可以减少总的计算量,又能进行交叉验证,得到最好的矩,这种方法称为V-折交叉验证。其实Leave-One-Out就是V-折交叉验证的一个极端例子。

Ecv(H,A)=1V∑v=1VE(V)val(g−V)Ecv(H,A)=1V∑v=1VEval(V)(gV−)

E_{cv}(H,A)=\frac1V\sum_{v=1}^VE_{val}^{(V)}(g_V^-)

所以呢,一般的Validation使用V-折交叉验证来选择最佳的模型。值得一提的是Validation的数据来源也是样本集中的,所以并不能保证交叉验证的效果好,它的模型一定好。只有样本数据越多,越广泛,那么Validation的结果越可信,其选择的模型泛化能力越强。

五、总结

本节课主要介绍了Validation验证。先从如何选择一个好的模型开始切入,例如使用EinEinE_{in}、EtestEtestE_{test}都是不太好的,最终使用EvalEvalE_{val}来进行模型选择。然后详细介绍了Validation的过程。最后,介绍了Leave-One-Out和V-Fold Cross两种验证方法,比较它们各自的优点和缺点,实际情况下,V-Fold Cross更加常用。

注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程

关注公众号并输入关键字“jspdf”获得该笔记的pdf文件哦~

更多AI资源请关注公众号:红色石头的机器学习之路(ID:redstonewill)

台湾大学林轩田机器学习基石课程学习笔记15 -- Validation相关推荐

  1. 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了非线性分类模型,通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行分类,分析了非线性变换可能会使计算复杂度 ...

  2. 台湾大学林轩田机器学习基石课程学习 笔记资料汇总

    笔记: 红色石头的专栏(写得非常好) 课后练习: 機器學習基石(Machine Learning Foundations) 机器学习基石 课后习题链接汇总 https://download.csdn. ...

  3. 台湾大学林轩田机器学习基石课程学习笔记1 -- The Learning Problem

    红色石头的个人网站:redstonewill.com 最近在看NTU林轩田的<机器学习基石>课程,个人感觉讲的非常好.整个基石课程分成四个部分: When Can Machine Lear ...

  4. 台湾大学林轩田机器学习基石课程学习笔记11 -- Linear Models for Classification

    红色石头的个人网站:redstonewill.com 上一节课,我们介绍了Logistic Regression问题,建立cross-entropy error,并提出使用梯度下降算法gradient ...

  5. 台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression

    红色石头的个人网站:redstonewill.com 上一节课,我们介绍了Linear Regression线性回归,以及用平方错误来寻找最佳的权重向量w,获得最好的线性预测.本节课将介绍Logist ...

  6. 台湾大学林轩田机器学习基石课程学习笔记8 -- Noise and Error

    红色石头的个人网站:redstonewill.com 上一节课,我们主要介绍了VC Dimension的概念.如果Hypotheses set的VC Dimension是有限的,且有足够多N的资料,同 ...

  7. 台湾大学林轩田机器学习基石课程学习笔记7 -- The VC Dimension

    红色石头的个人网站:redstonewill.com 前几节课着重介绍了机器能够学习的条件并做了详细的推导和解释.机器能够学习必须满足两个条件: 假设空间H的Size M是有限的,即当N足够大的时候, ...

  8. 台湾大学林轩田机器学习基石课程学习笔记5 -- Training versus Testing

    红色石头的个人网站:redstonewill.com 上节课,我们主要介绍了机器学习的可行性.首先,由NFL定理可知,机器学习貌似是不可行的.但是,随后引入了统计学知识,如果样本数据足够大,且hypo ...

  9. 台湾大学林轩田机器学习基石课程学习笔记3 -- Types of Learning

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了解决线性分类问题的一个简单的方法:PLA.PLA能够在平面中选择一条直线将样本数据完全正确分类.而对于线性不可分的情况,可以使 ...

最新文章

  1. 线上应用故障排查之二:高内存占用
  2. manjaro linux内核,分享|一个值得推荐的发行版:Manjaro Linux
  3. C#控制台程序,发送邮件,可带附件
  4. crontab 周日_linux之crontab命令
  5. “拼木头”算法挑战赛:禁忌搜索算法,用Javascript 跑
  6. 面向过程和面向对象的本质理解
  7. WordPress网站访问慢解决方案(超详细图文教程)
  8. 一篇关于Content Type的文章
  9. Linux下安装与使用本地的perl模块
  10. javascript中常用的对象创建方式有哪些?
  11. chrome java支持_如何将JAVA插件支持Chrome
  12. pic1路AD转换c语言,PIC单片机AD转化器编程方法
  13. c++回调函数详解及实现(lambda)
  14. 国内使用谷歌地图方案
  15. 用Python实现一个商场管理系统(附源码)
  16. 为什么现代物理学离不开量子论和相对论?
  17. Unity资源加载简析(一)Resources
  18. python+django+layUI+MySQL+TSC打印机搭建4G设备管理平台项目(二)——过程中的难点记录
  19. Java中的专业术语
  20. 我有一台云服务器,可以干什么?

热门文章

  1. RHEL 6.x 搭建企业级FTP
  2. poj 1515+poj 1438(边双连通)
  3. HD 2048 数塔 DP(简单递推)
  4. NYOJ 420 P次方求和
  5. NYOJ 1186 心理阴影(两个圆环的相交面积)
  6. NYOJ 485 A*B Problem
  7. 阿里云-AliRepo
  8. 频繁项集挖掘之Aprior和FPGrowth算法
  9. python并发之concurrent.futures
  10. 清北学堂模拟赛d3t2 b