45-验证数据集与交叉验证

前言

  上一篇博客通过引入过拟合和欠拟合这样的概念,理解了为什么要做 train_test_split 这个测试数据集的意义是什么?如果我们将所有的样本数据都当作测试数据的话训练出来的模型,如果发生过拟合,我们并不自知。因为这种情况在训练数据集上误差会非常的小,虽然我们觉得我们的模型很好,很有可能过拟合导致泛化能力不足。所以相应的,对我们的原始数据集来说,将其分成训练数据集和测试数据集,训练数据集用于训练我们的模型,测试数据集用来看我们的模型相应的性能究竟是怎样的?也就是说我们是通过测试数据集来判断模型的好坏

  那么,我们使用这样一种方式来判断模型的泛化能力靠不靠谱呢?当然,它比只使用训练数据来得到模型要靠谱的多。但是严格来说,它也有不靠谱的地方,就是有可能我们的模型是过拟合了我们的测试数据。虽然我们是使用训练数据获得的模型,但每次我们通过这个测试数据来看这个模型的好坏,一旦发现这个模型不好,我们就换一个参数重新进行训练,这个过程其实我们的这个模型在一定程度上围绕着测试数据集打转。也就是说,我们在想办法找到一组参数,这组参数使得我们用训练数据集获得的模型在测试数据集上效果最好,但是由于测试数据集是已知的,我们相当于是在针对这组测试数据集进行调参,那么它也有可能发生过拟合的情况。那么,我们怎么来解决这个问题呢?


交叉验证

  解决的方式其实就是将我们整个数据分成三部分,这三部分分别是:训练数据集、验证数据集和测试数据集。训练数据集还是用于训练我们的模型,验证数据集做之前测试数据集做的事情,作为调整超参数使用的数据集。然后得到一个最好的模型。而测试数据集作为衡量最终模型性能的数据集。
在这里插入图片描述
  不过我们这样做还是存在一个问题,这个问题就在于随机?验证数据集每次都是从原始数据集中随机切分出来的。通过之前的分析,这个模型有可能过拟合验证数据集,但是验证数据集只有一份,一旦验证数据集有比较极端的数据,就有可能导致我们的模型相应的不准确。我们为了解决这个问题,就有了交叉验证(Cross Validation)

  那什么是交叉验证呢?对于训练数据集来说,我们通常把它分成 k k k 份,比如说,我们把它分成三分,分别是 A A A B B B C C C。接下来就让 A A A B B B C C C 作为验证数据集。

在这里插入图片描述
  那么这样一来,相应的一个训练数据集和验证数据集的搭配就会形成一个模型。

在这里插入图片描述
  那么我们最后把 k k k 个模型的均值作为结果来进行调参。由于我们有一个求平均的过程,所以不会由于一份验证数据集中有什么极端的数据而导致我们最终形成的模型有过大的偏差。所以这样做比设立一个验证数据集要靠谱。


编程实现

下面我们就具体通过程序来看怎么使用这种交叉验证的方式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

  下面我总结一下,使用交叉验证的方法在调参的过程中评价模型的准确度更加靠谱,通常我们要把训练数据集分成 k k k 份,又称为 k-folds cross validation。但是它有一个很明显的缺点,就是每次都要训练 k k k 个模型,相当于整体性能慢了 k k k。但是最后得到的参数可信度更高。

  那么在极端情况下,我们的 k-folds cross validation 可以变成一种叫做留一法(LOO-CV)这样一种交叉验证方式,就是把训练数据集分成 m m m 份,每次都将 m − 1 m-1 m1 份样本用于训练,然后去看预测的剩下那一个样本称预测的结果,称为为留一法(Leave-One-Out Cross Validation)。那么这种方法完全不受随机的影响,它是最接近模型真正的性能指标,但是显然有一个巨大的缺点就是计算量巨大。

  好了,这篇博客详细介绍了什么是验证数据集,进而引出了一个非常重要的方法 —— 交叉验证,我们通过交叉验证的方式来寻找最佳的参数,那么使用找到的最佳参数进行模型训练,通常能够最大程度的遏制训练出的模型出现过拟合或者欠拟合这样的问题。那么对于过拟合和欠拟合,在下一篇博客将再进行一下总结,同时提出如果发现自己训练的模型有过拟合的倾向的时候,我们到底要如何去做?


  具体代码见 45 验证数据集与交叉验证.ipynb

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值