前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模型选择评估方法

模型选择评估方法

作者头像
Echo_fy
发布2018-07-04 15:03:54
4440
发布2018-07-04 15:03:54
举报
文章被收录于专栏:Echo is learningEcho is learning

目录:

  • 留出法(hold-out)
  • 交叉验证法(cross validation)
  • 留一法(Leave-One-Out,LOO)
  • 自助法(bootstrapping)
  • 总结

前提:

总数据集D,数据集大小为n;

训练集S;

测试集T。 

1、留出法(hold-out)

直接将数据集D分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T,即$D=S \cup T,S \cap T= \varnothing $,在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

需要注意:

  • 训练集和测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响

  实际上,实验中无法保证数据划分时可以保持分布的一致性,什么叫划分时保证了分布的一致性呢?如图所示,假设总数据集的分布如下图所示:

  如果数据采样得到的是红点,则采样保持了数据分布的一致性(采样数据保持了原始数据的分布),如果采样数据是绿点,那么就没有保持原始数据的分布,我们当然希望抽样时能抽到红点类似的分布,但即使是随机抽样,也是有可能不幸的抽到绿点类似的分布。

  一般的解决办法是进行若干次的随机划分,重复进行实验评估后取平均值作为留出法的评估结果(概率上而言不大可能100次都抽到绿点类似的分布,抽到红点类似分布才是常规情况)。

  • 划分时样本的顺序不同,也会得到不一样的结果

  如果划分的结果是前多少个数据(S)和后多少个数据(T),或者是其他的某种划分方式,实验后得到的评估结果也会不一样。

   所以一般会对数据集打乱顺序再进行采样。

  • 如何确定训练集和测试集的大小呢?训练集 / 测试集窘境

  我们希望评估的是用D训练出的模型的性能,但留出法需要一部分数据作为测试数据,不进行模型的训练,这样的话,就出现了训练集 / 测试集窘境:

    • 若令S很大,则训练的模型更加接近D训练的模型,但是此时T比较小,评估结果可能不够稳定准确;
    • 若令T较大,虽说评估结果更稳定了,但是训练出来的模型和D训练的模型的差别就变大了;

2、交叉验证法(cross validation)

 交叉验证法将数据集分成K个互斥的大小相似的子集,每个子集$D_i$尽可能保证数据的一致性(可以通过分层抽样得到);然后每次用K-1个子集作为训练集,剩下的作为测试集;这样就可以得到K组训练集 / 测试集了,从而可以进行K次训练和测试,得到K个模型和评估结果,最终的结果是这K个评估结果的均值。

根据K的不同,称为K折交叉验证,最常用的K是10,另外还有5和20也比较常用。以下为10折交叉验证的示意图:

交叉验证法中抽取了K个大小相似的数据分布接近的互斥数据集,这样就尽可能的规避了在留出法中依赖数据划分的问题

3、留一法(Leave-One-Out,LOO)

留一法是交叉验证的一种极端的情况,每次只留一个数据作为测试,用n-1(n为总的数据集的数目)个数据作为训练集,训练n次,得到n个模型和评估结果,最终结果是这n和结果的均值。

  • 留一法中实际被评估的模型(S(n-1个数据)训练出来的模型)和期望被评估的模型(D训练出来的模型)非常的接近(因为只少了一个数据),因此,留一法的结果往往被认为比较准确
  • 留一法在训练数据集比较大时,计算的开销是非常大的(比如100万个数据,就要训练100万个模型(未考虑调参时))
  • 留一法的估计结果也未必永远比其他评估方法准确(根据没有免费的午餐定理)

注:

没有免费的午餐定理:所有的算法的性能的期望都是一样的!

4、自助法(bootstrapping)

在留出法和交叉验证法中,留出了一部分数据做测试集,不参与训练,这样实际评估模型所使用的数据集比D小,这样必然会引入因训练样本规模不同造成的估计偏差,留一法虽然受训练样本规模的影响小,但是计算成本太大。

自助法以自助采样法为基础:从D中有放回的抽取n次样本,得到D'(D'中n个样本有重复),可以证明,D中有大约36.8%的样本没有出现在D'中,用D'作为训练集,D-D'作为测试集,这样既有n个训练集,规避了训练数据集规模不同造成的误差,又有不同与训练数据的数据作为测试集。

  • 自助法在数据量小,难以有效的划分训练 / 测试集时很有用
  • 自助法能从初始数据集中产生多个不同的数据集,这对集成学习等方法有很大的好处
  • 自助法改变了原始数据集的分布,这会引入估计偏差,因此,在数据量足够大时,留出法和交叉验证法更常用

5、总结

  • 如何抉择交叉验证法和留出法?

  交叉验证法无疑比留出法更加的耗时,在数据量比较大的时候,一般而言,留出法就足够了,不需要用交叉验证法,但是数据量的大小如何去评估也是个问题。一般而言,我们可以将交叉验证法和留出法得到的结果进行比对,如果它们的值差别不大,那就没有必要用交叉验证了,直接用留出法就好了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、留出法(hold-out)
  • 2、交叉验证法(cross validation)
  • 3、留一法(Leave-One-Out,LOO)
  • 4、自助法(bootstrapping)
  • 5、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档