机器学习-交叉验证Cross-Validation

0 参考资料

交叉验证(Cross-Validation)-CSDN博客

【全网最全】一文详解机器学习中的7种交叉验证方法_交叉验证.-CSDN博客

1 总结

Cross-Validtion两大功能

  • 模型评估-更科学

  • 模型选择-充分榨干有限数据集

Cross-Validtion适用情景目的
Hold out保留交叉验证数据集数量多探究不同训练超参数对于模型的性能影响
K-fold交叉验证数据量少,数据标签均衡 最常用减少数据集对于模型的影响 增加模型评价指标的科学性,说服力 同组训练超参数下,寻找最佳模型内部参数
Leave one out交叉验证数据集数量极少K-fold的特殊情景 以计算难度时间消耗,弥补数据集不足
分层K折交叉验证数据集数量少、标签分布不均衡K-fold的标签不均衡下的拓展
Boostrapping解决分组的随机性
蒙特卡罗交叉验证(Shuffle Split)
时间序列交叉验证时间序列数据、数据集数量少解决时间序列数据分组破坏时序结构的问题

2 什么是交叉验证

交叉验证Cross Validation

顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。

3 交叉验证有何作用?

应用条件

数据集不是很充足的情况

作用

  1. 模型评价,评估模型的性能参数

  • 即探究在同一组训练参数下,在不同训练集、验证集下的模型性能

  • 在数据集不充足条件下,减少数据集的随机性对模型性能的影响

  1. 模型训练过程中,用于选择模型Model selection

  2. 验证模型并非是过拟合的

  • 在小样本数据集中,模型性能普遍会比较好,此时会有过拟合的嫌疑,但是又没有多余的数据供我们去验证,采用交叉验证,来验证模型是否过拟合

4 HoldOut保留交叉验证

概念

最一般的,初步时应用的

整个数据集被随机划分为训练集和验证集。根据经验,整个数据集的近 70% 用作训练集,其余 30% 用作验证集。

作用

  • 探究在相同训练集中,调整模型的超参数,选择合适的评价指标,看模型的性能

  • 即根据评价指标,确定最为适合的模型超参数

适用情景

数据集数量足够大、标签分布均衡

则可以不考虑数据集对于模型性能的影响

直接考虑模型训练超参数、算法、模型的网络结构对于模型的影响

5 k-fold交叉验证

概念

  1. 首先随机地将数据集切分为 k 个互不相交的大小相同的子集;

  2. 然后将 k-1 个子集当成训练集训练模型,剩下的 (held out) 一个子集当测试集测试模型;

  3. 将上一步对可能的 k 种选择重复进行 (每次挑一个不同的子集做测试集);

  4. 这样就训练了 k 个模型,每个模型都在相应的测试集上计算测试误差,得到了 k 个测试误差,对这 k 次的测试误差取平均便得到一个交叉验证误差。这便是交叉验证的过程。

作用

模型评估

  • 评估当前训练超参数下模型的综合性能,减少数据集对于模型性能的影响,增加可信度

模型选择Model choice

  • 由于K fold 交叉验证,会训练出K个模型,也就是会有K组模型内部参数tuning parameter,最后选择使得交叉验证误差最小的那一组 tuning parameter

k折交叉验证可以有效的避免过拟合以及欠拟合状态的发生,最后得到的结果也比较具有说服性。

K-fold交叉验证图解

将原始数据集Dataset划分为Train训练集Test测试集

Model Choice

  • Test验证集作为选中当前训练超参数下最好的一组tuning parameters去做最终验证

模型评价

然后进一步将Train训练集划分为K fold,不断地选择其中的K-1个作为训练集,1作为Valid验证集,训练出K个模型,然后计算出K个评价指标,计算均值,作为当前训练超参数下的模型性能

增加说服力

适用情景

适用情景:

  1. 数据集数量小

  2. 增加模型性能的说服力,科学性

不适用情景:

  1. 标签不平衡

  2. 时间序列数据

K-fold折数的选择

交叉验证可能存在 bias 或者 variance。如果我们提高切分的数量 k,variance 会上升但 bias 可能会下降。相反得,如果降低 k,bias 可能会上升但 variance 会下降。bias-variance tradeoff 是一个有趣的问题,我们希望模型的 bias 和 variance 都很低,但有时候做不到,只好权衡利弊,选取他们二者的平衡点。

确定依据

  1. 经验来判断

  2. 根据训练集数据的样本数量来选择

Sklearn代码实现

6 leave-one-out 留一折交叉验证

概念

k折交叉验证的特殊情况,k=N,N 是数据集的样本数量

假设我们在数据集中有 100 个样本。然后在每次迭代中,1 个值将用作验证集,其余 99 个样本作为训练集。因此,重复该过程,直到数据集的每个样本都用作验证点。

适用情景

往往在数据缺乏的情况下使用

优缺点

优点

  • 每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。

  • 实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。

缺点

计算成本高,因为需要建立的模型数量和原始数据集样本数量一致,尤其当样本数量很大的时候。可以考虑并行化训练模型减少训练时间。

7 分层 K 折交叉验证

概念

分层 K-Fold 是 K-Fold 交叉验证的增强版本,主要用于不平衡的数据集。就像 K-fold 一样,整个数据集被分成大小相等的 K-fold。

但是在这种技术中,每个折叠将具有与整个数据集中相同的目标变量实例比率。

适应情景

数据集数量少、标签分布不均衡

8 Bootstrapping

概念

 cv 和 bootstrapping 都是重采样 (resampling) 的方法。机器学习中常用的 bagging 和 boosting 都是 bootstrapping 思想的应用。

  bootstrapping 的思想是依靠自己的资源,称为自助法,它是一种有放回的抽样方法。

  1. 数据假设要分成10组,则先设置一个采样比例,比如采样比例70%。则10组数据是每次从原始数据集中随机采样总数70%的数据构成训练集1,没有选中的样本作为测试集1;然后把数据放回,再随机采样总数70%的数据构成训练集2,没选中的作为测试集2……以此类推,放回式采样10组。

  2. 训练生成10个模型

  3. 计算平均测试误差来评估当前参数下的模型性能

解决问题

解决分组的随机性

但以上交叉验证的方法都有一个问题,就是在数据分组的时候缺乏随机性,以 k折交叉验证 为例,每个数据样本只能固定属于 k 个子集中的一个,可能会造成对于最终结果的影响。于是有人提出了 bootstrapping。

9 时间序列交叉验证

概念

时间序列数据是在不同时间点收集的数据。由于数据点是在相邻时间段收集的,因此观测值之间可能存在相关性。这是区分时间序列数据与横截面数据的特征之一。

在时间序列数据的情况下如何进行交叉验证?

  1. 在时间序列数据的情况下,我们不能选择随机样本并将它们分配给训练集或验证集,因为使用未来数据中的值来预测过去数据的值是没有意义的。

  2. 由于数据的顺序对于时间序列相关问题非常重要,所以我们根据时间将数据拆分为训练集和验证集,也称为“前向链”方法或滚动交叉验证。

  3. 我们从一小部分数据作为训练集开始。基于该集合,我们预测稍后的数据点,然后检查准确性。

  4. 然后将预测样本作为下一个训练数据集的一部分包括在内,并对后续样本进行预测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值