台大机器学习基石 Lecture 15 - Validation

本次Lecture介绍了通过validation的方法来帮助我们选择模型并在没有测试集的情况下评价模型好坏,保证训练的模型有良好的泛化能力。

Model Selection Problem

上面这幅图就说明,就算是一个最简单的二元分类问题,都要涉及算法A、迭代次数T、步长\eta、特征转换方法\Phi、正则regularizer\Omega、正则参数\lambda这些选择,他们叠加起来会形成不同的机器学习效果,因此我们要找到合适的选择搭配,构建良好的机器学习模型。

假设我们有M个模型,也就有M个hypothesis set,对应着有M个机器学习算法,于是我们就要选出一个最好的H_{m^*},通过演算法在D上的训练得到g_{m^*} = A_{m^*}(D),目标就是要让E_{out}(g_{m^*})最小。然而E_{out}往往是不知道的,那么这个最优的g_{m^*}该怎么选择呢?

我们试试下面两种方法——

  • E_{in}来考虑,在M个模型中找出使E_{in}最小的那个g_{m^*},也就是m^* = \underset{1 \leq m \leq M}{argmin}(E_m = E_{in}(A_m(D)))

但是我们之前就知道, E_{in}小并不就代表E_{out}好,他的泛化能力有可能是很差的,很容易产生overfitting的情况。与此同时,这种“模型选择+训练学习”的模式,当A_1H_1上获得最小的E_{in}A_2H_2上获得最小的E_{in}g_{m^*}就要在H_1\cup H_2上取得最小的E_{in},那么这时VC dimension是d_{VC}(H_1\cup H_2),模型复杂度很高,我们知道就很容易有bad generalization。

因此,通过E_{in}来选择是非常危险的。

  • E_{test}来考虑,从独立于训练集的测试集选择E_{test}最小的模型,m^* = \underset{1 \leq m \leq M}{argmin}(E_m = E_{test}(A_m(D)))

根据finite-bin Hoffding不等式,我们可以得到

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

当M越小,N越大,O(\sqrt \frac{log M}{N_{test}})就越小,E_{test}(g_{m^*})越接近于E_{out}(g_{m^*})。这样看似效果很好,但是我们想要拿到D_{test}是不现实的,这相当于作弊。

我们用学生考试的例子来理解上面in-sample error和test error两种方法:我们有training set训练集(就像是平时做的练习题)和test set测试集(最终的考试)两部分。in-sample error就是通过练习题来进行评判我们学得好不好,也就是把练习题拿来再考试,这样就算效果好也不能用来评判学得好不好;test error就是拿到了最终的测试试卷,然后对着测试卷来学习,那最终考试再好当然不能说明学得好,而且这是作弊啊!

于是我们可以试着找出一个折中的方法,从training set中抽出一些作为D_{val},把他们留出来作test error的功能,而不要将他们混入原有的数据中参与训练学习,这样就能保持独立的数据集。其实,这就像是在平时练习的时候留出一些题目合起来做成一套“模拟卷”,在考前来检验我们的学习成果,这样就是仿真的考试。

Validation

上图就说明,将原有的输入数据分成了D_{train}D_{val}两部分,其中为了保证E_{val}E_{out}的关联性,要求D_{val}是从D中随机抽取,这也就是保证D_{val}\overset{i.i.d.}{\sim }P(x, y)(独立同分布)的。

于是,通过D_{train}可以得到最佳的g_m^-,然后验证得到E_{val}(g_m^-),得到如下Hoffding不等式:

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

所以,对于M个模型来说,只要每个求出最佳的,然后横向比较得到最好的模型,即m^* = \underset{1 \leq m \leq M}{argmin}(E_m = E_{val}(A_m(D_{train})))

但是,现在由于数量为N的总样本中有部分K成为了validation set,那么只有N - K个可供训练,得到最好的矩为g_m^-;而总样本对应最好的矩为g_m^*。根据之前的learning curve可以知道,当训练样本越多的时候,得到的模型就越准确,于是就有

这样就导致了训练出的E_{out}偏大,于是通常就通过D_{val}来选择最好的矩g_m^-对应的模型m^*,然后再在全部D上进行训练,最终得到g_{m^*}

 于是综合起来就有不等式:E_{out}(g_{m^*})\leq E_{out}(g_{m^*}^-)\leq E_{val}(g_{m^*}^-)+O(\sqrt \frac{log M}{K})

下面通过一个示例来看一下:

通过上图的样例,我们可以看到,如果把全部数据作为训练集而没有验证集,那么就是上面的黑色实线,这显然与K无关;当测试集与训练集非常接近时,就能得到下面的黑色虚线,这是一种理想情况,实际中很难得到;红色曲线表示验证集的E_{out},最终选取了g_{m^*}^-,随着K的增加,先减小后增大,最终甚至超过黑色实线(这是因为随着K增大,训练集的数量在不断减小,这样得到的结果就不具有良好的泛化能力);蓝色曲线也使用验证集,最终选取的矩是g_{m^*},随着K的增加,先缓慢减小再缓慢增大,且一直在红色和黑色实线以下,这就说明之前的方法是正确的。

那么K究竟应该取多少呢?通常就取K=\frac{N}{5}

Leave-One-Out Cross Validation

这个validation的方法就是每次取出训练集中第n个样本(x_n,y_n),于是D_{val}^{(n)}={(x_n,y_n)}E_{val}^{(n)}(g_n^-)=err(g_n^-(x_n),y_n)=e_n,然后每次取出一个样本,再将所有E_{val}^{(n)}取平均,于是就有E_{loocv}(H,A)=\frac{1}{N}\sum_{n=1}^{N}e_n=\frac{1}{N}\sum_{n=1}^{N}err(g_n^-(x_n),y_n),我们希望E_{loocv}(H,A)\approx E_{out}(g),那么m^*=\underset{1\leq m\leq M}{argmin}(E_m=E_{loocv}(H_m,A_m)),选择出最小的那个E_m就可以了。

下面从理论上保证LOOCV是正确的,

于是LOOCV得到的就是一个几乎无偏差的估计。 

V-Fold Cross Validation

但是Leave-One-Out方法的问题计算量大,每次1个validation,N-1个训练集,训练N次模型;在很多模型下可能model selection会因为没有公式解而不可行或不容易;在只有一个点的情况下,结果的跳动可能会比较频繁,导致效果不理想。

于是,可以将样本集D分为V份,1份validation,其余用作训练,根据这个标准来选择模型,通常V=10比较常见:

m^*=\underset{1\leq m\leq M}{argmin}(E_m=E_{CV}(H_m,A_m)),其中E_{cv}(H,A)=\frac1V\sum_{v=1}^VE_{val}^{(V)}(g_V^-)

一般采用V-Fold Cross Validation的方法来选择最佳的模型,但由于其数据来源也是样本集中的,不能保证在这个情况下模型效果一定很好,仍然要以test结果来作为标准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值