作用:

训练集:训练模型的参数
验证集:找较好的超参数,也可以用来监控模型是否发生过拟合
测试集:评估模型的泛化能力,绝对不能参与训练过程

图上面的部分表示我们拥有的数据,而后我们对数据进行了再次分割,主要是对训练集,假设将训练集分成5份(该数目被称为折数,5-fold交叉验证),每次都用其中4份来训练模型,粉红色的那份用来验证4份训练出来的模型的准确率,记下准确率。然后在这5份中取另外4份做训练集,1份做验证集,再次得到一个模型的准确率。直到所有5份都做过1次验证集,也即验证集名额循环了一圈,交叉验证的过程就结束。算得这5次准确率的均值。留下准确率最高的模型,即该模型的超参数是什么样的最终模型的超参数就是这个样的。
https://blog.csdn.net/Chaolei3/article/details/79270939

关系:

对应课本(学知识)、作业(学进步的速度之类)、考试(验证)

存在的合理性

训练集:基本
验证集:训练集直接参与了模型调参的过程,显然不能用来反映模型真实的能力,即对课本死记硬背的学生(过拟合)将会拥有最好的成绩,显然不对。
测试集:验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型,就像刷题库的学生也不能算是学习好的学生是吧。所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力。

交叉验证:

注意

主要是训练集和验证集之间的关系,测试集在交叉验证之外

存在合理性

验证集如果仅有一个有可能无法选出实际最优的模型,即模型的误差不准确,或者说这次作业考察点比较偏导致无法正确选一个拥有好特性的学生。

作用

获取某个模型(某个指的是某类型+某超参数,如神经网络+层数)的性能指标,单一K-Fold训练的模型无法表示总体性能,但是我们可以通过K-Fold训练的训练记录下来较为优异的超参数,然后再以最优模型最优参数进行重新训练,将会取得更优结果。

过程

训练测试验证集和交叉验证 - 图1

  1. 选一个k
  2. 划分出k组训练+验证
  3. 选不同的超参数进行训练,每次训练有k小次,每小次都是用k-1份训练,1份算误差,算出来k个误差MSE取平均作为这个模型的交叉验证误差。
  4. 选一个交叉验证误差最小的模型(超参数组)

    分类

  5. 留出法,划分为 训练集+验证集+测试集 (8:1:1)

  6. k折交叉验证,划分为k部分随机1部分为测试集,k-1为验证集。

    何时使用K-Fold

    我的看法,数据总量较小时,其他方法无法继续提升性能,可以尝试K-Fold。其他情况就不太建议了,例如数据量很大,就没必要更多训练数据,同时训练成本也要扩大K倍(主要指的训练时间)。
    https://www.cnblogs.com/xiaosongshine/p/10557891.html

    实战

    https://blog.csdn.net/foneone/article/details/104445320