使用 k 折交叉验证时,我们是否需要测试集?

机器算法验证 交叉验证 验证 样本外
2022-02-05 22:07:18

我一直在阅读有关 k-fold 验证的内容,我想确保我了解它是如何工作的。

我知道对于holdout方法,数据被分成三组,测试集仅用于最后评估模型的性能,而验证集用于调整超参数等。

在k-fold方法中,我们最后是否还保留一个测试集,只使用剩余数据进行训练和超参数调优,即我们将剩余数据分成k折,然后使用训练后的平均准确率每次折叠(或我们选择调整超参数的任何性能指标)?还是我们根本不使用单独的测试集,而只是将整个数据集分成 k 折(如果是这种情况,我假设我们只是将 k 折上的平均准确率视为我们的最终准确率)?

3个回答

在K-Fold方法中,我们最后是否还保留一个测试集,只使用剩余的数据进行训练和超参数调优(即我们将剩余的数据分成k折,然后使用之后的平均准确率)每次折叠(或我们选择的任何性能指标)进行训练以调整我们的超参数)?

是的。作为一项规则,测试集永远不应该用来改变你的模型(例如,它的超参数)。

然而,交叉验证有时可以用于超参数调整以外的目的,例如确定训练/测试拆分对结果的影响程度。

一般来说,是的。基本上你我们在谈论偏差 - 方差权衡。如果您使用数据来构建模型(训练和验证数据)并迭代不同的超参数并尝试最大化平均性能指标,您的模型可能不如指示的那么好。

但是,特别是在小型数据集中,额外的拆分可能会导致训练集更小,并导致模型不好。

理想情况下,验证(用于模型选择)和最终测试不应混为一谈。但是,如果您的 k 值较高,或者是留一,则使用测试结果来指导您的模型选择危害较小。在这种情况下,如果您正在撰写学术论文,请不要这样做(除非您费心解释)——这意味着始终有一个单独的测试集。如果您正在构建一个实际项目,那么这样做是可以的。