如何使用F1分数作为XGBoost验证的评估指标?

发布于 2025-01-13 08:17:48 字数 1103 浏览 0 评论 0原文

我正在尝试使用 GridSearchCV 和 XGBoost 验证模型。我希望我的评估指标是 F1 分数。我见过很多人使用 scoring='f1'eval_metric=f1_score 以及其他变体。我对几点感到困惑。为什么有些人使用 scoring= 而另一些人使用 eval_metric=

XGBoost 文档中,没有 F1 分数评估指标(这看起来很奇怪,顺便说一句,考虑到他们确实拥有的其他一些)。但我在网上看到很多建议“只需使用 XGBoost 的内置 F1 分数评估器”。在哪里??

无论我在这里放置什么,我的代码都会在 eval_metric 行上引发错误。

这是我的代码:

params = {
    'max_depth': range(2,10,2),
    'learning_rate': np.linspace(.1, .6, 6),
    'min_child_weight': range(1,10,2),
}

grid = GridSearchCV(
    estimator = XGBClassifier(n_jobs=-1,
                              n_estimators=500,
                              random_state=0),
    param_grid = params,
)

eval_set = [(X_tr, y_tr),
            (X_val, y_val)]

grid.fit(X_tr, y_tr,
         eval_set=eval_set,
         eval_metric='f1',  # <------What do I put here to make this evaluate based on f1 score???
         early_stopping_rounds=25,
)                  

谢谢!

I'm trying to validate a model using GridSearchCV and XGBoost. I want my evaluation metric to be F1 score. I've seen many people use scoring='f1' and eval_metric=f1_score and other variations. I'm confused on a couple of points. Why are some people using scoring= and others using eval_metric=?

In the XGBoost documentation, there's no F1 score evaluation metric (which seems strange, btw, considering some of the others they do have). But I see lots of advice online to "just use XGBoost's built-in F1 score evaluator." Where??

No matter what I put here, my code throws an error on the eval_metric line.

Here is my code:

params = {
    'max_depth': range(2,10,2),
    'learning_rate': np.linspace(.1, .6, 6),
    'min_child_weight': range(1,10,2),
}

grid = GridSearchCV(
    estimator = XGBClassifier(n_jobs=-1,
                              n_estimators=500,
                              random_state=0),
    param_grid = params,
)

eval_set = [(X_tr, y_tr),
            (X_val, y_val)]

grid.fit(X_tr, y_tr,
         eval_set=eval_set,
         eval_metric='f1',  # <------What do I put here to make this evaluate based on f1 score???
         early_stopping_rounds=25,
)                  

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

各空 2025-01-20 08:17:48

你可以用这个来实现它:

from sklearn.model_selection import cross_val_score
result = cross_val_score(
    estimator = your_xgboost_model,
    X = X_dataframe, 
    y = Y_dataframe, 
    scoring = 'f1',
    cv = 10
)

you can achieve it with this:

from sklearn.model_selection import cross_val_score
result = cross_val_score(
    estimator = your_xgboost_model,
    X = X_dataframe, 
    y = Y_dataframe, 
    scoring = 'f1',
    cv = 10
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文