gpt4 book ai didi

python - lightgbm 中的 f1_score 指标

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:29 51 4
gpt4 key购买 nike

我想用自定义指标训练 lgb 模型:f1_scoreweighted 平均值。

我通过 here 浏览了 lightgbm 的高级示例并找到了自定义二进制错误函数的实现。我实现了类似的函数来返回 f1_score,如下所示。

def f1_metric(preds, train_data):

labels = train_data.get_label()

return 'f1', f1_score(labels, preds, average='weighted'), True

我尝试通过将 feval 参数作为 f1_metric 传递来训练模型,如下所示。

evals_results = {}

bst = lgb.train(params,
dtrain,
valid_sets= [dvalid],
valid_names=['valid'],
evals_result=evals_results,
num_boost_round=num_boost_round,
early_stopping_rounds=early_stopping_rounds,
verbose_eval=25,
feval=f1_metric)

然后我得到 ValueError: Found input variables with inconsistent numbers of samples:

训练集被传递给函数而不是验证集。

如何配置才能通过验证集并返回 f1_score?

最佳答案

文档有点困惑。在描述您传递给 feval 的函数的签名时,他们将其参数称为 predstrain_data,这有点误导。

但以下似乎有效:

from sklearn.metrics import f1_score

def lgb_f1_score(y_hat, data):
y_true = data.get_label()
y_hat = np.round(y_hat) # scikits f1 doesn't like probabilities
return 'f1', f1_score(y_true, y_hat), True

evals_result = {}

clf = lgb.train(param, train_data, valid_sets=[val_data, train_data], valid_names=['val', 'train'], feval=lgb_f1_score, evals_result=evals_result)

lgb.plot_metric(evals_result, metric='f1')

要使用多个自定义指标,请像上面一样定义一个总体自定义指标函数,您可以在其中计算所有指标并返回一个元组列表。

编辑:固定代码,当然 F1 越大越好,应该设置为 True。

关于python - lightgbm 中的 f1_score 指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50931168/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com