交叉验证后做什么

问题描述 投票:0回答:1

我读到,一旦我使用 k 倍交叉验证(在训练集上)调整了我的超参数,我应该在整个训练集上训练我的模型,然后在测试集上评估我的模型。

然而,这是否又引入了交叉验证试图解决的问题,即测试集可能无法代表整个数据集?

validation cross-validation hyperparameters train-test-split
1个回答
0
投票

考虑训练分数的一种(粗略)方法是衡量模型“记忆”数据的能力。但对于预测建模,我们真正想知道的是模型“泛化”新数据的能力。这就是为什么我们训练一组数据并评估一组保留的数据。 交叉验证可用于两个目的。 首先是了解在有限数据条件下给定固定预处理和超参数的模型构建过程的性能。如果我们有大量数据,我们可以将其分为训练集和评估集,使用第一个集来训练模型,使用第二个集来评估模型。但通常我们的数据有限,问题是我们希望这些数据在训练期间为模型提供信息,以便它能够充分学习我们正在建模的现象,但我们也希望使用该数据来评估保留的模型数据。交叉验证是一种增加我们可用的训练和评估数据量的方法,并且不会将数据从训练泄漏到评估任务。

交叉验证的第二个用途是调整模型管道的超参数(和/或预处理)。这实际上只是第一次使用的重复应用,但它(在时间允许的情况下)是 cv 的流行用法,并且可能值得额外描述。在此任务中,我们有一系列超参数,我们希望对其进行评估,以了解哪些超参数可以产生最佳模型。如果我们只看训练分数,我们最终会得到一个过于复杂的模型来“记忆”数据——这种情况称为过度拟合训练数据。因此,我们使用保留数据来选择最佳超参数,而交叉验证是获得“保留数据得分”的方法。

因此,如果我们只考虑第一个用例,我认为您的直觉是正确的。我们删除了测试集的一些数据,从而限制了我们训练和/或验证的能力。如果我们使用该数据作为交叉验证输入的一部分,我们将有更多数据可供使用。测试集确实在这里提供了一些额外的安全性,因为我们刚刚训练了一个全新的模型(使用所有训练数据),所以我们从未检查过它的性能;测试集可以做到这一点。但如果数据有限,也许交叉验证分数是一个足够好的(甚至更好)估计。要做的一件有用的事情是检查 cv 期间所有模型拟合的性能差异。

当我们考虑交叉验证的第二种用途,即超参数选择时,事情变得有点复杂。当我们进行超参数调整(例如通过随机搜索)时,我们面临着“过度炒作”的风险(“赢家诅咒”、“多重归纳问题”、“多重假设检验问题”)。也就是说,就像使用训练分数可能导致我们过度拟合训练数据一样,使用验证分数可能导致我们过度拟合验证数据:我们最终可能会选择恰好适用于验证数据的超参数,但不会捕获有关正在建模的潜在现象的真实信息。 这是测试集可以提供信息的地方。它不用于调整超参数,因此您的模型构建过程不会对其过度拟合。如果验证分数和测试分数相差很大,则可能需要引起关注。 其次,理想情况下,测试分数仅用于估计部署的模型的执行情况,仅此而已。然而,我怀疑由于数据有限,这一理想经常被违反。但请注意,一旦您开始采取行动根据测试集调整模型构建过程,这就是一种信息泄漏,并且测试分数对真实泛化性能的估计变得不太可靠。

处理训练、调整和评估模型构建过程的数据有限问题的一种方法是进行“嵌套交叉验证”。与交叉验证如何帮助我们使用训练集进行训练和评估类似,嵌套简历可以帮助我们训练、验证和测试。但这可能需要大量资源。

© www.soinside.com 2019 - 2024. All rights reserved.