【发布时间】:2019-12-05 12:07:49
【问题描述】:
当使用 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' 值是正的呢?
【问题讨论】:
标签: python machine-learning scikit-learn data-science