在同一个测试集上比较多个模型并选择最好的模型是错误的吗?

机器算法验证 机器学习 模型选择 模型评估 模型比较 方法比较
2022-03-19 07:16:58

假设我们将数据集分成 3 部分(训练、验证和测试)。我知道确保测试集在模型选择或超参数调整期间不会影响我们的决策很重要,否则我们最终可能会过度拟合测试集并得到不切实际的结果。因此,如果我们测试某个模型然后尝试更改其超参数并在同一测试集上再次训练、验证和测试它,这显然是错误的。

但是,如果我们训练和验证了 5 个不同的模型,并且我们决定不再修改它们中的任何一个,该怎么办。然后我们在(相同的)看不见的测试集上测试了 5 个模型中的每一个。如果我们选择能够达到最佳测试结果的模型,这不就像我们尝试不同的超参数组合并选择在测试集上具有最佳性能的模型一样吗?

从这个意义上说,当研究论文提出多种方法,在相同的数据上测试它们,并决定其中一个是最好的,因为它在测试集上的性能最好?不是假设测试集不会影响最佳方法的选择吗?

但如果这是错误的,我们应该如何在同一测试集上比较方法(来自不同论文)而不会有偏见?我觉得这一点存在矛盾。

1个回答

您也可以将模型本身视为超参数。如果您使用测试集优化超参数,然后选择最佳模型,那么您会在循环中过拟合。

我喜欢关于模型选择的 sklearn 文档,其中包含以下图表:

型号选择

并进一步指出:

在评估估计器的不同设置(“超参数”)时,例如必须为 SVM 手动设置的 C 设置,仍然存在在测试集上过度拟合的风险,因为可以调整参数直到估计器表现最佳。这样,关于测试集的知识可以“泄漏”到模型中,并且评估指标不再报告泛化性能为了解决这个问题,数据集的另一部分可以作为所谓的“验证集”:在训练集上进行训练,然后对验证集进行评估,当实验似乎成功时,最终评估可以在测试集上完成。

此外,我建议您阅读:

请注意,当您调用您的holdout settest时,这就是其他人所说的evaluationset。在这种情况下,请查看MFML 069 - 正确完成模型验证