LightGBM通过自定义评估功能和内置丢失功能提前停止

时间:2020-04-28 23:16:57

标签: lightgbm

我正在将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函数效果很好,并且我进行了如下更新:

enter image description here

但是,迭代在最低logloss值处停止,但在最高pr_auc值处停止。有什么方法可以禁用logloss评估而仅评估pr_auc?

对于不平衡的数据集,可能无法以最低的对数损失获得最高的pr_auc值。因此,我想在达到最高pr_auc时停止迭代。

1 个答案:

答案 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)