使用GridSearchCV时是否需要拆分数据?

Küb*_*tlu 4 python machine-learning scikit-learn grid-search

Gridsearhcv使用StratifiedKFold或KFold.所以我的问题是,在使用gridsearch之前,我应该将数据拆分为训练和测试,然后只对测试数据进行拟合吗?我不确定是否有必要因为cv方法已经拆分了数据,但我已经看到了一些事先拆分数据的例子.

谢谢.

Mak*_*ich 10

GridSearchCV将获取您提供的数据,将其拆分为Train和CV集,并使用CV集搜索最佳超参数的训练算法.如果需要,您可以指定不同的拆分策略(例如拆分比例).

但是,当您执行关于数据集的超参数调整信息仍会"泄漏"到算法中时.

因此,我建议采取以下方法:

1)获取原始数据集并将一些数据作为测试集(例如,10%)

2)对剩余的90%使用网格搜索.这里将通过算法为您完成拆分.

3)在获得最佳超参数后,在#1的测试集上对其进行测试,以获得对新数据所期望的性能的最终估计.

  • @fjsj 这是一个有效的点,但在网格搜索过程中,关于数据集的一些信息,您在这些信息上执行网格搜索会泄漏到超参数中。为了在新数据上获得最终的、无偏见的性能,您需要保留一个拟合分类器从未见过的数据集样本——无论是直接的还是间接的。如果您要对时间序列数据进行预测,则尤其重要 - 最好先搜索,例如,1 月至 11 月的数据,然后对 12 月的数据进行最终测试,以获得对性能的真实估计 (3认同)
  • 对整个训练数据集进行 GridSearchCV 不是更好,因为它已经进行了 CV,并且一旦搜索完成,就使用找到的分类器来拟合和预测训练-测试数据拆分? (2认同)
  • @JackFleeting 不确定问题的性质。我的意思是,如果你把 fit 作为 GS 的一部分,你会使用你使用的数据子集找到最好的超参数(或者如果你对很多子集进行 Kfold 以获得最佳超参数的估计)。第二次调用 fit 时,您将涵盖完整的训练数据集 (2认同)