训练和验证准确性_ISLR(6)重采样技术part1-交叉验证

今天计网老师生病了,导致今天摸了大半天的 ,看了05年马刺和活塞的G5和G7

10c1526a3d376fe2bb16e74bf34a27cf.png

这个男人怎么可以这么帅,好了,回到今天的正题,交叉验证

在机器学习当中,人们经常为了在测试集当中取得很好的效果。有些人说,我们没有观测测试集的数据,但是事实上,当我们尝试着不断调试超参数来达到一个更好的准确率(指标),但事实上,我们调参的过程事实上就是偷看了数据集,或者说,只要模型表现能力不是很差,我们在不断调参后都可以达到一个不错的效果。调参的过程当中,是一种不那么明显的作弊行为换句名言,机器学习是让数据告诉我们规律,但是如果我们不断训练数据,数据终会屈服

有关模型测度

关于模型性能测度,目前我们看到的模型

  • 关于回归问题用MSE,表达模型的拟合优度
  • 对于分类问题,使用错误率

目的都是接近贝叶斯最优。

但是通过单一的测试,训练参数的结果,得到所谓的模型以及性能指标, 但是使用这样的测度指标,是否能够真正的表现模型好不好,当然我们希望模型能通过采样数据推之整体。

why resample

resample能从有限的数据推至整体的情况,通过resample 得到模型的一些额外的信息,测试误差,结果的准确性如何,有多大的把握,和均值、稳定性(变化范围)相关, bias和variances tradeoff 包括得到置信区间

我们指导越来越好的拟合training error 但是test error会波动,可能会学到噪声当中的pattern,对于我们的测试模型也是如此

所以,如何让我们的模型具有说服力?

  1. 如果我们的测试集足够大,毫无疑问是最好的选择,但这种高成本的做法通常是不靠谱的

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会很小,这导致

会很大,这存在的问题就是即便Ein很小,Eout也会很大。

也就是说这种检验的误差会很大,不能真实的体现我们模型的准确性

我们把392个数据抽样出来,想检查一下线性模型和不同次数的非线性模型的差别

fe4cd466c48f5bbfea7b589e118cd841.png

左边是我们的训练模型,右边是我们选取的不同的验证集,可以看出,这么大的波动是证明不了模型性能的。或者说这么大的方差不能证明模型能力,同样验证集作为测试数据的一部分,我们没有用他们进行训练,种种情况都能证明,验证集高估了测试的损失。

leave-one-out cross-validation

dfe1eb242a6edb7578dc5d08c508ae86.png

上图简单的阐明了LOOCV的做法,也就是,执行n次,每次选出一个样本,用剩下的样本进行训练并且得到一个结果并计算得到误差。

LOOCV一般在p>>n p≈n的情况下进行使用(p代表特征数)

LOOCV的优点:

可以最充分的利用数据集的数据来进行预测,以平均较少最后的方差,会比较稳定,测得的validation error基本可以说是无偏估计量

LOOCV的缺点:

每两个训练集之间,只有两个不同的数据,也就是说,我们训练的n个模型都是高度相关的,这会导致一些问题,我们后面再说

n个样本就要进行n次训练,时间复杂度太高。

当然他还有波动性太强的缺点,当然我们的解决方法如下

所以我们利用平均来解决这个问题

LOOCV虽然不是很好做,但是在线性回归这类模型上有特别的做法

502122e1b1415be890656ed79c823f5a.png

h是hat矩阵的对角阵,当然n*n的矩阵同样会带来不小的计算量。线性模型CV的证明

k-fold validation

假设我们有一个有10000个样本的模型,LOOCV明显是一个不可取的方法。

k-fold的方法就是把模型分成k份,分别用其中一个作为验证集,用剩下的(k - 1) / k个进行训练

f01501a4f313da29aade94a57ea0cab5.png

上为k-validation的检查形式

3b11c41f10deeb2a13ef57d4c45d8094.png

重复上文的实验,我们发现模型把模型切成10份方差很小并且和LOOCV的效果大同小异

既然这么棒那我们就用它来进行模型选择辣

根据昨天我们说的前向选择,选择合适的参量

0d8f739b26312147d9f86ac45a60e417.png

我们可以看到从9到15模型的误差都差不多,根据rule of thumb 我们选择参量最小的模型,也就是9作为我们最后的选择

后记-一些tips

虽然validation做的是随机采样,但是我们也要注意采样的全面性,或者说,根据样本标签的比例选取采样数据。时序的数据也需要我们手动处理。

之前说LOOCV的每个模型高度相关,所以会导致LOOCV方差增大(当然这不是很重要,是指做LOOCV多次的方差)

validation一定要做在最外层,任何形式的偷看数据都会对验证造成不可控制的后果

最后再挂一下这个男人(滑稽)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值