使用 GridSearchCV 时需要拆分数据吗? [关闭]
Posted
技术标签:
【中文标题】使用 GridSearchCV 时需要拆分数据吗? [关闭]【英文标题】:Do I need to split data when using GridSearchCV? [closed] 【发布时间】:2018-01-05 18:21:36 【问题描述】:Gridsearhcv 使用 StratifiedKFold 或 KFold。所以我的问题是,我应该在使用gridsearch之前将我的数据分成训练和测试,然后只对测试数据进行拟合吗?我不确定是否有必要,因为 cv 方法已经拆分了数据,但我已经看到了一些预先拆分数据的示例。
谢谢。
【问题讨论】:
【参考方案1】:GridSearchCV 将获取您提供的数据,将其拆分为训练集和 CV 集,并训练算法使用 CV 集搜索最佳超参数。您可以根据需要指定不同的拆分策略(例如拆分比例)。
但是当您执行超参数调整时,有关数据集的信息仍然“泄漏”到算法中。
因此我建议采取以下方法:
1) 获取您的原始数据集并保留一些数据作为测试集(例如 10%)
2) 对剩余的 90% 使用网格搜索。拆分将由这里的算法为您完成。
3) 获得最佳超参数后,在 #1 的测试集上对其进行测试,以获得对新数据的预期性能的最终估计。
【讨论】:
对整个训练数据集进行 GridSearchCV 会不会更好,因为它已经进行了 CV,一旦搜索完成,使用找到的分类器来拟合和预测训练-测试数据拆分? @fjsj 这是一个有效的点,但在网格搜索过程中,关于数据集的一些信息仍然存在,在这些信息上执行网格搜索会泄漏到超参数中。为了在新数据上获得最终的、公正的性能,您需要保留一个数据集样本,该样本从未被拟合分类器直接或间接地看到过。如果您要对时间序列数据进行预测,这一点尤其重要——最好先搜索 1 月 - 11 月的数据,然后对 12 月的数据进行最终测试,以获得对性能的真实估计 @MaksimKhaitovich - 在某些地方,我看到您的答案有所不同:人们从 gs 获取best_params
并使用它们在整个数据集(包括测试部分)上调用 fit()
,在致电predict()
之前;基本上,调用fit()
两次- 一次作为gs 的一部分,再次在gs 之外。你觉得这有意义吗?
@JackFleeting 不确定问题的性质。我的意思是,如果您将 fit 称为 GS 的一部分,您会使用您使用的数据子集找到最佳超参数(或者如果您对很多子集进行 Kfold 以获得最佳超参数的估计)。第二次调用 fit 时,您涵盖了完整的训练数据集以上是关于使用 GridSearchCV 时需要拆分数据吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用 GridSearchCV 和 cross_val_score?
将 GridSearchCV 与 TimeSeriesSplit 一起使用