GridSearchCV场景下测试集预处理逻辑及数据泄露问题咨询
GridSearchCV预处理逻辑与测试集变换规则
整个流程分为两个独立阶段,不存在数据泄露风险,具体逻辑如下:
1. K折交叉验证调参阶段
- 你拆分出的
X_test测试集在这个阶段完全不会被触及,GridSearchCV仅处理你传入fit方法的X_other、y_other(即占总数据80%的非测试集) - 对每一组超参数组合,以及K折拆分出的每一组训练子集/验证子集:
- 仅用当前折的训练子集拟合Pipeline中的
preprocessor预处理器 - 用拟合好的预处理器分别变换当前折的训练子集和验证子集,再送入模型训练、计算验证得分
- 仅用当前折的训练子集拟合Pipeline中的
- 所有折的验证得分取均值后,选出表现最优的超参数组合。
2. 最优模型全量拟合阶段
- 确定最优超参数组合后,GridSearchCV会用全部
X_other非测试集数据,从头拟合完整Pipeline(包括预处理器和模型) - 这个阶段拟合预处理器的数据源依然是100%的非测试集数据,没有用到任何
X_test的信息,完全符合避免数据泄露的要求。
注:上述逻辑基于GridSearchCV默认开启的
refit=True参数,如果你手动设置refit=False则不会自动完成全量拟合,也无法直接调用grid.predict方法,你给出的代码使用默认配置,符合上述流程。
3. 测试集变换逻辑
你调用grid.predict(X_test)的时候,会直接使用上面第二阶段拟合好的预处理器对X_test做变换,再送入最优模型得到预测结果,整个过程没有泄露测试集信息。
内容的提问来源于stack exchange,提问作者royal grasshopper
相关产品推荐
相关产品推荐

