整个数据是指培训+测试+验证
一旦我使用验证数据固定了我的超参数,并使用测试数据选择了模型,对整个数据进行模型训练就更好了,这样对参数进行训练就比对模型进行仅训练更好了。训练数据
整个数据是指培训+测试+验证
一旦我使用验证数据固定了我的超参数,并使用测试数据选择了模型,对整个数据进行模型训练就更好了,这样对参数进行训练就比对模型进行仅训练更好了。训练数据
Answers:
这个问题是基于错误的假设。许多人按照您说的做“做不到”。
实际上,在广泛部署的sklearn软件包中的网格搜索实现就可以做到这一点。除非refit=False
,否则它将使用整个数据重新训练最终模型。
我认为对于某些超参数可能不是很理想,因为它们与数据量有关。例如,考虑决策树的min_samples_leaf
预修剪策略。如果您有更多数据,则预修剪可能无法如您所愿。
但是同样,大多数人实际上在交叉验证后确实会使用整个数据进行再训练,从而最终获得最佳模型。
附录: @NeilSlater在下面说,有些人在简历之上执行保留。换句话说,他们进行了训练测试拆分,然后在训练中执行模型选择。据他介绍,他们使用原始的训练集拆分而不是测试集重新训练。然后,将测试集用于执行最终模型估算。我个人认为这有三个缺陷:(a)它不能解决我提到的一些问题,因为无论如何您都要重新训练,某些超参数取决于训练量;(b)在测试许多模型时,我更喜欢更复杂的模型嵌套交叉验证之类的方法,这样就不会浪费任何数据;(c)保留是一种糟糕的方法,可以推断出当数据很少时模型将如何泛化。
refit
GridSearchCV函数的选项。它不适合包含保留的测试数据(甚至看不到该数据)。
是的你可以。
由于测试数据应该来自类似的分布来训练数据,因此您不会破坏模型。如果您对模型进行了适当的训练,那么您将不会发现任何重大变化(除了以前的测试/验证数据上的更好的准确性指标)。
但是,罕见的是,测试数据与火车数据的分布完全相同,因此在实际应用案例中,您可能会获得更好的模型通用性。
该问题的答案取决于您使用的训练算法(技术)。例如,我看到了集成分类中的一些方法,这些方法最后将训练和验证(而不是测试)组合在一起。重要的是要知道,甚至验证也主要用于确定超参数,其中一些超参数可能是所训练数据的函数。例如,在过去的DNN验证中知道何时停止,因为过度调整可能会由于不断调整网络的参数(权重)而发生,因此我们需要一种知道何时停止的方法。没有验证集,您将在培训过程中盲目行走。另一方面,如果您使用与之前指定的完全相同的迭代次数,那么您将无法从这些额外的样本中获益。如上文所述,完全不应触摸测试集,因为没有测试集,您将无法评估模型。这是赌博,如果没有在真实数据分布(由测试数据表示)上评估其准确性,您将无法交付任何模型或解决方案。