You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无网格搜索时,如何在k折交叉验证训练后获取最优模型?

不使用网格搜索时,k折交叉验证后获取最优模型并预测的方法

首先要明确,cross_val_score仅返回各折的评估分数,不会保存每一轮训练出的模型。要得到可用于测试集预测的最优模型,有两种实用方案:

方案1:通过cross_validate保存并筛选最优折的模型

  • 使用cross_validate函数并设置return_estimator=True,可以同时获取每一轮交叉验证训练出的模型和对应分数
  • 从结果中筛选出分数最高的模型,直接用于测试集预测

代码示例:

from sklearn.model_selection import cross_validate
import xgboost as xgb

# 初始化带最优参数的模型
model = xgb.XGBClassifier(**best_params)

# 执行交叉验证,返回模型和分数
cv_results = cross_validate(model, X_train, Y_train, cv=5, scoring='f1', return_estimator=True)

# 获取各折的分数与模型
cv_scores = cv_results['test_score']
trained_models = cv_results['estimator']

# 选出分数最高的模型
best_model = trained_models[cv_scores.argmax()]

# 预测测试集
Y_pred = best_model.predict(X_test)

方案2:在完整训练集上重新训练模型

  • 交叉验证的核心作用是验证best_params的泛化能力,既然参数已经通过验证,直接用全部训练数据训练模型,得到的模型性能通常更优(训练数据量更大)
  • 这种方法操作简单,是工业界的常规做法

代码示例:

import xgboost as xgb

# 初始化带最优参数的模型
model = xgb.XGBClassifier(**best_params)

# 用全部训练数据训练模型
model.fit(X_train, Y_train)

# 预测测试集
Y_pred = model.predict(X_test)

两种方案的区别

  • 方案1无需重新训练,但模型基于训练集的子集训练,数据量有限
  • 方案2的模型用了完整训练数据,泛化能力更强,更推荐作为首选

内容的提问来源于stack exchange,提问作者Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:42:42