【问题标题】:How can I use R^2 as an evaluation metric when modeling?建模时如何使用 R^2 作为评估指标?
【发布时间】:2019-01-25 00:42:40
【问题描述】:

我正在使用 Python 在 25 个特征列数据集上训练 XGBoost 回归器,并使用 SKlearn 的 GridSearchCV 进行参数调整。 GridSearchCV 允许您使用 'scoring' 参数选择得分手,r2 是一个有效选项。

grid = GridSearchCV(mdl, param_grid=params, verbose=1, cv=kfold,
                n_jobs=-1, error_score='raise',scoring='r2')`

但是,当我希望在grid.fit() 函数中使用r2 作为我的“eval_metric”时,我没有很好的方法来使用r2

grid.fit(X_train, y_train, eval_set=[(X_test, y_test)],
         eval_metric='rmse', early_stopping_rounds=150)

我曾尝试使用 sklearns 内置的r2_score 方法,但存在一些问题。第一个是,r2 score 是根据y_test 集合与y_pred 集合计算的。为了设置y_pred,我们需要拟合模型。所以你可以看到我遇到了循环问题。

我已经尝试了一些方法来解决这个问题。首先是训练模型并在 eval_metric 变量中进行预测,如下所示:

grid.fit(X_train, y_train, eval_set=[(X_test, y_test)],
         eval_metric=r2_score(y_test, mdl.predict(X_test)), early_stopping_rounds=150)

但我收到以下错误: xgboost.core.XGBoostError: need to call fit beforehand

这是有道理的。

有什么方法可以获取 GridSearchCV 正在使用的当前参数,创建和存储预测,然后使用 r2_score 作为 eval_metric?

我的想法是这样的。 r2 分数是 0 到 1 范围内的标准评估指标(1 表示完美拟合)。这是一个指标,如果有一种方法可以对其进行标准化优化,它将在几乎所有机器学习中产生非常深远的影响。

【问题讨论】:

  • 有几个我不清楚的问题:1) 任何评估指标都是基于y_testy_pred 的比较。所以我不明白为什么这是一个表演者。 2) 可调用的签名特定于 xgboost,请参阅此处的 eval_metric 文档:xgboost.readthedocs.io/en/latest/python/…。 3)你为什么要首先拥有eval_metric?它用于优化,仅用于监控迭代和提前停止之间的性能。
  • 正如@MykhailoLisovyi 所说,您没有正确使用参数。您不需要传递 metric 中的值,只需传递可调用的值,并且值将在适当的时间自动传递给它们(在拟合模型并在迭代中获得预测之后)。

标签: python scikit-learn xgboost evaluation grid-search


【解决方案1】:

据我了解,您正在寻找一种在使用 XGBoost 建模时获得r2 分数的方法。以下代码将为您提供r2 分数作为输出,

xg = xgb.XGBRegressor()
best_xgb = GridSearchCV(
    xg, param_grid=params, cv=10, verbose=0, n_jobs=-1)

scores = cross_val_score(best_xgb, X, y, scoring='r2', cv=kfold) 

您可以参考Scikit-learn documentation 了解有关cross_val_score 功能的更多详细信息。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2022-12-20
    • 2020-03-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2016-10-03
    • 2020-10-29
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多