训练模型时如果反复在同一个数据集上调参,模型会记住这份数据的细节,评估结果虚高。划分数据集就是为了模拟真实场景下的泛化能力。
常见做法是训练集、验证集、测试集三分。训练集用于拟合参数,验证集用于选超参和早停,测试集只在最后用一次,给出相对无偏的性能估计。
如果数据量少,可以用交叉验证。把数据分成若干折,轮流留一折做验证,其余训练,最后取平均,能更充分利用有限样本。
时间序列数据不能随机划分,要按时间切分,用过去预测未来,否则会引入未来信息泄漏,评估结果不可信。
测试集被反复使用也会失效。每次根据测试结果改模型,测试集就逐渐变成验证集,最终报告的性能会偏乐观。