当使用sklearn的cross_val_scorescoring='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/

10-12 19:49