今天计网老师生病了,导致今天摸了大半天的 ,看了05年马刺和活塞的G5和G7
![10c1526a3d376fe2bb16e74bf34a27cf.png](https://i-blog.csdnimg.cn/blog_migrate/b0c7b607e5ffe8a1d524eb49a3844a9f.jpeg)
这个男人怎么可以这么帅,好了,回到今天的正题,交叉验证
在机器学习当中,人们经常为了在测试集当中取得很好的效果。有些人说,我们没有观测测试集的数据,但是事实上,当我们尝试着不断调试超参数来达到一个更好的准确率(指标),但事实上,我们调参的过程事实上就是偷看了数据集,或者说,只要模型表现能力不是很差,我们在不断调参后都可以达到一个不错的效果。调参的过程当中,是一种不那么明显的作弊行为换句名言,机器学习是让数据告诉我们规律,但是如果我们不断训练数据,数据终会屈服
有关模型测度
关于模型性能测度,目前我们看到的模型
- 关于回归问题用MSE,表达模型的拟合优度
- 对于分类问题,使用错误率
目的都是接近贝叶斯最优。
但是通过单一的测试,训练参数的结果,得到所谓的模型以及性能指标, 但是使用这样的测度指标,是否能够真正的表现模型好不好,当然我们希望模型能通过采样数据推之整体。
why resample
resample能从有限的数据推至整体的情况,通过resample 得到模型的一些额外的信息,测试误差,结果的准确性如何,有多大的把握,和均值、稳定性(变化范围)相关, bias和variances tradeoff 包括得到置信区间
我们指导越来越好的拟合training error 但是test error会波动,可能会学到噪声当中的pattern,对于我们的测试模型也是如此
所以,如何让我们的模型具有说服力?
- 如果我们的测试集足够大,毫无疑问是最好的选择,但这种高成本的做法通常是不靠谱的
2.如果我们能取到真实世界的内容,或者说,是骡子是马拉出去溜溜。事实上是不可能的。但是真实数据上有什么特点呢,随机,完整。
所以我们的训练样本一般具有什么特点呢,随机,完整。如果不满足这两点,数据是不完整的,那我们的结果也一定是不正确的。问题在于呢?训练集的数据我们看过的,这不简单?直接把训练集分割出来一部分就好了。
这种方法被称为validation
Here we instead consider a class of methods that estimate the test error by holding out a subset of the training observations from the fitting process, and then applying the statistical learning method to those held out observations
直接划分Validation的验证
这里涉及到一个基本知识叫做VC-dimension 一种在机器学习当中全部适用的工具,但是由于公式适用性过强(或者说太难证明),我们无法证明VC dimension在模型当中的应用。这些我们在后面更新林轩田老师的课程当中谈到,这里我们简单来用一下。
Eout代表测试集当中的错误量 Eout越小(这里是Evalidation),证明模型效果越好。但是直接划分测试集,一般情况系啊,n会很小,这导致
也就是说这种检验的误差会很大,不能真实的体现我们模型的准确性
我们把392个数据抽样出来,想检查一下线性模型和不同次数的非线性模型的差别
![fe4cd466c48f5bbfea7b589e118cd841.png](https://i-blog.csdnimg.cn/blog_migrate/a65f5d5caf165768b527b6b6435b25e4.jpeg)
左边是我们的训练模型,右边是我们选取的不同的验证集,可以看出,这么大的波动是证明不了模型性能的。或者说这么大的方差不能证明模型能力,同样验证集作为测试数据的一部分,我们没有用他们进行训练,种种情况都能证明,验证集高估了测试的损失。
leave-one-out cross-validation
![dfe1eb242a6edb7578dc5d08c508ae86.png](https://i-blog.csdnimg.cn/blog_migrate/1141d3939422606cafc323cbbc0dd792.png)
上图简单的阐明了LOOCV的做法,也就是,执行n次,每次选出一个样本,用剩下的样本进行训练并且得到一个结果并计算得到误差。
LOOCV一般在p>>n p≈n的情况下进行使用(p代表特征数)
LOOCV的优点:
可以最充分的利用数据集的数据来进行预测,以平均较少最后的方差,会比较稳定,测得的validation error基本可以说是无偏估计量
LOOCV的缺点:
每两个训练集之间,只有两个不同的数据,也就是说,我们训练的n个模型都是高度相关的,这会导致一些问题,我们后面再说
n个样本就要进行n次训练,时间复杂度太高。
当然他还有波动性太强的缺点,当然我们的解决方法如下
LOOCV虽然不是很好做,但是在线性回归这类模型上有特别的做法
![502122e1b1415be890656ed79c823f5a.png](https://i-blog.csdnimg.cn/blog_migrate/f3b5283465c2e420feef4f1c540c64cc.png)
h是hat矩阵的对角阵,当然n*n的矩阵同样会带来不小的计算量。线性模型CV的证明
k-fold validation
假设我们有一个有10000个样本的模型,LOOCV明显是一个不可取的方法。
k-fold的方法就是把模型分成k份,分别用其中一个作为验证集,用剩下的(k - 1) / k个进行训练
![f01501a4f313da29aade94a57ea0cab5.png](https://i-blog.csdnimg.cn/blog_migrate/c4c0f54ccaca5bd7f10cc3e4fa99ee6a.png)
上为k-validation的检查形式
![3b11c41f10deeb2a13ef57d4c45d8094.png](https://i-blog.csdnimg.cn/blog_migrate/58d4cc7e10bf5020432a51afad2a6291.jpeg)
重复上文的实验,我们发现模型把模型切成10份方差很小并且和LOOCV的效果大同小异
既然这么棒那我们就用它来进行模型选择辣
根据昨天我们说的前向选择,选择合适的参量
![0d8f739b26312147d9f86ac45a60e417.png](https://i-blog.csdnimg.cn/blog_migrate/a01ebc6ffd59bec3fc37e9713fcde47c.jpeg)
我们可以看到从9到15模型的误差都差不多,根据rule of thumb 我们选择参量最小的模型,也就是9作为我们最后的选择
后记-一些tips
虽然validation做的是随机采样,但是我们也要注意采样的全面性,或者说,根据样本标签的比例选取采样数据。时序的数据也需要我们手动处理。
之前说LOOCV的每个模型高度相关,所以会导致LOOCV方差增大(当然这不是很重要,是指做LOOCV多次的方差)
validation一定要做在最外层,任何形式的偷看数据都会对验证造成不可控制的后果
最后再挂一下这个男人(滑稽)
![d6df7d652ce5be0514a93128fca88432.png](https://i-blog.csdnimg.cn/blog_migrate/08f70a6627bb1be144c90ddf529d8374.jpeg)