机器学习笔记:训练集、验证集和测试集区别
一、介绍
训练集、验证集和测试集在机器学习领域及其常见,后两者容易混用。
在有监督(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)
参考链接:训练集、验证集和测试集这三个名词的区别
参考链接:训练集、验证集、测试集以及交验验证的理解