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

时间:2016-08-23 06:18:43

标签: numpy machine-learning entropy derivative xgboost

我想了解如何在xgboost sample script中计算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)

日志丢失函数是enter image description here enter image description here的总和。

然后,渐变(相对于p)为enter image description here,但在代码中为enter image description here

同样,二阶导数(关于p)是enter image description here但是在代码中它是enter image description here

方程式如何相等?

1 个答案:

答案 0 :(得分:7)

日志丢失功能如下:

enter image description here

,其中

enter image description here

取偏导数得到梯度

enter image description here

因此我们将渐变的负数称为p-y

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