GridsearchCV上的预处理

时间:2019-04-15 15:15:09

标签: python scikit-learn cross-validation grid-search gridsearchcv

我正在使用GridsearchCV来调整超参数,现在我想在训练和验证步骤中进行最小最大值Normalization(StandardScaler())。但是我想我不能这样做。

问题是:

  1. 如果我在整个训练集上应用预处理步骤,然后将其发送到GridsearchCV以进行10折CV。这会导致我泄漏数据,对吗?因为训练集将运行10折,这意味着训练9折,测试折叠1折。归一化应该仅适用于训练集而不适用于验证集吗?
  2. 如果我使用sklearn的Pipeline,将无法解决此问题,对吗?因为它只运行一次并导致我再次发生数据泄漏。
  3. 还有其他方法可以执行此操作,并且仍然使用GridsearchCV来调整参数

1 个答案:

答案 0 :(得分:0)

实际上,这会导致数据泄漏,很好地抓住了它!

使用管道解决此问题的一种方法是,以StandardScaler作为管道中的第一个操作,然后再选择您的分类器,最后将该管道传递给GridSearchCV,以建立管道

clf = make_pipeline(StandardScaler(), 
                    MyClassifier())
grid_search = GridSearchCV(clf, refit=True)

有关更多信息,请查看这篇文章here