交叉验证,包括培训,验证和测试。为什么我们需要三个子集?


28

我有一个关于交叉验证过程的问题。我正在学习Cursera上的机器学习课程。主题之一是关于交叉验证。我发现很难遵循。我确实知道为什么需要CV,因为我们希望我们的模型能够很好地处理未来(未知)数据,并且CV可以防止过拟合。但是,该过程本身令人困惑。

我所了解的是,我将数据分为3个子集:训练,验证和测试。训练和验证是为了找到模型的最佳复杂性。我不明白的是第三个子集。我了解我为模型采用了许多功能,对其进行训练并在Validation子集上对其进行验证,并在更改结构时寻找最小的Cost Function。找到它后,我会在“测试”子集上测试模型。如果我已经在验证子集中找到了最小成本函数,为什么还要在测试子集中再次对其进行测试?

有人可以帮我澄清一下吗?

谢谢


您会发现[1]中的论文和讨论与您的问题无关。从内存中,它提到了三个子集:第一个子集是模型的模型,第二个子集是用来估计其参数的,而第三子集是通过预测来验证的。[1] Chatfield,C。模型不确定性,数据挖掘和统计推断(经讨论),《皇家统计学会杂志》。系列A(社会统计),1995,158,419-466
冬眠


干杯! 此链接后面的线程也是理解此问题的一个很好的来源:)
Celdor 2013年

Answers:


37
  • 训练集用于为给定模型选择最佳参数。请注意,使用训练集评估某些给定的参数集应该给您带来成本函数的无偏估计-这是根据训练集选择参数来优化成本函数的估计值的行为,这会使参数提供的估计值产生偏差。选择在训练集上表现最佳的参数;因此,在训练集上评估的那些参数的表观性能将过于乐观。
  • 使用训练集进行训练后,验证集将用于选择最佳模型。同样,请注意,使用验证集评估任何给定的模型都应为您提供成本函数的代表性估算- 选择对验证集表现最佳的模型的行为会使他们提供的估算值产生偏差。选择的模型在验证集上表现最佳;因此,在验证集上评估的模型的表观性能将过于乐观。
  • 已经训练有素使用每个模型的训练集,并选择使用最好的模型验证组,测试组告诉你你的模型的最终选择是多么好。它为您提供了在运行时将获得的实际性能的无偏估计,由于许多原因,了解这一点很重要。您不能为此使用训练集,因为参数偏向它。而且您不能为此使用验证集,因为模型本身偏向于那些验证集。因此,需要第三套。

我现在可以看到这个。谢谢。我没有想到我需要再一个子集来找到模型结构方面无偏的性能这一事实。干杯:)这是一个很好的解释。
Celdor 2013年

那么,这是否意味着最终的测试集在优化模型或选择最佳模型中不起作用?
Anmol Singh Jaggi

1
否。实际上,它仅应用于估计预期性能。因此,如果您不喜欢测试集上的性能结果,那么您应该真正避免调整模型以优化测试结果的冲动,因为您的模型将再次受到偏见。
伊森·德布尔

12

如果我已经在验证子集中找到了最小成本函数,为什么我需要在测试子集中再次对其进行测试

由于随机错误:通常情况下,您的案例数量有限。

验证(内部测试)性能的优化意味着您可能过度适合该内部测试集。内部测试集有助于最终模型的估计,因此与模型无关。

这意味着,如果要估计泛化属性,则需要具有独立于整个建模过程(包括所有优化和数据驱动的预处理或模型选择过程)的另一个(外部)测试集。

我建议您进行仿真并比较您可以得到的三种不同的误差估计

  • 重新替换:火车设置的预测可
    衡量拟合优度
  • 内部测试(使用术语:验证)设置:优化程序认为达到的质量
  • 外部测试集:泛化误差,独立于模型训练。

在仿真中,您还可以轻松地将它们与适当的大型独立生成的测试集进行比较。如果设置正确,则外部测试应该是无偏的(将其评估的替代模型写成,而不要使用基于整个数据集的“最终”模型)。内在测试通常是乐观的,甚至更乐观地替代。

在我的领域中,内部测试很容易将泛化误差低估2-5倍(对于积极的优化方案而言,误差更大)。


注意:集合的术语不是通用的。在我的领域(分析化学)中,验证通常意味着对最终过程进行了验证-因此,“测试”集比“验证”集要多。

因此,我更喜欢谈论内部和外部测试集,或者说优化测试集(=内部测试集),然后验证集就意味着外部测试集。


2

在训练模型时,必须选择模型的元参数(例如,正则化参数),甚至从多个模型中进行选择。在这种情况下,验证子集用于参数选择,而测试子集用于最终预测估计。

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.