我正在使用hyperopt为随机森林寻找最佳的超参数。
我的目标是获得返回best f1-score的参数,因为数据集是不平衡的。
因此,我根据在线教程定义了以下目标函数
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来表示损失呢?
发布于 2022-02-08 08:01:31
fmin函数是对不同的算法集及其超参数进行迭代,从而使目标函数最小化的优化函数。在Hyperopt中,我们试图找到使损失最小化的参数。因此,如果您的评估指标需要最大化的类似准确性,F1评分我们改变符号,使最小化等于最大化的评估指标。
因此,假设你使用f1-得分,你需要最大限度地通过否定,这样最小化它就会使它最大化。
F1 Score = 0.89 Loss = -0.89
F1 Score = 0.91 Loss = -0.91此外,如果您有像RMSE,MAE这样的指标需要最小化,您不需要翻转它。
https://datascience.stackexchange.com/questions/107960
复制相似问题