4

我正在使用GridsearchCV调整超参数,现在我想Normalization(StandardScaler())在训练和验证步骤中做一个 min-max。但我认为我不能这样做。

问题是 :

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

1 回答 1

2

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

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

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

有关更多信息,请在此处查看这篇文章

于 2019-04-15T15:24:49.820 回答