机器学习基石 Lecture15: Validation

Model Selection Problem

目前为止在训练模型的时候我们可以选择的部分已经有很多了,算法、迭代次数、更新步长、映射方式、正则项和正则项系数等等。在这里插入图片描述有这么多可选的,如何最后得到一个最优的结果呢?这就涉及到最后模型选择的问题。我们最终学习的目标是为了得到最小的 E o u t E_{out} ,但是这个是无法得知的。所以究竟如何选择是机器学习里最重要的实际的一个问题。而用眼睛选择在12讲里说过了不可行,因为大脑的复杂度没有计算在内。
在这里插入图片描述
假设选择的标准是选择一个最小的 E i n E_{in} 的模型,这样会造成严重的过拟合问题,分开组合都是一样的结果。
在这里插入图片描述
使用一个新的数据集 D t e s t D_{test} 来得到一个 E t e s t E_{test} 作为选择标准是一个不错的选择,而且根据有限数量的Hoeffding不等式有较强的理论保证。但是实际的问题是使用 E t e s t E_{test} 有时候没有测试数据,而且这样有些自欺欺人。
在这里插入图片描述
考虑了这两种方式之后我们发现各有利弊,于是想到使用一个利用它们两种优势的方法,那就是将训练集中留一部分数据不用到训练里,而只用来做模型选择。
在这里插入图片描述

Validation

这个选出来做模型选择的部分叫做验证集。它是训练集的一部分,而且需要保证与训练数据一样独立同分布地来源于目标函数(分布)。而且不会用到训练中去,因此也有一定的理论保证。
在这里插入图片描述
但是这样有个问题,因为训练数据变少了一些,因此得到的结果可能比使用整个的数据集的结果稍微差一些。我们希望在最后选择定了模型的时候将所有的数据放在一起用这个模型进行最后的一次训练得到尽可能好的结果。于是整个验证的过程就是使用训练集训练得到的不同的模型,然后使用验证集选出 E v a l E_{val} 最小的。最后使用全部的数据对这个选出来的模型进行最后的训练后得出结果。(感觉怪怪的,实际中有最后这步吗?)
在这里插入图片描述
图中给出了对应的使用不同的选择方式对应不同验证集大小的曲线,可以看出上图所说的方法是最优的方式:
在这里插入图片描述
有时候sub-g的结果比in-sample的更差是因为它用的数据可能会比较少。

但是使用验证集也存在一个矛盾的敌方。因为这里存在三个量的约等于关系,而两个约等号分别需要较小的验证集大小以及较大的。不过一般是使用整个数据集的1/5的数量作为验证集。
在这里插入图片描述

Leave-One-Out Cross Validation

考虑一种极端情形,每次只选择一个样本点作为验证集。为了使这一个样本点得到的验证结果能够逼近想要的 E o u t E_{out} ,可以将所有的点都作为验证集选择一次最后平均。
在这里插入图片描述
这个方法叫做留一法交叉验证。算法流程是,每次选一个点作为验证集,其他的点做训练集进行训练,然后验证。之后对每个点都这么操作,将验证的error平均。最后用这个平均值来选择模型。
在这里插入图片描述
这个方法有一个数学上的保证,因为这个 E l o o c v ( H , A ) E_{loocv}(H,A) 的期望等于 E o u t ( N 1 ) \overline{E_{out}}(N-1) ,而这个值几乎是 E o u t ( g ) E_{out}(g) 的无偏估计。一个可能的三个error的曲线如下图所示:
在这里插入图片描述
使用留一交叉验证确实能得到更好的结果。

V-Fold Cross Validation

但是留一法有个最大的问题,那就是将数据分成N份进行了N次计算,计算量非常大。只有在一些特殊算法中才会使用这种方法,比如线性回归。还有个另外的问题就是每次只用了一个点来做验证,方差可能会很大。
在这里插入图片描述
因此在实际的应用中通常使用的是将数据集分成V份,其中一份作为验证集,剩下的用来训练,然后每份循环平均得到 E v a l E_{val}
在这里插入图片描述
最后,一般来说使用验证的时候都是用的是V-Fold的方法,因为兼顾了计算效率与稳定性。5折或者10折比较常用。 而且验证集的结果依然是比较乐观的结果,因为使用的是已有的数据,不能代表模型的真实水平。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_25037903/article/details/84073993
今日推荐