首先需要说明的是:训练集(training set)、验证集(validation set)和测试集(test set)本质上并无区别,都是把一个数据集分成三个部分而已,都是(feature, label)造型。尤其是训练集与验证集,更无本质区别。测试集可能会有一些区别,比如在一些权威计算机视觉比赛中,测试集的标签是private的,也就是参赛者看不到测试集的标签,可以把预测的标签交给大赛组委会,他们根据你提交的预测标签来评估参赛者模式识别系统的好坏,以防作弊。

通常,在训练有监督的机器学习模型的时候,会将数据划分为训练集、验证集合测试集,划分比例一般为 0.6:0.2:0.2。对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的、泛化能力最佳的模型。

训练集:作用是用来拟合模型(训练模式识别系统),通过设置分类器的参数,训练分类模型。后续结合验证集作用时,会选出同一参数的不同取值,拟合出多个分类器。

验证集:作用是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。在训练集上训练好系统后,有些参数是不可学习的,需要人为设定的,比如支持向量机SVM中的超参数松弛参数C。但是人为设定可能不是最优的,怎样寻找最优的这个参数呢?这就需要验证集。在验证集上不断调试这个人为设定的超参数,直到在验证集上得到的结果满意为止,这一步通常采用验证集上的交叉验证来确定最优超参数。需要人为设定的超参数确定后,到此这个系统的所有参数都确定了,然后看一下这个系统在测试集上的效果怎么样。

测试集:用来最终评估模式识别系统的性能和分类能力。即可以把测试集当做从来不存在的数据集,当已经确定模型参数后,可以使用测试集进行模型预测并评估模型的性能。

需要注意的是,当整个模式识别系统中没有需要人为设定的超参数,所有参数都是通过学习得到的,则不需要验证集,训练集和测试集就够了。

对原始数据进行三个数据集的划分,也是为了防止模型过拟合。当使用了所有的原始数据去训练模型,得到的结果很可能是该模型最大程度地拟合了原始数据,亦即该模型是为了拟合所有原始数据而存在。当新的样本出现,再使用该模型进行预测,效果可能还不如只使用一部分数据训练的模型。