台湾大学林轩田《机器学习基石》学习笔记第15讲—— Validation

上节课我们引入了augmented error,并学习如何通过加入regularizer来限制model complexity,并求得augmented error的最小值。从开始到现在我们已经学习到很多模型,但究竟哪些模型能得到更好的泛化能力呢?这节课我们将来探讨一下这个问题。
一、Model Selection Problem
在这里插入图片描述

对于一个简单的binary classification问题,模型上,我们就有多维的选择:

  • 算法A的选择(PLA、pocket、linear regression…)
  • 迭代次数T的选择
  • 学习速率η的选择
  • 特征转换feature transform φ的选择
  • 正则化regularizer的选择
  • 正则化系数λ的选择

不同的选择搭配,有不同的机器学习效果。
在这里插入图片描述

  • 我们的目标是找到一个g使得Eout最小,但实际情况是Eout我们并不知道,我们并没有办法去衡量Eout究竟是多少。
  • 那究竟如何来选择这个g呢,或者说是模型?
    在这里插入图片描述
  • 我们首先想到可以通过Ein来做选择,只要Ein越小越好,这样是否可行呢?
  • 我们知道 ϕ 1126 \phi_{1126} ϕ1126找到的Ein往往会比 ϕ 1 \phi_{1} ϕ1要小,但这个代价会导致严重的overfitting,即bad generalization;
  • 那假设我们在几个不同的Hypothesis set中分别找出最小的Ein再做比较呢?也不行,因为等效的Hypothesis set变大了, d v c d_{vc} dvc变大,同样容易导致overfitting,获得很差的generalization;
  • 所以通过Ein来选择是不可行的!
    在这里插入图片描述
  • 那么通过一个另外的测试数据集 D t e s t D_{test} Dtest可行么?
  • 根据finite-bin Hoffding不等式,只要我们的模型个数M越小, D t e s t D_{test} Dtest数目越大,那么 E t e s t E_{test} Etest就会越接近 E o u t E_{out} Eout;
  • 但是问题是这样的 D t e s t D_{test} Dtest我们并不好获得。
    在这里插入图片描述
  • 既然使用 E i n E_{in} Ein E t e s t E_{test} Etest都有自己的局限性,但其优点分别是找到一个小的 E i n E_{in} Ein和使用 E t e s t E_{test} Etest来检验generalization,那么折中一下:
  • 找到一个 E v a l E_{val} Eval,它是通过数据集 D v a l ⊂ D D_{val}\subset D DvalD,一来 D v a l D_{val} Dval是我们方便获取的,二来 E v a l E_{val} Eval可以用来替代 E t e s t E_{test} Etest
  • 验证集 D v a l D_{val} Dval是从训练集D中抽取并独立出来的,模型的训练使用除了 D v a l D_{val} Dval之外的数据,模型的验证则使用验证集 D v a l D_{val} Dval

二、Validation
在这里插入图片描述

  • D= D t r a i n D_{train} Dtrain+ D v a l D_{val} Dval
  • 关于验证集 D v a l D_{val} Dval,有如下几点特征:
  • D v a l ⊂ D D_{val}\subset D DvalD D v a l D_{val} Dval用来充当测试集;
  • D v a l D_{val} Dval独立同分布(iid)于P(x,y),即 D v a l D_{val} Dval是从D随机抽样出来的K个sample组成的集合;
  • 为了保证 D v a l D_{val} Dval是"干净"的,只能使用 D t r a i n D_{train} Dtrain用于模型训练;
    在这里插入图片描述
  • 假设有M种模型hypothesis set, D v a l D_{val} Dval的数量为K,那么从每种模型m中得到一个在Dval上表现最好的矩,再横向比较,从M个矩中选择一个最好的 m ∗ m^* m作为我们最终得到的模型;
  • g m − g_m^- gm D t r a i n D_{train} Dtrain中得到最好的g,而总样本D对应的最好的矩为 g m g_m gm。根据之前的leraning curve很容易知道,训练样本越多,得到的模型越准确,其hypothesis越接近target function,即D的 E o u t E_{out} Eout D t r a i n D_{train} Dtrain E o u t E_{out} Eout要小:
    在这里插入图片描述
    在这里插入图片描述
    上图总结一下整个学习的过程:
  • 首先把数据集D分为两部分:一部分用于训练为 D t r a i n D_{train} Dtrain,另一部分用于验证为 D v a l D_{val} Dval
  • 假设共有M个模型,那么每个模型在 g m − g_m^- gm上进行训练,并分别得到最好的 g m − g_m^- gm
  • 再用 D v a l D_{val} Dval g m − g_m^- gm进行验证,选出一个最佳的叫做 g m ∗ − g_{m^*}^- gm,那么该 g m ∗ − g_{m^*}^- gm所对应的那个模型 H m ∗ H_{m^*} Hm被选择;
  • 最后使用该模型对整个D进行训练,得到最终的 g m ∗ g_{m^*} gm

那么这么做有什么好处呢,下面我们通过一个例子来解释一下:
在这里插入图片描述
图标中横轴代表验证集的大小K,纵轴是Eout的大小:

  • 黑色实线:这是完全通过Ein来选择,即没用使用 D v a l D_{val} Dval,因此是与K无关的直线,但它这种方法通常Eout比较大;
  • 黑色虚线:这是通过 D t e s t D_{test} Dtest获得的,由于 D t e s t D_{test} Dtest与实际数据很接近,因此Eout比较低,但实际上很难实现;
  • 红色实线:表示使用 D v a l D_{val} Dval,但是最终选取的矩是 g m − g_m^- gm,其趋势是随着K的增加,它对应的Eout先减小再增大,当K大于一定值的时候,甚至会超过黑色水平线,这是因为随着K的增大,相对应的用于训练的 D t r a i n D_{train} Dtrain会减小,Eout(train)本身就比较大;
  • 蓝色实线:表示也使用 D v a l D_{val} Dval,最终选取的矩是 g m ∗ g_{m^*} gm,其趋势是随着K的增加,它对应的Eout先缓慢减小再缓慢增大,且一直位于红色曲线和黑色直线之下。因此次方法最好。
    在这里插入图片描述
  • 当K值很大时, E v a l ≈ E o u t E_{val}\approx E_{out} EvalEout,但是 g m − g_m^- gm g m g_m gm相差很大;
  • 当K值很小是, g m − ≈ g m g_m^-\approx g_m gmgm,但是 E v a l E_{val} Eval E o u t E_{out} Eout可能相差很大;
  • 所以有个折中的办法,通常设置 k = N 5 k=\frac N5 k=5N

三、Leave-One-Out Cross Validation
在这里插入图片描述

  • 考虑一个极端的例子,我们取 D v a l D_{val} Dval的数量为K=1,这时候 D t r a i n D_{train} Dtrain和D就很接近了,这样 g m − g_m^- gm g m g_m gm也会很接近,这样有个缺陷是 E v a l E_{val} Eval(这里我们称之为 e n e_n en)与 E o u t E_{out} Eout可能相差很大;
  • 那么如果我们针对D所有N个数据都重复上一步骤,把得到的 e n e_n en做个加权平均,得到leave-one-out cross validation estimate E l o o c v E_{loocv} Eloocv
  • 那么这个 E l o o c v E_{loocv} Eloocv是否接近于Eout(g)呢?
    在这里插入图片描述
  • 举个栗子:
  • 有两种模型用来做linear regression问题,每次将一个点作为验证集,其他两个点作为训练集,最终将得到的验证误差求平均值,就得到了 E l o o c v ( l i n e a r ) E_{loocv}(linear) Eloocv(linear) E l o o c v ( c o n s t a n t ) E_{loocv}(constant) Eloocv(constant)
  • 比较两个值的大小,取值小对应的模型即为最佳模型。
    在这里插入图片描述
  • 以上推导得出 E l o o c v ( H , A ) E_{loocv}(H,A) Eloocv(H,A) 的期望值和 E o u t ( g − ) E_{out}(g^-) Eout(g)的期望值是相近的,这说明leave-one-out这种方法是可行的。
    在这里插入图片描述
  • 再举个之前识别手写字的例子:
  • 蓝色曲线是采用 E i n E_{in} Ein进行模型选择,当使用多项式越高阶的话 E i n E_{in} Ein就会越小,但同时 E o u t E_{out} Eout会很大,这就是之前提到的overfitting;
  • 黑色曲线是采用leave-one-out方法,曲线和 E o u t E_{out} Eout很接近,经过 E l o o c v E_{loocv} Eloocv 选择的模型在实际应用中表现比 E i n E_{in} Ein好太多了。

四、V-Fold Cross Validation
在这里插入图片描述

  • 虽然leave-one-out能够很好地帮我们做模型选择,但计算量太大;

  • 那么退一步,我们不再每次选出一个数据做validation,而是把总的数据样本D随机分成V份,取1份做validation,而剩下的V-1份对模型进行训练,我们把这种方法叫做V-fold cross validation

  • 一般的实际应用中我们取V=10。
    在这里插入图片描述
    总结一下:

  • training model:针对每个model对hypothesis进行选择

  • validation schemes:对不同模型选出的hypothesis进行验证并选出最好的

  • test method:hypothesis的好坏最终还是需要测试集来最终测试得到

  • validation一般来讲还是比较有用的,但是由于其数据也是来源于数据集,所以并不能保证交叉验证的效果好,它的模型一定好。只有样本数据越多,越广泛,那么Validation的结果越可信,其选择的模型泛化能力越强。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值