训练集(Training set)
作用是用来拟合模型,通过设置分类器的参数,训练分类模型。后续结合验证集作用时,会选出同一参数的不同取值,拟合出多个分类器。
验证集(Cross Validation set)
作用是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。如svm中的参数c和核函数等。
测试集(Test set)
通过训练集和验证集得出最优模型后,使用测试集进行模型预测。用来衡量该最优模型的性能和分类能力。即可以把测试集当做从来不存在的数据集,当已经确定模型参数后,使用测试集进行模型性能评价。
如何将只有一个包含m个样例的数据集D,产生出训练集S和测试集T?
- 留出法(hold-out)
- 交叉验证法(cross validation)
- 自助法(bootstrapping)
自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。
有人会考虑既然将数据集D,分为训练集S和测试集T,那么验证集又是什么呢?
测试集(testing set)来测试学习器对新样本的判别能力,然后以测试误差(testing error)作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得。但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现,未中训练过程中使用过。
测试集只是用于测试学习器(即学得模型)的泛化能力。而如何选择学习器呢?
在训练集中,事实上我们只使用了一部分数据训练模型,在模型评估与选择过程中需要留出一部分数据进行评估测试。为了和测试集加以区分,模型评估与选择中用于评估测试的数据集常称为验证集(validation set)。
在研究对比不同算法的泛化性能时,我们用测试集的判别效果来估计模型中实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参