记录关于“k-折交叉验证”的一次探讨(21-1-27)

起源

最近做了一次比赛,在数据集的划分上出了一点问题,导致模型在训练集与验证集上面表现效果较好,但测试集却出现了过拟合的现象。因此在思考在对数据没有任何先验的条件下,如何科学地划分训练集与验证集,从而避免过拟合。突然想起之前看机器学习方面知识,有一个防止模型过拟合的方式:K-折交叉验证,大致知道其做法,但不知道在实际环境中如何使用,因此有了以下讨论。

问题一

假设我现在有一批数据(训练+验证),使用5-折交叉验证划分训练集与验证集,那么可以分别训练得到5个模型,其中有1个模型(超参)在其对应的验证集上表现较好(设为x),那么就应该在测试集上用模型x吗,还是说要放在全部数据集上再训练一次?怎么在数据比赛/实际生产环境中应用呢?

讨论

一般来说,交叉验证是用于做模型评估的和参数选择的,或者用多折做样本抽样做抽样预测,类似于随机森林的列采样,这种从理论和实践上来说都可以提高模型的稳定性。所以常规来说是不会根据某折效果最好就选那个模型作为最终模型的,两个方面说明这个问题的考虑,第一点,那一折的好可能只是抽样的验证集正好抽的异常或者混合区域的少一点,从而从评估指标上来看更好了,但这并不代表模型一定好,其次,这个评估指标只是反应模型一方面的性能的。所以某一折按照这个来选模型一般来说是不科学的。其次一般来说交叉验证每折上差异不会太大,所以如果很大可能需要去看看数据的分布是不是有什么问题的。

首先问题表述就存在知识误区,在进行交叉验证时,k个结果应该是由同一个模型(超参一致)产生得到的,用于评估一个模型的能力。正确做法应该是通过训练得到n个模型,对n个模型进行k-折交叉验证,再根据结果选择n个模型中效果最好(指标最高,同时方差最小)的那个。

问题二

目前深度学习中,由于数据集过大,特别是cv领域,训练一个model的时间很长。是不是k-折交叉验证一般不再使用?那应该怎么在训练过程中合理地划分训练集与验证集呢?以及最终确定一个模型送往测试集。

讨论

一般深度学习来说不会做交叉验证,因为深度学习样本量很大,单独划分的验证集数量足以做模型的评估预测,这个从理论上来说其实是期望抽样的评估能尽可能接近样本空间分布的评估,所以当样本大的时候交叉验证其实并非很需要。然后说划分问题,很简单来说就是样本量尽量多一些,然后接近真实样本空间分布,或者研究的问题需要的评估方向(比如期望能够预测均匀分布的样本什么的)。

k-折交叉验证主要用在训练数据较少的情况下(机器学习),防止过拟合。深度学习中数据量一般足够大,划分出来的验证集能够比较好地代表数据分布,所以不使用。其次,数据清洗+数据划分都要建立在数据分析的基础上。


讨论来自datawhale高校群的兄弟萌,仅代表个人观点,如果不对请指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值