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

XGBRegressor用GridSearchCV调参触发FitFailedWarning如何解决

报错根因
  • 核心问题:参数网格中学习率的键名多了一个多余的尾部空格,你写成了'eta ',XGBRegressor没有这个带空格的参数,无法识别传入的未知参数,直接触发拟合失败,你修改参数网格结构后仍报错就是因为这个空格没有删除。
  • 次要兼容问题:如果你的真实训练集和提供的样例一样只有极少样本(样例仅5条),GridSearchCV设置了cv=5,会导致每折训练集仅4条数据,当max_depth设置为8、10这类较大值时,树深度超过训练样本可支持的分裂上限,也会触发拟合异常。
  • 补充说明:你最初将参数网格写为两个独立字典的写法,逻辑是先单独搜索eta参数、再单独搜索max_depth参数,本身不会触发报错,只是和你想同时搜索两个参数所有组合的预期不符,不是本次报错的原因。
解决方案
  1. 首先删除参数名后的多余空格,可直接写'eta'(适配xgboost原生参数规范),也可写'learning_rate'(对齐sklearn接口规范),二者作用完全一致。
  2. 如果你的真实训练集样本量小于10,建议将交叉验证折数调低,比如改为cv=3,避免每折训练样本量过少的问题。
  3. 若需要同时搜索eta和max_depth的所有参数组合,保留单个字典的param_grid写法即可。

修正后可运行代码

from sklearn.model_selection import GridSearchCV
from xgboost import XGBRegressor
import pandas as pd

# 修正后的参数网格,去掉eta后的多余空格
param_grid = {
    'eta': [0.01, 0.05, 0.1, 0.2],
    'max_depth': [4, 6, 8, 10]
}

xgb_model = XGBRegressor(random_state = 0)
# 小数据集场景下调低cv为3,数据集样本量充足可保留cv=5
grid_search = GridSearchCV(xgb_model, param_grid, cv=3,
                           scoring='neg_root_mean_squared_error',
                           return_train_score=True)

# 替换为你的真实y_train即可运行
grid_search.fit(final_OH_X_train_scaled, y_train)

# 查看最优结果
print("最优参数:", grid_search.best_params_)
print("最优交叉验证RMSE:", -grid_search.best_score_)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:21:04