一、介绍

训练集、验证集和测试集在机器学习领域及其常见,后两者容易混用。

在有监督(supervise)的机器学习中,数据集常被切分为2-3部分,即:

  • 训练集(train set
  • 验证集(validation set
  • 测试集(test set

机器学习笔记:训练集、验证集和测试集区别

一个形象的比喻:

训练集:学生的课本,学生根据课本中的内容来掌握知识;

验证集:作业,通过作业可以知道学生的学习情况、进步快慢;

测试集:考试,考题都是平时没见过的,考察学生举一反三的能力。

二、训练集

学习样本数据集,通过匹配一些参数来建立一个分类器。

建立一种分类的方式,主要是用来训练模型的。

作用:估计模型。

三、验证集

对学习出来的模型,调整分类器的参数,如在神经网络中选择隐藏单元数。

验证集还用来确定网络结构或者控制模型复杂程度的参数。

作用:确定网络结构或者控制模型复杂程度的参数。

在普通的机器学习中常用的交叉验证(Cross validation )就是把训练数据集本身再细分为不同的验证数据集去训练模型。

四、测试集

测试训练好的模型分辨能力。

该数据集与训练集、验证集完全分离,不参与模型训练。

作用:检验最终选择最优的模型性能。

五、为什么需要划分数据集?

简而言之,为了防止过度拟合

如果我们把所有数据都用来训练模型的话,建立的模型自然是最契合这些数据的,测试表现也好。

但换了其它数据集测试这个模型效果可能就没那么好。

总而言之,训练集和测试集相同的话,模型评估结果肯定比实际要好,但是模型的泛化性能较差。

六、总结

  • train set -- 训练模型、确定模型参数
  • validation set -- 模型选择、参数优化
  • test set -- 测试模型泛化性能

典型的交叉验证,划分比例为 7:2:1,三部分从样本中随机抽取。

针对样本交叉的情况,数据集中每一个样本都是极其珍贵的,不宜如此划分。

可采用K折交叉验证、留一法(LOO)等进行模型优化评估。

七、实操

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)

参考链接:训练集、验证集和测试集这三个名词的区别

参考链接:训练集、验证集、测试集以及交验验证的理解