专栏首页深度应用[深度概念]·K-Fold 交叉验证 (Cross-Validation)的理解与应用

[深度概念]·K-Fold 交叉验证 (Cross-Validation)的理解与应用

K-Fold 交叉验证 (Cross-Validation)的理解与应用

个人主页-->http://www.yansongsong.cn/

1.K-Fold 交叉验证概念

在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。

验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。

2.举例说明

下面举一个具体的例子来说明K-Fold的过程,比如如下的数据

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]

分为K=3组后

Fold1: [0.5, 0.2]
Fold2: [0.1, 0.3]
Fold3: [0.4, 0.6]

交叉验证的时会使用如下三个模型,分别进行训练和测试,每个测试集误差MSE加和平均就得到了交叉验证的总评分

Model1: Trained on Fold1 + Fold2, Tested on Fold3
Model2: Trained on Fold2 + Fold3, Tested on Fold1
Model3: Trained on Fold1 + Fold3, Tested on Fold2

3.应用讲解

1、 将全部训练集S分成k个不相交的子集,假设S中的训练样例个数为m,那么每一个子集有m/k个训练样例,相应的子集称作{

}。

2、 每次从模型集合M中拿出来一个

,然后在训练子集中选择出k-1个

{

}(也就是每次只留下一个

),使用这k-1个子集训练

后,得到假设函数

。最后使用剩下的一份

作测试,得到经验错误

3、 由于我们每次留下一个

(j从1到k),因此会得到k个经验错误,那么对于一个

,它的经验错误是这k个经验错误的平均。

4、 选出平均经验错误率最小的

,然后使用全部的S再做一次训练,得到最后的

核心内容:

通过上述1,2,3步进行模型性能的测试,取平均值作为某个模型的性能指标

方法一,将所有训练的KFold进行融合

方法二,根据性能指标来挑选出最优模型,再进行上述第4步重新进行训练,获得最终模型

疑问解答:

1.为什么不直接拆分训练集与数据集,来验证模型性能,反而采用多次划分的形式,岂不是太麻烦了?

我们为了防止在训练过程中,出现过拟合的问题,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。这样的直接划分会导致一个问题就是测试集不会参与训练,这样在小的数据集上会浪费掉这部分数据,无法使模型达到最优(数据决定了程性能上限,模型与算法会逼近这个上限)。但是我们又不能划分测试集,因为需要验证网络泛化性能。采用K-Fold 多次划分的形式就可以利用全部数据集。最后采用平均的方法合理表示模型性能。

2.为什么还要进行所有数据集重新训练,是否太浪费时间?

我们通过K-Fold 多次划分的形式进行训练是为了获取某个模型的性能指标,单一K-Fold训练的模型无法表示总体性能,但是我们可以通过K-Fold训练的训练记录下来较为优异的超参数,然后再以最优模型最优参数进行重新训练,将会取得更优结果。

也可以采取方法一的方式不再进行训练使用模型融合的方式。

3.何时使用K-Fold

我的看法,数据总量较小时,其他方法无法继续提升性能,可以尝试K-Fold。其他情况就不太建议了,例如数据量很大,就没必要更多训练数据,同时训练成本也要扩大K倍(主要指的训练时间)。

4.举例说明

在上面的5种组合上做了5次训练,测试的时候我们就有了5个模型,每个模型预测一遍测试集就得到了5个概率矩阵,每个概率矩阵的形状都是(测试集样本数 x 17)。我们可以将5个概率矩阵直接求平均后做二分类预测,也可以分别做完二分类预测,再做投票,来获得最终的多类预测结果。这个结果实际上用到了所有5个折的训练数据,会更加准确,也更加稳定。

当然如果只是想用上所有数据的话,更简单的办法就是直接把整个训练集用这个模型跑一遍,再把训练好的模型模型对测试集作预测。不过我们没有采用这第二种方式,一来,所有训练样本都被这模型“看光了”,没有额外的验证集,难以评估其泛化性能;二来,我们认为第一种方法中,5个模型的预测结果做了个简单的Ensemble,会更稳定一点。

5.参考

1.K-Fold 交叉验证 (Cross-Validation)

2.规则化和模型选择(Regularization and model selection)

3.Kaggle求生:亚马逊热带雨林篇

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [深度学习概念]·深度学习性能提升的技巧

    调整训练数据或是问题的抽象定义方法可能会带来巨大的效果改善。甚至是最显著的改善。 下面是概览:

    小宋是呢
  • [深度学习概念]·模型选择、欠拟合和过拟合原理分析(基于MXNet实现)

    如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不一定更准确。这是为什么呢?

    小宋是呢
  • 『深度应用』一文搞懂深度学习人脸识别模型开发流程

    度量学习(Metric Learning),也称距离度量学习(Distance Metric Learning,DML) 属于机器学习的一种。其本质就是相似度的...

    小宋是呢
  • 干货 | 三分钟重新学习交叉验证

    AI 科技评论按:文章的作者 Georgios Drakos 是一名数据科学家,通过本文作者向我们介绍了交叉验证的基本概念、作用以及如何使用。AI 科技评论根据...

    AI科技评论
  • 机器学习「七步走」——Google工程师带你入门机器学习

    本文由 Google 的开发技术推广工程师 Yufeng Guo 主讲,用通俗易懂的语言帮助你了解人工智能和机器学习。 不论是皮肤癌监测、黄瓜自动分类还是检测故...

    AI科技大本营
  • 模型评估、过拟合欠拟合以及超参数调优方法

    上一篇文章介绍了性能评估标准,但如何进行模型评估呢,如何对数据集进行划分出训练集、验证集和测试集呢?如何应对可能的过拟合和欠拟合问题,还有超参数的调优,如何更好...

    材ccc
  • 机器学习黑客系列:模型比较与选择

    训练机器学习并生成模型以供将来预测的科学被广泛使用。为了更好地解决我们的问题,我们引入了不会太复杂的代码,更高级的学习算法和统计方法。 模型的比较和选择在我关于...

    AiTechYun
  • 中国台湾大学林轩田机器学习基石课程学习笔记15 -- Validation

    上节课我们主要讲了为了避免overfitting,可以使用regularization方法来解决。在之前的 上加上一个regularizer,生成 ,将其最...

    红色石头
  • 机器学习平台的模型发布指南

    作为机器学习平台的构建者,在得到应用于不同场景、不同类型的模型后,接下来需要思考的就是模型产生价值的场景,比如:

    凯哥
  • 如何提高机器学习项目的准确性?我们有妙招!

    场景:一旦我们使用Python DataFrame Merge()方法连接两个数据集,我们可能会看到空值或占位符字符串(如NaN)表示该数字为空。

    量化投资与机器学习微信公众号

扫码关注云+社区

领取腾讯云代金券