区分训练集、验证集、测试集---最明白的解释

1 前言

最开始接触交叉验证,没理解这里的验证集,我当时想,怎么可以这样呢?验证集怎么可以参与训练调参呢?
后来才明白,验证集就是从训练集划分出来的东西,是我把验证集误想成了测试集了。。。

2 正文

首先强调:
机器学习分为两个步骤:训练+测试。

  1. 训练阶段:只使用训练集training set对模型进行训练,即调参。
  2. 测试阶段:只使用测试集test set对模型进行测试,用于评估模型学习情况,泛化能力,不参与调参。

  • 那么验证集validation set是怎么来的呢?

原来我们在训练阶段存在这些问题:

  • 我们怎么保证此时训练获得的参数是ok的呢?
  • 即我们什么时候选择停止迭代呢?
  • 以及我们怎么防止(减少)过拟合、欠拟合呢?
    为了解决上述问题,我们就想出来了一个选择模型、选择参数的方法:
    从训练集里划分出一部分数据,称之为验证集,相当于用来“模拟测试集”,即相当于高考之前的每一次的模拟考试。

于是上述就变成了:

  1. 训练阶段:
    a. 只使用训练集对不同的模型进行训练(这里的训练集不包含验证集噢!!)
    b. 只使用验证集对不同的模型进行”测试"
    c. 选取在验证集上表现最好的模型
  2. 测试阶段:只使用测试集对模型进行性能测试。

也就是说,训练集、验证集都是拿来训练的,测试集才是拿来测试的。
训练集、验证集可以拿来调参,测试集不可以

3 帮助调参、选择模型的方法

3.1 引入验证集

  1. 将训练集分为两部分:
  • training set
  • validation set
  1. 如何选择模型:
    在训练集中训练不同的模型,选择验证集中错误最小的模型

  2. 缺点:
    当样本本来就不足时,上述操作可能会引入数据稀疏问题。

3.2 2 交叉验证(Cross-Validation)

  1. 将训练集分为 K 组,每次使用K-1组作为训练集,剩下一组作为验证集。
  2. 取验证集上性能最好的模型。
    在这里插入图片描述

交叉验证的一个方法:k折交叉验证

  1. 将原始训练集划分为K组,每一组子集在一轮中被选取作为验证集,剩余K-1组作为训练集:
    1. 第一轮:从头训练模型,在数据子集D1-D9上训练,数据子集D10上验证,获得一个准确度
    2. 第二轮:从头训练模型,在数据子集D2-D9、D10上训练,数据子集D1上验证,获得一个准确度
    3. 第三轮:从头训练模型,在数据子集D3-D9、D1上训练,数据子集D2上验证,获得一个准确度
  2. 10轮训练中,10个准确度的平均值代表着模型的性能,选取准确度最高的模型的参数作为最优参数
  3. 在整个数据集上,使用最优参数从头训练模型
  4. 在真正的测试集上测试模型的泛化能力

觉得对您所帮助的话,请多多点赞!

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MORE_77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值