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
。
我只是在波士顿数据集上尝试一个基本示例。负数 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
。