GridsearchCV 预处理
Preprocessing on GridsearchCV
我正在使用 GridsearchCV
来调整超参数,现在我想在训练和验证中做一个最小-最大 Normalization(StandardScaler())
step.But 我想我不能这样做。
问题是:
- 如果我对整个训练集应用预处理步骤并将其发送到 GridsearchCV 进行 10 foldCV。这会导致我数据泄露吗?因为训练集将 运行 10 折,这意味着训练有 9 折,测试折有 1 折。规范化应该只适用于训练集而不适用于验证集吗?
- 如果我使用 sklearn 的 Pipeline,它不会解决这个问题吧?因为只跑了一次又导致我数据泄露
- 是否有其他方法可以做到这一点并且仍然使用
GridsearchCV
来调整参数
确实这会导致数据泄露,你抓住它真是太好了!
使用管道解决此问题的方法是创建一个管道,其中 StandardScaler 作为管道中的第一个操作,然后是您选择的分类器,并最终将此管道传递给 GridSearchCV
clf = make_pipeline(StandardScaler(),
MyClassifier())
grid_search = GridSearchCV(clf, refit=True)
有关详细信息,请查看这篇文章here
我正在使用 GridsearchCV
来调整超参数,现在我想在训练和验证中做一个最小-最大 Normalization(StandardScaler())
step.But 我想我不能这样做。
问题是:
- 如果我对整个训练集应用预处理步骤并将其发送到 GridsearchCV 进行 10 foldCV。这会导致我数据泄露吗?因为训练集将 运行 10 折,这意味着训练有 9 折,测试折有 1 折。规范化应该只适用于训练集而不适用于验证集吗?
- 如果我使用 sklearn 的 Pipeline,它不会解决这个问题吧?因为只跑了一次又导致我数据泄露
- 是否有其他方法可以做到这一点并且仍然使用
GridsearchCV
来调整参数
确实这会导致数据泄露,你抓住它真是太好了!
使用管道解决此问题的方法是创建一个管道,其中 StandardScaler 作为管道中的第一个操作,然后是您选择的分类器,并最终将此管道传递给 GridSearchCV
clf = make_pipeline(StandardScaler(),
MyClassifier())
grid_search = GridSearchCV(clf, refit=True)
有关详细信息,请查看这篇文章here