XGBoost 变化损失函数

数据挖掘 xgboost 损失函数 成本函数
2022-01-23 09:44:38

我正在使用 XGBoost(通过 sklearn API)并且我正在尝试进行二进制分类。

False Positives对我来说比False Negatives更糟糕,我该如何考虑这一点?

API 让我有点困惑,我发现了两个可能与此相关的论点:

objective&eval_metric

哪一个?以及如何使用它?

2个回答

在预测错误的后果不等价的情况下,您通常仍然有兴趣训练模型以根据数据集进行准确预测,并且不会更改监督学习中的目标函数。

通常,当 FP 和 FN 的后果不同时,您会:

  • 使用模型给出的预测的置信度。在 XGBoost 中,即objective: "binary:logistic"

  • 使用ROC 下的面积作为确定最佳调整模型的基本指标(这是eval_metric: "auc"用于 XGBoost)。该指标衡量您的类排序的好坏 - 值越高,稍后调整置信水平就越容易和更有效。

  • 确定成本 FP 和 FN 的权重 - 这完全取决于您,您说 FP 比 FN 差,但为了做出最佳决策,您必须将其转化为数字陈述。如果您可以为每种错误分配一个企业的相对财务成本,那么这将是一个好的开始。

  • 使用最佳调整模型,在分配您希望以某种方式采取行动的正面类别之前,使用权重计算不同类别置信度截止值的成本。针对测试集进行预测以获得类概率。然后对正类使用不同的截止点,计算您的 FP 和 FN 给定的截止值,然后将总数乘以您稍后选择的成本。得分最低的截止点应该是在生产中使用的截止点。如果 FP 的成本高于 FN,那么您可能会发现需要 > 0.5 的置信水平。

您还可以研究考虑动作后果的机器学习方法 - 例如强化学习 - 以便在单个学习框架内获得类似的结果。但是,这不是您可以仅在 XGBoost 中完成的事情,只要您的问题在单步预测中保持 FP 和 FN 之间的平衡,那么上述方法应该是可以的。

根据此页面对做什么objectiveeval_metric做什么的描述,我认为这些都不完全正确。

在这种情况下,我会尝试使用 scale_pos_weights 。转到此链接并按 Ctrl+F 获取“scale_pos_weights”。