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

XGBoost回归算法对不同输入实例输出相同预测结果问题排查

问题原因及修复方案

1. 核心错误:特征预处理逻辑不一致

你训练模型时传入的训练集特征X_train是原始数值,没有做对数变换,但预测自定义样本时,特意对输入特征做了np.log(X_data)处理,两者特征分布完全不匹配,模型无法识别输入特征,自然只能输出接近训练集标签均值的固定结果。

2. 次要错误:评估逻辑存在多处问题

  • 你注释了原始测试集的预测代码,后续计算MSE_test、R²时,用单样本的预测结果和整个测试集的真实值计算,结果完全没有参考价值
  • r2_score的参数顺序写反,sklearn要求传入顺序为r2_score(真实值, 预测值),你写反后得到的R²结果完全错误
  • 传入XGBoost的标签y_train_log是二维数组,XGBoost要求标签为一维数组,格式不匹配可能导致训练异常

其他排查方向

  • 先检查训练集的预测结果和MSE_train数值,如果训练集MSE很高,说明模型完全没有拟合成功:
    • 检查标签running_time是否存在零值/负数,导致np.log计算得到inf/nan,训练失效
    • 查看数据集标签分布,是否存在大量样本的running_time接近0.7,导致模型直接学习全局均值
    • 可以调整XGBoost的learning_rate参数,默认学习率过高或过低都可能导致拟合失败

修正后核心代码片段

# 训练部分修正:展平标签为一维数组
y_train_log = np.log(y_train).ravel()
y_test_log = np.log(y_test).ravel()

xgb_depth_conv = xgb.XGBRegressor(
    objective ='reg:squarederror',
    n_estimators = 1000,
    learning_rate = 0.01, # 新增学习率参数,可根据拟合效果调整
    seed = 123,
    tree_method = 'hist',
    max_depth=10
)
xgb_depth_conv.fit(X_train, y_train_log)

# 预测部分修正:特征和训练逻辑对齐,不额外做对数变换
X_data=[[8,576,3,2]] 
y_pred_test = xgb_depth_conv.predict(X_data)
print(np.exp(y_pred_test))

# 评估部分修正:使用测试集的预测结果计算指标,参数顺序对齐
y_pred_test_origin = xgb_depth_conv.predict(X_test)
MSE_test = mse(y_test_log, y_pred_test_origin)
MSE_train = mse(y_train_log, xgb_depth_conv.predict(X_train))
R_squared = r2_score(y_test_log, y_pred_test_origin)
print("MSE-Train = {}".format(MSE_train))
print("MSE-Test = {}".format(MSE_test))
print("R-Squared: ", np.round(R_squared, 2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:24:05