【问题标题】:How is the gradient and hessian of logarithmic loss computed in the custom objective function example script in xgboost's github repository?在 xgboost 的 github 存储库中的自定义目标函数示例脚本中,对数损失的梯度和 hessian 是如何计算的?
【发布时间】:2016-12-29 20:09:51
【问题描述】:

我想了解如何在xgboost sample script 中计算 logloss 函数的梯度和 hessian。

我已简化函数以获取 numpy 数组,并生成了 y_haty_true,它们是脚本中使用的值的示例。

这是一个简化的例子:

import numpy as np


def loglikelihoodloss(y_hat, y_true):
    prob = 1.0 / (1.0 + np.exp(-y_hat))
    grad = prob - y_true
    hess = prob * (1.0 - prob)
    return grad, hess

y_hat = np.array([1.80087972, -1.82414818, -1.82414818,  1.80087972, -2.08465433,
                  -1.82414818, -1.82414818,  1.80087972, -1.82414818, -1.82414818])
y_true = np.array([1.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.])

loglikelihoodloss(y_hat, y_true)

日志损失函数是的总和,其中

梯度(相对于 p)为,但在代码中为

同样,二阶导数(相对于 p)是 ,但在代码中是

方程如何相等?

【问题讨论】:

    标签: numpy machine-learning entropy derivative xgboost


    【解决方案1】:

    对数损失函数如下:

    在哪里

    取偏导数得到梯度

    因此我们得到梯度的负数为p-y

    可以进行类似的计算来获得 hessian。

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 2021-12-08
      • 2021-02-24
      • 2020-05-26
      • 2016-07-01
      • 1970-01-01
      • 2017-05-30
      • 2021-12-08
      • 2015-06-17
      相关资源
      最近更新 更多