林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)

欢迎转载,可以关注博客:http://blog.****.net/cqy_chen

概要

上节课我们讲到了要避免过拟合,可以添加正则化项来缩放我们的假设空间,这样减少模型的复杂度,从而避免过拟合。还有一个问题就是如何选择需要的λ.

模型选择问题

当我们需要使用一个机器学习算法去解决一个问题的时候,有很多需要去考虑,就假设进行一个二分类问题。
1)采用什么样的模型,PLA,逻辑回归,还是啥
2)如果采用随机梯度下降,到底走多少步呢?
3)步长选多少呢?
4)如果要进行特征的映射,改选多项式还是高斯的,多项式要选择几次呢?
5)如果做正则化,采用L1还是L2呢?
6)正则化项的系数该如何选择呢?
等等
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
不要忘记我们做机器学习的目的是使得Eout变小。
如何来选呢?眼睛来看么?这么多超参数需要挑选,怎么可能选好。我们来选择一个使得Ein最小的参数集合?
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
这样的话,我就不多说了,那采用高维度映射已经比低维度映射好,不加正则化一定不正则化好。那就容易发生过拟合啦。
所以直接采用Ein来选择容易gg的。
所以呢,能不能用什么代替Eout呢,可以留一部分资料来进行测试,这些资料不参与模型的选择,得到Etest。使用测试的误差来替换Eout,这样的理论保证是什么呢?根据霍夫丁不等式:
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
这就是交叉验证啦。

交叉验证

这里详细的来看看交叉验证是如何做的.
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
从训练资料中,挑选部分资料来进行训练,剩下的做验证。再确定了超参数之后,再将所有的训练资料拿去训练得到最后模型。
整个流程图如下:
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)

这里需要提一下,关于如何挑选验证集合,并不是随机挑选的啦,必须要保证验证集合和训练集合的分布一致,不然会出问题啦
详细的可以参考:
http://blog.****.net/cqy_chen/article/details/78690975

还有一个问题没有解决,验证集合的大小,到底该选多大呢?首先我们看看验证集合的大小变化带来的损失函数的变化:
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
黑色的线表示不采用验证集,直接选取参数。下面的虚线采用了作弊的方式,使用Etest验证。
红色的线表示在验证集合上的误差,蓝色的线表示经后面再传回了g拿去做一次的训练。
可以看到,通过交叉验证可以得到比较好的结果。

发现红色穿过了黑色的线,因为k越大,训练集合的资料就少了。
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)

所以在这个k要达到一个平衡,一般来说K=N5

留一法交叉验证

上面讨论到了交叉验证中k的大小。那么如果只留下一条记录用于验证会如何呢?
如果只用一次的验证肯定不行啦,比如在二分类中,验证资料只给出0或者1,这个肯定无法知道到底Eout如何了,
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
所以我们可以将每个点都用作验证,其他点用作训练,然后求其均值,这样就大约是Eout了 .
比如下面的例子,有三个点,采用线性回归。
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
比如两个模型,一个是线性回归,一个是常数项,那么我们可以根据Eloocv来选择模型,三个点只要用常数模型就好了。
那么我们再看看看留一法的理论保证:
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)

所以留一法被称为Eout(g)
实际的应用中,看看在手写数字识别中的案例如下:
林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
可以看到EcvEout如影随形。

K折交叉验证

上面我们讲到留一法交叉验证,效果上不错,但是有另外的问题,就是训练次数太多了,假如样本量过大,基本不可行了。
同时呢,比如在二分类中,资料一次次的计算会导致Ecv会有跳动的现象,不平稳。
如何解决这些问题,计算量问题,我们可以只不将数据一笔一笔的分开,而是按比例的分开。比如拆分成k笔,就成了k折交叉验证。

林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)

通常呢,可以选择k=10就ok了。
这里有几点需要注意:
1)最后验证模型好坏的一定是未知的资料而不是验证集合。
2)验证集合由于参与了模型的选择,可能还是会导致过于乐观。

模型的最终结果是由测试集合来决定而不是验证集合

欢迎转载,可以关注博客:http://blog.****.net/cqy_chen