我知道在由具有不同超参数的一种算法生成的模型之间进行选择,选择最佳模型的指标应该是对训练集的交叉验证。
但是如何在不同算法生成的模型之间进行选择呢?我应该通过哪个指标来比较它们,是在训练集上通过交叉验证产生的指标还是在测试集上产生的指标?还有为什么?
我知道在由具有不同超参数的一种算法生成的模型之间进行选择,选择最佳模型的指标应该是对训练集的交叉验证。
但是如何在不同算法生成的模型之间进行选择呢?我应该通过哪个指标来比较它们,是在训练集上通过交叉验证产生的指标还是在测试集上产生的指标?还有为什么?
您的主要问题似乎是不同的算法呢?,答案是没有区别。
虽然很难与“测试集”答案逻辑争论,但也很容易找到反例。如果您的训练集有 10 万个示例,并且您使用了 5 倍 CV,那么您还有一个只有 200 个示例的测试集……测试集小 100 倍,并且可能更不可靠。
通常你会使用交叉验证或测试集。如果你的训练数据很大,我通常建议只使用测试集,因为你可能有足够的数据,而且 CV 需要更长的时间来训练。当训练数据稀缺时,交叉验证更有意义:训练时间可能不那么重要,你想在你拥有的所有东西上训练最终模型,而且你会重视 N-fold CV 给你的 N 个不同的意见,因为你的样本量很小。
如果您对多个模型(无论是相同的算法还是不同的算法)都使用了交叉验证和测试集,那么您应该期望它们都同意您选择的最佳模型。如果模型 A 在交叉验证上比模型 B 做得更好,但模型 B 在测试数据上做得更好,那么你应该去寻找问题。
如果确实发生了这种情况,我首先会怀疑测试数据不具有代表性。例如,夸大其词,您的训练数据涵盖 1950 年至 1970 年期间,而您的测试数据是 2020 年。在另一个极端,我会检查测试数据是否实际上不在您的训练数据中(暗示模型 B 确实更好的记忆工作)。
当您比较不同的算法时,您严格使用测试集来比较性能。也就是说,您使用整个训练集(使用交叉验证或其他方法)重新训练所有候选模型,并对测试集进行预测,您可以从中评估模型性能。这些分数是您所拥有的预测性能的唯一公正衡量标准。
我们基于完全看不见的测试集而不是训练集来比较分数的原因是为了避免超参数调整步骤中的优化偏差。基本上,您选择的超参数组合在交叉验证期间过度拟合训练集的可能性非常大。一篇比较有名的论文详细探讨了这种现象。结果是您在优化超参数时发现的分数是乐观的。