• 模型选择评估方法


    目录:

    • 留出法(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、总结

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

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

  • 相关阅读:
    初遇黑客
    第四周学习总结
    第三周学习总结
    关于base64编码的原理及如何在python中实现
    在python中如何将十进制小数转换成二进制
    《信息安全专业导论》第二周学习总结
    计算机科学概论速读问题
    刘谨铭的自我介绍
    师生关系
    20201318快速浏览教材提问
  • 原文地址:https://www.cnblogs.com/echo-coding/p/9018175.html
Copyright © 2020-2023  润新知