xgboost 给出负 R2

xgboost gives negative R2

我只是在波士顿数据集上尝试一个基本示例。负数 R2 表示它的表现比只返回平均值还差,我想知道我是否做错了什么,或者它在样本中表现如何如此糟糕?我该如何解决这个问题?

xg_reg = xgb.XGBRegressor(objective ='reg:squarederror', colsample_bytree=0.3, learning_rate = 0.1,
                max_depth=5, alpha=10, n_estimators=10)
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())

-0.11469938481461228 10.091020035258527 22.59630606860158 14.59753

例如,使用随机森林,我能够得到 R2=94% 的样本和 76% 的样本外,所以我知道我在使用 xgboost 时做错了。

您将 n_estimators 的值取为 10,这非常小。默认值为 100。

xgboost 的默认设置非常强大,足以为您提供最佳结果。您不需要手动 select 参数。就这样

 xgb.XGBRegressor()

选择参数的更好方法是通过 hyperparameter tuning,您可以使用网格搜索来完成。

超参数调整后,我发现 n_estimator = 1000 的最佳值是 max_depth = 4