首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要用符号翻转来表示超选择中的失败?

为什么要用符号翻转来表示超选择中的失败?
EN

Data Science用户
提问于 2022-02-08 07:41:49
回答 1查看 187关注 0票数 0

我正在使用hyperopt为随机森林寻找最佳的超参数。

我的目标是获得返回best f1-score的参数,因为数据集是不平衡的。

因此,我根据在线教程定义了以下目标函数

代码语言:javascript
复制
space = {
    "n_estimators": hp.choice("n_estimators", [100, 200, 300, 400,500,600]),
    "max_depth": hp.quniform("max_depth", 1, 15,1),
    "criterion": hp.choice("criterion", ["gini", "entropy"]),
    "max_features": hp.quniform("max_features", 1, 14,1)
}

def hyperparameter_tuning(params):
    clf = RandomForestClassifier(**params,n_jobs=-1)
    f1score = cross_val_score(clf, ord_train_t, y_train,scoring="f1").mean()
    return {"loss": -f1score, "status": STATUS_OK}

我做得对吗?

如果我从loss语句中删除return关键字,它会抛出key error

为什么会这样呢?我只想将key命名为f1score,但它造成了错误。

一旦我把它改回loss,它就开始正常工作了。

我得到如下输出

88%████████████████████████████████████████▍88/100 [29:42<03:25,17.14s/三最佳损失:-0.8615863383404218

这是否意味着我的模型返回一个86%的F1分数?

损失不应该是100-86 = 14吗?

顺便问一下,为什么我们要用sign-flip f1score来表示损失呢?

EN

回答 1

Data Science用户

回答已采纳

发布于 2022-02-08 08:01:31

fmin函数是对不同的算法集及其超参数进行迭代,从而使目标函数最小化的优化函数。在Hyperopt中,我们试图找到使损失最小化的参数。因此,如果您的评估指标需要最大化的类似准确性,F1评分我们改变符号,使最小化等于最大化的评估指标。

因此,假设你使用f1-得分,你需要最大限度地通过否定,这样最小化它就会使它最大化。

代码语言:javascript
复制
F1 Score = 0.89  Loss = -0.89

F1 Score = 0.91  Loss = -0.91

否定确保您的超参数(最大F1评分为0.91 )被选择,尽管Hyperopt将其最小化。

此外,如果您有像RMSE,MAE这样的指标需要最小化,您不需要翻转它。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/107960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档