xgboost - XGBoost - 自定义损失函数
问题描述
在 xgboost 中使用自定义损失函数有两种不同的指导方针。
如果预测概率 'p' = sigmoid(z)
- 在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>
哪个是对的?
解决方案
为了尽可能保持通用性,您需要计算总损失函数的梯度,以改变当前预测值。通常,您的损失函数的形式为 $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}}$
推荐阅读
- dictionary - 可在地图上观察以检测何时添加、更新或删除条目
- android - 使用 TCP 套接字获取 Json 数据
- inno-setup - 可以在此脚本中减少注册表项的数量吗?
- java - java非阻塞缓存实现
- google-cloud-platform - 如何验证 Google Cloud Endpoints 服务 URL 的所有权?
- python - Pandas - 导入大小为 4GB 的 CSV 文件时出现内存错误
- python - 如果我希望它也打印其他事件,我的 python 程序会继续打印相同的 id 事件
- c# - 如何绕过重复代码 Mongo/Core API
- xamarin.forms - 我怎样才能在 xamarin 表单中使用步进器发送属性 ID?
- python - 以点为单位的 pyplot 大小指的是什么?