首页 > 解决方案 > XGBoost - 自定义损失函数

问题描述

在 xgboost 中使用自定义损失函数有两种不同的指导方针。

如果预测概率 'p' = sigmoid(z)

  1. https://github.com/dmlc/xgboost/blob/master/demo/guide-python/custom_objective.py 1 中,第 25 行提到自定义损失函数的梯度应该采用“z”</li>

2. 在https://xgboost.readthedocs.io/en/latest/tutorials/custom_metric_obj.html 1 中,渐变是 wrt 'p'</p>

哪个是对的?

标签: xgboost

解决方案


为了尽可能保持通用性,您需要计算总损失函数的梯度,以改变当前预测值。通常,您的损失函数的形式为 $L = \sum_{i=1}^{N} \ell (y_{i}, \hat{y_{i}})$,其中 $y_{i} $ 是 $i^{th}$ 数据点的标签,$\hat{y_{i}}$ 是您的预测(在二进制分类情况下,您可以选择将其定义为 $y_{i}$ 是二进制标签,$\hat{y_{i}}$ 是分类器分配给作为类之一的标签的概率)。

然后你需要计算 $\frac{\partial\ell}{\hat{y_{i}}}\big| {y {i}}$


推荐阅读