带有自定义评估函数和内置损失函数的 LightGBM 提前停止
LightGBM early stopping with custom eval function and built-in loss function
我正在使用 LightGBM 进行二元分类项目。我使用内置的 'logloss' 作为损失函数。但是,我想使用 early_stopping 在产生最高 Precision_Recall AUC 值时停止迭代。所以我实现了以下自定义 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
这个自定义评估函数运行良好,我有如下更新:
但是,迭代在最低对数损失值处停止,但没有在最高 pr_auc 值处停止。有没有一种方法可以禁用 logloss 评估并仅评估 pr_auc?
对于不平衡数据集,最高 pr_auc 值可能无法在最低对数损失下实现。所以我想在达到最高 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)
我正在使用 LightGBM 进行二元分类项目。我使用内置的 'logloss' 作为损失函数。但是,我想使用 early_stopping 在产生最高 Precision_Recall AUC 值时停止迭代。所以我实现了以下自定义 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
这个自定义评估函数运行良好,我有如下更新:
但是,迭代在最低对数损失值处停止,但没有在最高 pr_auc 值处停止。有没有一种方法可以禁用 logloss 评估并仅评估 pr_auc?
对于不平衡数据集,最高 pr_auc 值可能无法在最低对数损失下实现。所以我想在达到最高 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)