在GridSearchCV中拟合应使用训练集还是测试集的X、y数据?
GridSearchCV 数据集传入规范
GridSearchCV.fit() 必须传入训练集的X和y,禁止传入测试集参与拟合流程。
核心原因
GridSearchCV的作用是通过内置的交叉验证逻辑完成超参数搜索,它会自动将你传入的数据集拆分为多组内部训练/验证子集,用验证子集的得分来评估不同超参数组合的效果,整个调参过程都不应该接触测试集,避免数据泄露。
你之前用错数据集后准确率异常,本质就是数据泄露导致的模型泛化能力完全失真:如果测试集参与了超参数搜索环节,相当于模型提前“见过”了本该用来做最终评估的未知数据,最终得到的参数要么是过拟合到测试集的,要么就是拆分逻辑冲突导致得分异常。
标准使用流程
- 第一步:提前将全量数据集拆分为互不重叠的训练集(
X_train,y_train)和测试集(X_test,y_test),测试集全程只用来做最终的模型效果评估,不参与任何训练、调参环节 - 第二步:初始化GridSearchCV实例,传入基模型、超参数搜索网格、交叉验证折数、评估指标等配置
- 第三步:调用
GridSearchCV.fit(X_train, y_train),仅用训练集完成超参数搜索 - 第四步:搜索结束后通过
GridSearchCV.best_estimator_拿到最优超参数的模型,再调用best_estimator_.score(X_test, y_test)得到模型的真实泛化得分
注:即便是使用嵌套交叉验证的场景,也是外层做数据集拆分、内层做GridSearch的交叉验证,测试集始终不会进入GridSearch的fit流程。
内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk
相关产品推荐
相关产品推荐

