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

周志华老师的西瓜书里面主要讲了训练集和测试集,验证集提及的内容不多,为避免混淆,特此笔记。

一、三者之间的区别

看完西瓜书后,比较疑惑的是验证集和测试集之间的关系,验证集是测试集的一部分么?

首先:训练集(training set)、验证集(validation set)和测试集(test set)本质上并无区别,都是把一个数据集分成三个部分而已,都是(feature, label)造型。主要是在模型训练过程中作用不同:

  • 训练集:用来拟合模型(训练模式识别系统);
  • 验证集:主要用于调整模型中的超参数,在训练集上训练好系统后,有些参数是不可学习的,需要人为设定,比如支持向量机SVM中的超参数松弛参数C。但是人为设定可能不是最优的,这就需要验证集。在验证集上不断调试这个人为设定的超参数,直到在验证集上得到的结果满意为止,这一步通常采用验证集上的交叉验证来确定最优超参数。
  • 测试集:用来评估模最终模型的泛化能力。

一个形象的比喻:

  • 训练集-----------学生的课本;学生 根据课本里的内容来掌握知识;
  • 验证集------------作业,通过作业可以知道 不同学生学习情况、进步的速度快慢;
  • 测试集-----------考试,考的题是平常都没有见过,考察学生举一反三的能力。

通常三者的划分比例为6:2:2,对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的、泛化能力最佳的模型。

验证集并不是必需的,如果模型没有需要人为设定的超参数,所有参数都是可以通过学习得到,就不需要验证集。

二、分离训练集和测试集的方法

这里总结下几种将数据集分成训练集和测试集的方法。

1、留出法

直接将数据集划分为两个互斥的集合,其中一个集合作为训练集,另外一个作为测试集,两者比例为2:1~4:1。

需要注意的是,训练集和测试集的划分要尽可能保持数据分布的一致性(分层抽样),避免因数据划分过程引入额外的偏差而对最终结果产生影响。

为了保证实验结果的可靠性,一般要采用多次随机划分、重复进行实验。

2、交叉验证法

算法思路:
(1)先讲数据集划分为k个大小相似的互斥子集,每个子集尽可能保持数据分布的一致性(分层采样);
(2)每次用k-1个子集作为训练集,余下的子集作为测试集。这样就能获得k组训练/测试集,从而可以进行k次训练和测试。
k最常用的数值是10,称为10折交叉验证,示意图如下:
在这里插入图片描述
为了减少因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,比如“10次10折交叉验证法”与“100次留出法”都是进行了100次训练/测试。

三、参考资料

图片取自周老师的《机器学习》,侵删。
训练集、验证集、测试集以及交验验证的理解
关于训练集,验证集,测试集的划分

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值