使用 10 折交叉验证中的验证集确定提前停止是否可以?

机器算法验证 机器学习 交叉验证
2022-04-01 17:33:51

我正在进行一项机器学习实验,通过将多个不同的神经网络分类器应用于大量数据集,使用分层 10 折交叉验证来比较它们的使用。我将性能测量为 10 倍交叉验证过程的验证集(有时称为测试集)上的错误平均值。

我的问题是,是否可以使用相同的验证集来提前停止训练过程?这种提前停止将通过在每个 epoch 之后将训练模型应用于验证集并测量性能来执行,如果它在多个连续的学习 epoch 中下降,则学习将停止,我们将采用产生最后一个 epoch很棒的表演。这将适用于所有不同的技术,并适用于所有不同的数据集。

这个可以吗?还是统计不准确?

2个回答

我并不完全清楚这个问题在问什么,但我认为答案是否定的。对于交叉验证,您需要认真考虑的是,您的算法的任何部分都不能访问测试集。如果是这样,那么您的交叉验证结果将被污染,并且不能准确衡量“真实”错误。

根据您的问题,我假设您正在使用某种迭代学习算法,例如 GBM,并且您正在使用验证集来确定您的 GBM 何时在其集成中有足够的模型并开始过度拟合。如果这是真的,那么您所做的并不是最佳的。

考虑这一点的方法是停止标准是您的学习算法的一部分。如果它是算法的一部分,那么它就不能以任何方式使用测试集。

您可能需要进行嵌套交叉验证。在您的外循环中,您分为测试集和训练集,然后在您的内循环中,您将训练集进一步划分为子测试和训练集,并按照您的方式进行。内循环交叉验证可用于从该训练集学习何时停止学习,但要获得准确的泛化错误,您需要将其应用于尚未触及的外循环的测试集内部循环的目的是从训练数据中找到最佳停止时间。为了清楚起见,假设内循环交叉验证发现最佳迭代次数是 10。在外循环中,您使用完整的外循环训练集学习模型,迭代 10 次,然后看看它在测试集上的表现如何.

这有意义吗?

请注意,根据使用的模型和数据集,这可能是也可能不是大问题。缺点是嵌套交叉验证在计算上可能非常昂贵。在你的情况下,按照你的方式做事很可能是准确性和计算时间之间的适当权衡。对您的问题最严格的回答是否定的,这不是完全有效的交叉验证。它是否适合您的情况是另一个问题。

答案是肯定的,只要您在交叉验证中保留一个用于评分的测试集。这通常通过三路分区而不是二路分区来完成:一种用于训练,一种用于验证(停止),另一种用于评分(测试)。验证集用于估计测试集上的误差。因此,这个想法是这个策略在测试集上给出了最小的错误。请注意,除非您使用验证集做出停止决定,否则无法抑制过度拟合,您已经通过使用训练集获得了参数值。