我正在将LightGBM用于二进制分类项目。我使用内置的“ logloss”作为损失函数。但是,当它产生最高Precision_Recall AUC值时,我想使用early_stopping停止迭代。因此,我实现了以下自定义eval函数:
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
此自定义eval函数效果很好,并且我进行了如下更新:
但是,迭代在最低logloss值处停止,但在最高pr_auc值处停止。有什么方法可以禁用logloss评估而仅评估pr_auc?
对于不平衡的数据集,可能无法以最低的对数损失获得最高的pr_auc值。因此,我想在达到最高pr_auc时停止迭代。
答案 0 :(得分:1)
使用LGB Python API,您必须在参数字典中设置custom
度量标准选项:
params = {
......
'objective': 'binary',
'metric': 'custom',
......
}
gbm = lgb.train(params,
lgb_train,
feval=f_pr_auc,
valid_sets=lgb_eval)