百度百科的解释
在机器学习和模式识别等领域中,一般需要将样本分成独立的三部分训练集、验证集和测试集。其中训练集用来训练模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。
但是,当样本总量少的时候,上面的划分就不合适了。常用的是留少部分做测试集。然后对其余N个样本采用K折交叉验证法。就是将样本打乱,然后均匀分成K份,轮流选择其中K-1份训练,剩余的一份做验证,计算预测误差平方和,最后把K次的预测误差平方和再做平均作为选择最优模型结构的依据。特别的K取N,就是留一法(leave one out)。
用考试来做比方的话,训练集就像我们用来学习的有答案的习题集。验证集像是一张模拟考卷,而测试集就是最终的大考。所以一般一个有效的验证集往往意味着这题已经成功了一半,而一个错误的验证集意味着南辕北辙。
知乎上一个不错的解释
在机器学习建模过程中,将数据分为训练集和测试集。测试集和训练集是完全分开的两个数据集,测试集完全不参与训练,只是用于模型最终确定后,来测试模型的效果。而训练集又要分出一部分数据用来验证模型的训练效果,即验证集。验证集在每次训练集训练结束后,对模型的效果进行初步地测试。之所以要设置验证集,是因为训练数据会有过拟合的情况出现,即训练数据能够很好地匹配训练数据,但对于训练数据之外的数据效果非常差,如果此时就使用测试集来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。验证集不参与训练,可以客观地评价模型对于训练集之外的数据的匹配度。
总结
- 训练集:用于模型训练;
- 验证集:取自训练集但不参与训练,用于每次训练结束后测试模型的效果,防止过拟合;
- 测试集:模型最终确定后测试模型的效果。
- K折交叉验证:将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。K折交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以作为模型优化的指标使用。