You need to enable JavaScript to run this app. XGBoost在波士顿数据集训练得到负R2,如何排查问题并修复?
优惠活动
大模型
产品
解决方案
定价
更多

XGBoost在波士顿数据集训练得到负R2,如何排查问题并修复?

问题原因定位
  • 正则化强度过高:你设置的alpha=10为L1正则项权重,该值对于波士顿房价数据集来说过大,会强制压缩树的叶子节点权重,导致模型几乎无法学习有效特征规律。从输出结果可以看到训练集真实标签均值为22.6,模型预测均值仅为14.6,预测值整体被大幅压低,直接导致效果不如直接输出均值的朴素策略,因此R2为负。
  • 迭代次数不足:n_estimators=10仅配置了10棵树,搭配0.1的学习率,模型还未拟合到基础的数据分布就停止训练,没有足够的迭代次数学习特征和标签的映射关系。
  • 次优参数影响:colsample_bytree=0.3限制每棵树仅能使用30%的特征,进一步降低了单轮迭代的拟合效率,放大了前两个问题的影响。
修复方案

按照以下优先级调整参数即可解决问题:

  1. 降低正则强度:将alpha调整到0~2的区间,也可先设置为0关闭L1正则,验证模型可正常拟合后再逐步调整正则参数控制过拟合。
  2. 提升迭代次数:将n_estimators调整到100500的常规区间,搭配0.050.1的学习率即可保证模型有足够的迭代次数拟合数据。
  3. 调整特征采样比例:将colsample_bytree调整到0.7~1的区间,提升单棵树的拟合能力。

调整后的参考代码如下:

xg_reg = xgb.XGBRegressor(
    objective ='reg:squarederror', 
    colsample_bytree=0.8, 
    learning_rate = 0.1,
    max_depth=5, 
    alpha=1, 
    n_estimators=200
)
xg_reg.fit(X_train,y_train)
y_train_hat = xg_reg.predict(X_train)
train_r2 = metrics.r2_score(y_true=y_train, y_pred=y_train_hat)
train_rmse = np.sqrt(mean_squared_error(y_train, y_train_hat))
print(train_r2, train_rmse, y_train.mean(), y_train_hat.mean())

调整后训练集R2可以达到和随机森林接近的水平,后续可通过交叉验证进一步调参优化样本外表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 05:18:02