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