我想了解xgboost示例脚本中对数损失函数的梯度和黑塞矩阵是如何计算的,该脚本可以在这里找到。
我已经简化了函数以接受numpy数组,并生成了y_hat
和y_true
,它们是脚本中使用的值的样本。
这是一个简化的示例:
import numpy as npdef 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, hessy_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-y
。
可以进行类似的计算来获得黑塞矩阵。