训练集、测试集、验证集与模型选择

训练集、测试集、验证集与模型选择

原文链接
在机器学习过程中,为了找到泛化性能最好的那个函数,我们需要确定两方面的参数:1、假设函数参数,也就是我们通常所说的w和b,这类参数可以通过各种最优化算法自动求得。2、模型参数,比如多项式回归中的多项式次数,规则化参数λ等,这些参数被称为超参数,一般在模型训练之前通过手工指定(当然也可以采用网格法等算法进行寻优)。确定模型超参数的过程称为模型选择。

模型选择

借用吴恩达机器学习课程中的一页PPT,如下图:
在这里插入图片描述
现在我们要确定多项式回归的次数dd,我们手工指定d取值1到10,然后在训练集上训练模型,分别找出了最优参数θ(1),θ(2),⋯,θ(10),接着在测试集上对模型性能进行评估,得到测试误差Jtest(θ(1)),Jtest(θ(2)),⋯,Jtest(θ(10))Jtest(θ(1)),Jtest(θ(2)),⋯,Jtest(θ(10)),选择测试误差最小的那个作为最优模型,假设我们选择了d=5的那个模型θ0+θ1x+⋯+θ5x5。现在问题来了,我们要怎么去评价这个模型的泛化性能呢?仍然采用测试误差吗?如果我们采用测试误差作为度量,那我们是不是可以继续调整d的取值呢,直至测试误差降到最低,但是此时的模型我们能相信吗?显然是不能相信的,因为我们已经提前窥见到了测试数据,我们的超参数都是围绕更好的拟合测试数据而设定的,Jtest(θ)Jtest(θ)因此很有可能是泛化误差的一个最优估计。问题就出在我们将测试数据多次使用,违背了测试数据仅仅只是用来评估最优函数的泛化性能的原则。
为了解决这个问题,我们在训练集中单独划分出一块,作为模型选择的依据,我们把这部分数据称为验证集,现在我们的数据集由之前的训练集和测试集两部分组成变成了训练集,验证集和测试集三部分组成。
在这里插入图片描述

  • 训练集:用于训练模型,找出最佳的w和b。
  • 验证集:用以确定模型超参数,选出最优模型。
  • 测试集:仅用于对训练好的最优函数进行性能评估。

再强调一下:对最终学习得到的函数进行性能评估的数据叫作测试集,必须保证测试集完全独立,直到模型调整和参数训练全部完成前应该将测试集进行封存,以任何形式使用测试集中的信息都是一种窥探。
所以,此时机器学习的全过程如下:

  1. 确定模型的一组超参数 用训练集训练该模型,
  2. 找到使损失函数最小的最优函数。
  3. 在验证集上对最优函数的性能进行度量。
  4. 重复1、2、3步,直到搜索完指定的超参数组合。
  5. 选择在验证集上误差最小的模型,并合并训练集和验证集作为整体训练模型,找到最优函数。
  6. 在测试集上对最优函数的泛化性能进行度量。

最后,我们都知道同一模型在不同训练集上学得的函数往往不同,那我们怎样保证选出的模型和函数就是最好的呢?而不是刚好符合当前数据划分的一个特例呢?可以采用交叉验证(Cross Validation)法,其基本思路如下:将训练集划分为K份,每次采用其中K-1份作为训练集,另外一份作为验证集,验证集上K次误差的平均作为该模型的误差。
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值