Python GridsearchCV的预处理

Python GridsearchCV的预处理,python,scikit-learn,cross-validation,grid-search,gridsearchcv,Python,Scikit Learn,Cross Validation,Grid Search,Gridsearchcv,我正在使用GridsearchCV调优超参数,现在我想在培训和验证步骤中执行一个最小-最大规范化(StandardScaler())。但我想我不能这样做 问题是: 若我在整个训练集上应用预处理步骤,并将其发送到GridsearchCV进行do 10 foldCV。这会导致数据泄露,对吗?因为训练集将运行10次,这意味着训练9次,测试1次。规范化应该只应用于训练集而不是验证集,对吗 如果我使用sklearn的管道,它不会解决这个问题,对吗?因为它只运行一次,导致数据再次泄漏 是否有其他方法可以做到

我正在使用
GridsearchCV
调优超参数,现在我想在培训和验证步骤中执行一个最小-最大
规范化(StandardScaler())
。但我想我不能这样做

问题是:

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

  • 事实上,这将导致数据泄漏,很好,你抓住了它

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

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

    有关更多信息,请查看本文

    Ty以了解我的问题的答案。StandardScaler()是在每次折叠发生更改时执行还是仅在第一次(整个数据集)执行。是否有任何方法可以执行这些策略并防止数据泄漏?是的,鉴于我上面的代码,它将在每次折叠时重新运行scaler,如果您有refit=True,那么最终将在所有数据上运行scaler,并使用最佳超参数对模型运行。这应该可以解决数据泄漏问题。听起来不错。但你怎么知道它会重播每一次呢。我的意思是StandardScaler()应该运行2次1。用于训练集和2。对于验证集,这两个步骤应在10倍策略下运行10次。我说得对吗?会发生什么,对于每一次折叠,standardscaler将安装在训练部分,然后将使用训练中计算的统计数据转换测试部分。这里没有验证,对于每个折叠,它只有一个训练和测试部分。我在我的答案中添加了一篇文章,这应该会有所帮助。