Я хотел бы понять, как градиент и hessian функции logloss вычисляются в xgboost sample script.Как градиент и hessian логарифмической потери вычисляются в сценарии примера пользовательской целевой функции в репозитории github xgboost?
Я упростил функцию, чтобы принять numpy массивы и сгенерировал y_hat
и y_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) равна , однако в коде это
.
Как уравнения равны?