当使用sklearn的cross_val_score
和scoring='neg_mean_squared_error'
调整AdaBoostRegressor时,它将返回一个正数。我所有其他算法(线性回归,svr,randomforestregressor等)均返回负数。然后,我使用np.mean(np.sqrt(-cross_val_score))
计算RMSE得分的平均值。
这是代码:
# AdaBoost Reg CV
start_time = time.time() # Timing
# Metrics
ada_reg_cv = AdaBoostRegressor(DecisionTreeRegressor(random_state=42),
n_estimators=200,
loss='linear', random_state=42)
ada_reg_cv_scores = cross_val_score(ada_reg_cv, X_train_trees, y_train,
scoring='neg_mean_squared_error',
cv=5)
ada_reg_cv_scores = np.sqrt(-ada_reg_cv_scores)
print('CV RMSE:', ada_reg_cv_scores.mean())
print('CV Std:', ada_reg_cv_scores.std())
# Timing
ada_reg_cv_time = (time.time() - start_time)
print('\nRunning Time: {}'.format(datetime.timedelta(seconds=ada_reg_cv_time)))
输出实际上是非常高的RMSE(太高而无法精确测量)。我分别运行这些行,发现第11行
ada_reg_cv_scores = np.sqrt(-ada_reg_cv_scores)
返回nan,因为它取负数的根。然后,当我在sqrt中没有(-)符号运行它时,我得到了正确的RMSE。那么,“ neg_mean_squared_error”值为何为正?
最佳答案
一旦在AdaBoostRegressor(max_depth=5
)中调整了DecisionTreeRegressor,neg_mean_squared_error就应返回负值。因此,我猜测该错误与决策树的不规则程度有关,因为树模型的错误很可能为0。
关于python - 为什么我的neg_mean_squared_error是AdaBoostRegressor的正数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57232012/