zoukankan      html  css  js  c++  java
  • S折交叉验证(S-fold cross validation)

    S折交叉验证(S-fold cross validation)

    觉得有用的话,欢迎一起讨论相互学习~

    我的微博我的github我的B站

    仅为个人观点,欢迎讨论

    参考文献
    https://blog.csdn.net/aliceyangxi1987/article/details/73532651
    李航-统计学习方法
    https://blog.csdn.net/jasonding1354/article/details/50562513
    知乎问题

    引用《统计学习方法》

    • S折交叉验证
      • 首先随机地将已给数据切分为S个互补相交的大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程对所有可能的S种选择重复进行;最后选出S次测评中平均测试误差最小的模型

    问题引入

    此处引入各种想法

    1. 目前,根据行业公认的评价方法的所谓准确率等指标,都是对测试集而言的,因此要求测试集不参与模型的训练过程。
      十折交叉验证方法中,10份数据轮流作为训练集和验证集。
      因此实际上也是全部参加了训练的。因此,理论上为了保证最后测试结果的有效性,应该先将数据分为训练集和测试集,然后对训练集采用十折交叉验证。

    链接:https://www.zhihu.com/question/274417233/answer/376476821

    1. 一般情况下,我会选择先把整个数据集分为训练集合(training set)和测试集合(test set)。训练集用来构建和筛选模型,测试集合用于评估最后确定的模型。 具体言之,我们经常会用cross validation 来进行模型选择和hyperparameter的优化,在确定了最佳模型和hyperparameters之后,再对最终的模型进行评估。而为保证最终的模型评估不被这个优化的过程所影响,评估时所用的数据集(也就是test set)不应该参与过之前的模型选择和参数优化,所以是独立于10-fold cross validation时所用的数据集的。
      简而言之,我总结一下训练和评估的大致步骤:
      1. 将数据集合分为训练集合和测试集合;
      2. 在训练集合中使用k-fold validation来进行模型选择和调参数(hyperparameters),确定最佳模型和参数配置;
      3. 使用所有的训练集合中的数据来训练这个最佳模型;
      4. 用测试数据集来评估这个最佳模型。

    链接:https://www.zhihu.com/question/274417233/answer/378759200

    1. 如果是将全部的数据分成10份d1,d2...d10,挑选其中的d1作为测试集,其他的作为训练集,那么在训练之后用模型对d1进行测试。然后下一组实验开始的时候挑选d2作为测试集,其他的作为训练集,训练测试,再依次进行后面的。最后求平均。
      为什么测试集参与了训练?每组开始的时候模型的参数应该是重新初始化的吧。模型参数重新初始化,等同于在这一组实验内测试集仅作为测试,并没有参与训练啊。

    链接:https://www.zhihu.com/question/274417233/answer/552752196

    个人观点

    结合 csdn_JasonDing1354cdsn_liuweiyuxiang以及csdn_aliceyangxi1987的观点和我自己的思考

    以下观点仅代表个人观点

    1. 交叉验证一般是用来表示一个方法比另一个方法好的,或者一个超参数比另一个超参数好的(而不是具体的神经元的偏置和权重) K折交叉验证使用全部的数据,并且会有K个不同的模型,通过计算K个模型对应的测试集上的表现的平均值评价这个方法的好坏。也就是说 每次权重都进行了初始化,是K个不同的模型,评价的是方法
    2. 即我认同的是知乎上第三个观点:
      如果为了提高模型的性能,我大可使用所有的数据进行训练。
      如果我真的需要评价模型的好坏,直接给个没见过的数据就好了(毕竟产学研相结合,什么东西都要放在实际生活着中进行检测,人为的提前划分数据集为训练集和测试集,再在训练集上使用K折验证,然后用测试集进行验证,不如直接把训练集上所有数据都用来训练,更多的数据训练效果更好啊!!哈哈哈~) 这样就失去交叉验证的意义了~ 呵呵呵
  • 相关阅读:
    C++ 将对象写入文件 并读取
    IronPython fail to add reference to WebDriver.dll
    How to Capture and Decrypt Lync Server 2010 TLS Traffic Using Microsoft Tools
    .net code injection
    数学系学生应该知道的十个学术网站
    Difference Between Currency Swap and FX Swap
    Swift开源parser
    谈谈我对证券公司一些部门的理解(前、中、后台)[z]
    JDK8记FullGC时候Metaspace内存不会被垃圾回收
    JVM源码分析之JDK8下的僵尸(无法回收)类加载器[z]
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/10516714.html
Copyright © 2011-2022 走看看