【问题标题】:Why is my neg_mean_squared_error a positive number for AdaBoostRegressor?为什么我的 neg_mean_squared_error 是 AdaBoostRegressor 的正数?
【发布时间】:2019-12-05 12:07:49
【问题描述】:

当使用 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' 值是正的呢?

【问题讨论】:

    标签: python machine-learning scikit-learn data-science


    【解决方案1】:

    一旦我在 AdaBoostRegressor (max_depth=5) 中调整了 DecisionTreeRegressor,neg_mean_squared_error 就会返回负数,这是应该的。所以我猜这个错误与决策树的不规则程度有关,因为树模型的错误可能是 0。

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 2021-11-09
      • 1970-01-01
      • 2020-06-16
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多