如何在xgboost的github存储库中的自定义目标函数示例脚本中计算对数损失的梯度和粗糙度?

Gre*_*reg 6 numpy machine-learning entropy derivative xgboost

我想了解如何在xgboost示例脚本中计算logloss函数的梯度和粗糙度.

我已经简化功能采取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)
Run Code Online (Sandbox Code Playgroud)

对数丢失函数是总和 在此输入图像描述 哪里 在此输入图像描述.

然后是梯度(相对于p) 在此输入图像描述 但是在代码中它 在此输入图像描述.

同样,二阶导数(相对于p)是 在此输入图像描述 但是在代码中它是 在此输入图像描述.

方程式如何相等?

A G*_*ore 9

日志丢失功能如下:

在此输入图像描述

哪里

在此输入图像描述

取偏导数,我们得到梯度为

在此输入图像描述

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

可以进行类似的计算以获得粗麻布.