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


21

我一直在阅读有关k折验证的信息,我想确保自己了解其工作原理。

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

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


3
这取决于您想做什么。如果您想要一个广义的性能估算,那么可以,该模型应该对从未见过的数据进行测试。但这并不意味着它必须是单个保留迭代,您可以使用重采样来实现相同的目标。
Firebug

2
...这意味着每当您使用“验证”结果进行超参数优化/模型调整时,都需要独立于该调整的另一阶段验证。对于这两个阶段,您都可以使用例如交叉验证或保留(或超出引导程序或...)。CV + CV称为嵌套CV,按住+按住可导致您提到的3组设置
cbeleites支持Monica

Answers:


9

在K-Fold方法中,我们是否仍然保留最后的测试集,并且仅将剩余数据用于训练和超参数调整(即,我们将剩余数据分成k折,然后在每折叠训练(或选择任何性能指标)以调整我们的超参数)?

是。通常,永远不要使用测试集更改模型(例如,其超参数)。

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


6
+1,但您可能想提及嵌套的交叉验证,以替代交叉验证+测试集。
变形虫说莫妮卡

1
“有时可以用于超参数调整以外的目的”。例如,您可以将交叉验证用于验证目的(=测试未知案例以衡量泛化错误)。
cbeleites支持Monica

3

通常,是的。基本上您是在谈论偏差方差的权衡。如果您使用数据构建模型(训练和验证数据),并遍历不同的超参数,并且尝试最大化平均性能指标,则您的模型可能不如所示。

但是,尤其是在小型数据集中,额外的分割可能导致更小的训练集并导致模型变坏。


2
这不是对该问题的真正答案。
Michael R. Chernick

您可以扩展它,以便为接受的答案和相当详细的评论添加一些内容吗?
mdewey

1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.