我想将我的数据拆分 100 次(1/5 作为测试,4/5 作为训练),并使用训练数据构建模型和测试数据来计算 MSE。
我们有两种方法可以做到这一点:
做20次5折交叉验证,即每次将样本分成5折,每折作为测试数据集。
随机选择1/5的数据作为测试集,其他作为训练集。这样做 100 次。
哪一个更合理?是否有交叉验证理论提供了偏爱其中一个的理由?
我想将我的数据拆分 100 次(1/5 作为测试,4/5 作为训练),并使用训练数据构建模型和测试数据来计算 MSE。
我们有两种方法可以做到这一点:
做20次5折交叉验证,即每次将样本分成5折,每折作为测试数据集。
随机选择1/5的数据作为测试集,其他作为训练集。这样做 100 次。
哪一个更合理?是否有交叉验证理论提供了偏爱其中一个的理由?
哪种方法更合理,取决于你到底想得出什么结论。
实际上,通过选择带有替换的训练数据,有第 3 种可能性与您的版本 2 不同。这与自举验证密切相关(仅因您绘制的训练样本数量而异)。
有时更倾向于使用替换绘图而不是交叉验证方法,因为它更接近现实(在实践中抽取样本不会减少再次抽取具有相同特征的另一个样本的机会 - 至少只要只有很小一部分真实人口被抽样)。
如果我想得出结论,如果用给个案例训练给定算法可以实现的模型性能,我更喜欢这种自举验证。(尽管Bengio, Y. 和 Grandvalet, Y. 的警告:No Unbiased Estimator of the Variance of K-Fold Cross-Validation Journal of Machine Learning Research, 2004, 5, 1089-1105在这里也适用:您尝试推断从一个给定的数据集到其他训练数据集,并且在您的数据集中,无法衡量该数据集的实际代表性)
另一方面,如果您想(大约)估计您在整个数据集上构建的模型对未知数据(否则训练数据的相同特征)的执行情况,那么我更喜欢方法 1(迭代/重复交叉验证)。
请注意,无论您为跨引导验证或引导外验证选择何种方案,您都只能测试案例。由有限数量的测试用例引起的不确定性不能进一步减少,但是您运行了许多引导程序或集合验证(您的方法 2)或交叉验证的迭代。
随着更多迭代/运行而减少的部分方差是由模型不稳定性引起的方差。
在实践中,对于我们的数据类型,我们发现 200 次自举运行和 40 次折交叉验证迭代之间的总误差只有很小的差异:Beleites等人。: 使用稀疏数据集估计分类误差的方差减少,Chemom Intell Lab Syst, 79, 91 - 100 (2005)。请注意,对于我们的高维数据,resubstition/autoprediction/training error 很容易变为 0,因此 .632-bootstrap 不是一个选项,out-of-bootstrap 和 .632+ out-of-bootstrap 之间基本上没有区别.
对于包含重复保留(类似于您的方法 2)的研究,请参阅Kim:估计分类错误率:重复交叉验证、重复保留和引导计算统计和数据分析,2009, 53, 3735 - 3745。
首先,您必须了解交叉验证的基本目标是预测一种方法的效率,该方法用于对任何未来数据进行分类,即以某种方式比较两种或多种方法(如果有)的效率。由于我们不知道任何未来数据,因此我们必须使该方法高效,从而为任何随机的未来数据提供最大效率。所以在某种程度上,我们必须在交叉验证中实现最大随机性。
从逻辑上讲,第二个更合理,如果你把固定的5个集合作为测试集,那么实际上你在很大程度上减少了随机性,因为你在确定哪一组数据作为模型的基础(训练集),哪个不是。但是,如果您正在生成一个随机过程,以选择您的训练集,那么就会实现真正的随机性。因此,您的第二个过程将以某种方式“更真实”地应用交叉验证。
然而,凡事有利也有弊。毕竟,请记住,必须对整个数据集进行交叉验证,这就是为什么要进行 20 次交叉验证以耗尽整个数据集的原因。重复第二个过程100 次不会(实际上概率非常低)耗尽整个数据集。所以这是太多随机性的骗局。