在机器学习中,一般将样本分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中,测试集用来检验最终选择最优的模型的性能如何。
在
机器学习和
模式识别等领域中,一般需要将样本分成独立的三部分训练集(train set),验证集(validation set ) 和测试集(test set)。其中训练集用来估计模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。
但是,当样本总量少的时候,上面的划分就不合适了。常用的是留少部分做测试集。然后对其余N个样本采用K折交叉验证法。就是将样本打乱,然后均匀分成K份,轮流选择其中K-1份训练,剩余的一份做验证,计算预测误差平方和,最后把K次的预测误差平方和再做平均作为选择最优模型结构的依据。特别的K取N,就是留一法(leave one out)。
测试集方法的代价是要减少一部分训练数据。例如通常我们从训练集中移除了30%的数据。这意味着相比于使用全量集合训练来说,我们的模型会存在更大的偏差。在标准的流程中,评价完模型效果后,我们会用全量数据重新训练来得到最终的模型。因此在这种情流程下,测试集的误差评价结果是偏保守的,因为模型的实际误差要比报告的误差低一些。在实际中这种保守的误差估计要比乐观的误差估计更有效。
这种技术的一个要点是在得到最终模型前不能以任何方式分析或使用测试集。一个常见错误是在效果评估后重新调整模型然后再次训练评估。如果在一次建模中你重复使用一份测试集,这份测试集就被污染了。由于测试集参与了模型调整,它就不能再给出模型误差的一个无偏估计了。