GridsearchCV 预处理

Preprocessing on GridsearchCV

我正在使用 GridsearchCV 来调整超参数,现在我想在训练和验证中做一个最小-最大 Normalization(StandardScaler()) step.But 我想我不能这样做。

问题是:

  1. 如果我对整个训练集应用预处理步骤并将其发送到 GridsearchCV 进行 10 foldCV。这会导致我数据泄露吗?因为训练集将 运行 10 折,这意味着训练有 9 折,测试折有 1 折。规范化应该只适用于训练集而不适用于验证集吗?
  2. 如果我使用 sklearn 的 Pipeline,它不会解决这个问题吧?因为只跑了一次又导致我数据泄露
  3. 是否有其他方法可以做到这一点并且仍然使用 GridsearchCV 来调整参数

确实这会导致数据泄露,你抓住它真是太好了!

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

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

有关详细信息,请查看这篇文章here