我在一个二分类项目中使用 LightGBM。我使用内置的 ‘logloss’ 作为损失函数。然而,我希望在获得最高的 Precision_Recall AUC 值时使用提前停止机制来停止迭代。因此,我实现了以下自定义评估函数:
def f_pr_auc(probas_pred, y_true):
labels=y_true.get_label()
p, r, _ = precision_recall_curve(labels, probas_pred)
score=auc(r,p)
return "pr_auc", score, True
这个自定义评估函数运行良好,并且我得到了如下的更新:
然而,迭代在 logloss 值最低时停止,而不是在 pr_auc 值最高时停止。有什么方法可以禁用 logloss 评估,只评估 pr_auc 吗?
对于不平衡数据集,最高的 pr_auc 值可能不会在最低的 logloss 处实现。因此,我希望在达到最高的 pr_auc 时停止迭代。
回答:
使用 LGB Python API,你需要在参数字典中设置 custom
度量选项:
params = {
......
'objective': 'binary',
'metric': 'custom',
......
}
gbm = lgb.train(params,
lgb_train,
feval=f_pr_auc,
valid_sets=lgb_eval)