测试集和交叉验证集具有不同的用途。如果您放弃其中任何一个,则会失去其优势:
您不能使用交叉验证集来准确地测量模型的性能,因为您将故意调整结果,以获取可能超过数百种参数变化的最佳度量。因此,交叉验证结果可能过于乐观。
出于同样的原因,您不能删除交叉验证集,也不能使用测试集来选择超级参数,因为那样就可以保证您高估了模型的质量。在理想情况下,您只需使用测试集一次,或者以“中立”方式使用它来比较不同的实验。
如果您进行交叉验证,找到最佳模型,然后添加测试数据进行训练,则有可能(在某些情况下很有可能)改进模型。但是,您无法确定是否确实发生了这种情况,即使发生了这种情况,也无法对新性能有任何公正的估计。
从目睹许多Kaggle比赛开始,我的经验是,过度使用它来调整测试集是一件实事,并且在很大程度上影响着这些比赛。通常会有一群竞争者爬上公共排行榜,并选择了他们的最佳测试模型(公共排行榜实际上是一个测试集),同时他们的交叉验证还不够彻底。。。当最后引入新的测试集时,这些竞争者将跌倒排行榜。
一种合理的方法是在测试之前重新使用(训练+ cv)数据使用发现的超参数重新训练。这样一来,您就可以训练更多的数据,并且最终仍然可以独立地衡量性能。
如果您想从交叉验证中获得更多收益,通常的方法是k-fold交叉验证。Kaggle竞赛中的一个常见技巧是使用k倍交叉验证,而不是将数据重新组合到更大的(训练+ cv)训练集中,以将cv结果集成或堆叠到元模型中。
最后,请始终检查用于验证和测试的拆分是否可靠,以防止数据集中可能存在的相关性。