在进行超参数调整基础测试数据和模型选择基础验证数据之后,为什么不对整个数据训练最终模型呢?


9

整个数据是指培训+测试+验证

一旦我使用验证数据固定了我的超参数,并使用测试数据选择了模型,对整个数据进行模型训练就更好了,这样对参数进行训练就比对模型进行仅训练更好了。训练数据


2
您永远不要使用测试数据来修复超参数。您刚刚删除了盲人对照组(测试集),就破坏了整个实验。
JahKnows

@JahKnows完成模型的超参数调整后,我不了解其危害,除了我不知道它在不同数据集上的推广效果如何。我如何破坏实验?我想念什么吗?
Apoorva Abhishekh

Answers:


8

这个问题是基于错误的假设。许多人按照您说的做“做不到”。

实际上,在广泛部署的sklearn软件包中的网格搜索实现就可以做到这一点。除非refit=False,否则它将使用整个数据重新训练最终模型。

我认为对于某些超参数可能不是很理想,因为它们与数据量有关。例如,考虑决策树min_samples_leaf预修剪策略。如果您有更多数据,则预修剪可能无法如您所愿。

但是同样,大多数人实际上在交叉验证后确实会使用整个数据进行再训练,从而最终获得最佳模型。

附录: @NeilSlater在下面说,有些人在简历之上执行保留。换句话说,他们进行了训练测试拆分,然后在训练中执行模型选择。据他介绍,他们使用原始的训练集拆分而不是测试集重新训练。然后,将测试集用于执行最终模型估算。我个人认为这有三个缺陷:(a)它不能解决我提到的一些问题,因为无论如何您都要重新训练,某些超参数取决于训练量;(b)在测试许多模型时,我更喜欢更复杂的模型嵌套交叉验证之类的方法,这样就不会浪费任何数据;(c)保留是一种糟糕的方法,可以推断出当数据很少时模型将如何泛化。


该功能是关于重复使用交叉验证的,但仍然不建议您重复使用测试数据,因为您仅从交叉验证中获得假设,而没有衡量性能的方法。否则,任何错误或问题参数(例如您提供的示例)都可能使模型变得不可察觉。
尼尔·斯莱特

@NeilSlater我不明白您在这里说的是什么:“此功能与重新使用交叉验证有关”
Ricardo Cruz

“功能”-> refitGridSearchCV函数的选项。它不适合包含保留的测试数据(甚至看不到该数据)。
尼尔·斯莱特

@NeilSlater,如果您不相信我(此处),则可以轻松地自己检查代码。如果refit = True,则“使用整个数据集拟合最佳估计量”。
里卡多·克鲁兹

1
@NeilSlater,这不是我的经验,但我已将您的经验添加到我的评论中,以便其他人可以从中受益。谢谢。
里卡多·克鲁兹

1

是的你可以。

由于测试数据应该来自类似的分布来训练数据,因此您不会破坏模型。如果您对模型进行了适当的训练,那么您将不会发现任何重大变化(除了以前的测试/验证数据上的更好的准确性指标)。

但是,罕见的是,测试数据与火车数据的分布完全相同,因此在实际应用案例中,您可能会获得更好的模型通用性。


1
现在,按照此建议包括测试数据的问题是您无法衡量模型的概括程度。是的,您可能希望它能更好地推广。但是,您不知道,因为您已经删除了测量它的能力。我建议添加此警告,并解释为什么有时仍然可以解决此问题(例如,在接收新数据时,您可以将其视为新的测试集并逐步建立新的度量,同时希望利用更好的模型-不过有风险)
Neil Slater

@NeilSlater:我知道我已经删除了衡量它在不同数据集上的泛化程度的能力。但是,如果我同时具有测试和保持功能,即使在进行了超参数调整之后,我也可以在训练+测试中再次训练我的模型,但仍然会留下保持状态,以检查我的模型如何推广。我知道这与我的要求不同。但是我只想知道你的看法。
Apoorva Abhishekh

1
@ApoorvaAbhishekh:如果您还有另一个保留数据集,则可以将其用作针对在new_train = {old train,old cv,old test}上训练的新模型的新测试集。然后,您将获得一定程度的概括。尽管您必须小心不要过度使用它-如果事实证明新的组合集存在问题(例如,由于更多数据,需要提前停止进行更改),那么您也不能将其用作新的cv集。。。除非您还有其他保留设置。。。
尼尔·斯莱特

@NeilSlater从理论上讲,您需要新的数据集来了解性能。在实践中,您可能会确定模型运行良好,因为您已经使用了很长时间,并且知道会发生什么。但是通常您还具有其他数据来检查模型的性能,例如在计算机视觉中未标记的数据。这是不对的,但也可以。当然,这是极端情况,但我想说这可能有用。我本人总是有不参加培训的测试集。
Il'ya Zhenin

1

该问题的答案取决于您使用的训练算法(技术)。例如,我看到了集成分类中的一些方法,这些方法最后将训练和验证(而不是测试)组合在一起。重要的是要知道,甚至验证也主要用于确定超参数,其中一些超参数可能是所训练数据的函数。例如,在过去的DNN验证中知道何时停止,因为过度调整可能会由于不断调整网络的参数(权重)而发生,因此我们需要一种知道何时停止的方法。没有验证集,您将在培训过程中盲目行走。另一方面,如果您使用与之前指定的完全相同的迭代次数,那么您将无法从这些额外的样本中获益。如上文所述,完全不应触摸测试集,因为没有测试集,您将无法评估模型。这是赌博,如果没有在真实数据分布(由测试数据表示)上评估其准确性,您将无法交付任何模型或解决方案。


我的意思是在训练数据之后,对验证数据进行超参数调整,然后选择模型作为测试数据,我是否可以对整个数据进行模型训练。或者,我可以在完成超参数调整后将训练数据和验证数据结合起来,并使用测试数据来估计准确性。道歉,写错了。现在已更正。
Apoorva Abhishekh
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.