Answers:
您可以添加到该列表:
关于如何使用这些技术或何时使用它们,我确实没有很多建议。您可以在R中使用插入符号包来比较CV,Boot,Boot632,留一法,留一法分组和袋外交叉验证。
通常,我通常使用boostrap,因为它比重复的k倍CV或留一法CV的计算强度小。Boot632是我选择的算法,因为它不需要比引导程序更多的计算,并且在某些情况下已证明比交叉验证或基本引导程序更好。
我几乎总是对随机森林使用袋外误差估计,而不是交叉验证。袋外错误通常是无偏见的,随机森林需要足够长的时间才能按原样计算。
K折交叉验证(CV)将您的数据随机分为K个分区,然后您将这K个部分之一作为测试用例,并将其他K-1个部分一起作为训练数据。遗漏(LOO)是您取出N个数据项并进行N折CV的特殊情况。从某种意义上说,“伸出”是另一种特殊情况,您只能选择一个K折作为测试,而不旋转所有K折。
据我所知,10倍CV几乎是必需的,因为它可以有效地使用您的数据,并且还有助于避免不幸的分区选择。Hold Out不能有效地利用您的数据,LOO也没有那么强大(或类似的功能),但是10倍的折叠是正确的。
如果您知道数据包含多个类别,而一个或多个类别比其余类别小得多,则您的K个随机分区中的某些甚至可能根本不包含任何较小的类别,这将很糟糕。为了确保每个分区都具有合理的代表性,请使用分层方法:将数据分为多个类别,然后通过从每个类别中按比例随机选择来创建随机分区。
K-fold CV上的所有这些变体都可以从您的数据中选择而无需替换。引导程序选择要替换的数据,因此可以多次包含相同的数据,并且可能根本不包含某些数据。(与“ K折”不同,每个“分区”也将有N个项目,其中每个分区将有N / K个项目。)
(不过,我不得不承认,我不完全知道引导程序将如何在CV中使用。测试和CV的原理是确保您不对经过训练的数据进行测试,因此您可以关于您的技术+系数在现实世界中如何工作的更现实的想法。)
编辑:根据注释,将“保留不有效”替换为“保留不有效利用您的数据”以帮助澄清。
我发现Wikipedia文章中链接到的参考文献之一非常有用
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.48.529&rep=rep1&type=pdf
“交叉验证和引导程序的准确性估计和模型选择研究”,Ron Kohavi,IJCAI95
它包含CV技术子集的经验比较。tl; dr版本基本上是“使用10倍CV”。
...以及何时使用它们的指南...
不幸的是,这个问题很难得到应有的重视。交叉验证至少有两个主要用途:选择模型和评估模型性能。
粗略地讲,如果您使用CV变体以较高的“测试/测试”比率对数据进行分割,则这对于评估会更好。使用更大的训练集将更准确地模拟适合整个数据集的模型的性能。
但是,高火车与测试的比率对于选择来说可能更糟。想象一下,确实有一个“最佳”模型可供您“选择”,但是您的数据集很大。然后,过大拟合的太大模型将具有与“最佳”模型几乎相同的CV性能(因为您可以成功地估计其杂散参数可以忽略不计)。数据的随机性和CV /拆分过程通常会导致您选择过度拟合模型,而不是真正的“最佳”模型。
有关线性回归案例中较早的渐近理论,请参见Shao(1993),“通过交叉验证进行线性模型选择”。Yang(2007),“用于比较回归程序的交叉验证的一致性”,Yang(2006),“用于分类的比较学习方法”给出了关于更一般的回归和分类问题的渐近理论。但是很难获得严格的有限样本建议。