🚀在跑代码时常常将数据集简单的划分为训练集train和测试集test(二划分),其实更为全面完整的划分应该是划分为训练集train
、验证集val
、测试集test
(三划分)。那么具体如何划分呢?各个部分起着什么作用呢?
如下图所示,展示了划分的具体过程和各个部分的作用:
①
{\color{#E16B8C}{①}}
①整体划分: 按照一定方法(e.g. 分层采样),固定划分dataset为trainval和test;(这里trainval相当于二划分的train)
②
{\color{#E16B8C}{②}}
②超参确定: 按照一定的评估方法(e.g. 留出法/交叉验证法/自助法)动态划分trainval,train用于训练,val用于评估,目的是选择合适的算法和超参数;(相当于为了确定超参和算法对二划分的train进一步划分处理)
③
{\color{#E16B8C}{③}}
③正式训练: 确定算法和超参数后,trainval整个用于训练;
④
{\color{#E16B8C}{④}}
④最终评估: test用于评估最后通过trainval训练出来的模型。
⭐️这里几个注意点:
- 超参确认中的训练数据只是trainval划分为train的一部分,而正式训练的训练数据是trainval整体;
- 为了使得通过train训练+val评估的结果可以近似估计使用trainval整体训练的结果,我们需要针对数据集的体量和特性选择合适的评估方法以确定超参数;
- 一般来说,体量大的数据集适合用留出法和交叉验证法,而体量小的数据集适合用自助法;
- 交叉验证法中的留一法由于使得train/trainval的差异始终保持为一个样本,因而近似估计trainval的效果最好,最后确认的超参和算法也更加可靠,但缺点是计算开销过大,因而选择评估方法时也要综合考虑准确率和计算开销。