如何评估/选择交叉验证方法?

机器算法验证 交叉验证
2022-03-06 17:50:13

如何确定哪种交叉验证方法适合我的问题和数据类型?例如,在留一法或 K-fold 之间进行选择(哪个 K 合适?)。我的大部分搜索最终都是选择模型而不是选择交叉验证方法。

2个回答

有很多类似的问题,请浏览 [cross-validation] 上的主题,例如Cross-validation 或 bootstrapping 以评估分类性能?

这是要点:


更新:论文涉及分类器验证。回归模型的验证往往更容易,因为根据我的经验,更容易获得稳定的模型(= 由于模型不稳定性导致的方差更小),而且由于有限测试样本量导致的方差往往问题更小。


我忘记链接
Esbensen, KH 和 Geladi, P.:正确验证的原则:使用和滥用重新采样进行验证,J Chemom,24, 168-187 (2010)。DOI: 10.1002/cem.1310
讨论了重采样验证的重要限制,即它不能用于测量由(仪器)漂移引起的误差。


更新:@alfa 询问

  • 时间复杂度:时间复杂度与代理模型的数量成线性关系。由于 bootstrap 据说效率更高(即比交叉验证需要更少的迭代),所以它在这里可能有一点优势。我认为这在实践中并不重要(至少对我的数据而言,因为只有很少的测试用例导致的方差不确定性是我的应用程序的限制因素)。

对于线性模型,可以使用“帽子矩阵”计算留一估计量。这意味着可以在不从所有数据点的拟合中对于更多模型,对此的近似值是已知的。但是a)只有当数据集中的每一行都是独立的情况下才有可能,并且b)您无法迭代/重复并因此无法检查模型稳定性并减少相关方差的影响的问题无法通过该方法解决.n

如果您的样本很少,您可以采取的一种方法是留一法。当然,您需要将它与某种重采样技术(如 bootstrap 或 jackknife)结合起来,以便了解结果的稳定性。

如果你有足够的数据,那么你可以去 K-fold。K 取决于结果的稳定性。如果结果在 K-folds 上是稳定的,那就没问题了。当你没有足够的数据来训练每个 K 折叠,或者有太多的噪音等时,问题就开始了。

如果您有很多样本,您可以简单地按一定比例(例如 70/30%)在训练集上进行拆分。然后是明智地选择拆分方式的问题(例如,如果是这种情况,则随机选择时间戳等)。在实践中,可能很难训练例如 5 次,因为每次训练可能需要几天时间。

也就是说,在所有情况下,如果您想进行适当的评估,您应该进行三个拆分,即培训/验证/测试。