如何计算交叉验证中的折叠数(k-fold)?

数据挖掘 机器学习 Python scikit-学习 交叉验证
2021-10-10 22:28:45

当我应用交叉验证来检查模型时,我对如何选择折叠数(在 k-fold CV 中)感到困惑。它取决于数据大小或其他参数吗?

2个回答

折叠数通常由数据集中包含的实例数决定。例如,如果您的数据中有 10 个实例,则 10 折交叉验证没有意义。ķ-fold 交叉验证用于两个主要目的,调整超参数和更好地评估模型的性能。

在这两种情况下选择ķ取决于同一件事。您必须确保训练集和测试集来自同一分布。并且两组都包含足够的变化,以便表示下划线分布。在只有 10 个实例的 10 倍交叉验证中,测试集中只有 1 个实例。此实例不能正确表示基础分布的变化。

话虽如此,选择ķ不是一门精确的科学,因为很难估计你的折叠代表你的整体数据集的程度。我通常使用 5 折交叉验证。这意味着 20% 的数据用于测试,这通常是相当准确的。但是,如果您的数据集大小急剧增加,例如如果您有超过 100,000 个实例,则可以看出 10 倍交叉验证将导致 10,000 个实例的倍数。这应该足以可靠地测试您的模型。

简而言之,是的,折叠数取决于数据大小。我通常坚持 4 或 5 倍。确保打乱你的数据,这样你的折叠不包含固有的偏见。

取决于您愿意为此支付多少 CPU 汁液。具有较低的 K 意味着更少的方差,因此,更多的偏差,而具有更高的 K 意味着更多的方差,因此和更低的偏差。

此外,应该记住不同值的计算成本。高 K 意味着更多的折叠,因此更高的计算时间,反之亦然。因此,需要通过超调优分析找到两者之间的最佳平衡点。

此外,您需要牢记数据的大小。如果您的数据非常少,那么即使使用 k-fold crossval 也是没有意义的。因此,您可能想要使用留一式 CV (LOOCV)。