2016-08-23 13 views
1

Я хотел бы понять, как градиент и 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) 

Функция потерь журнала является суммой 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.

Как уравнения равны?

ответ

3

Функция потерь журнала определяется как:

enter image description here

где

enter image description here

Принимая частную производную мы получаем градиент, как

enter image description here

Таким образом, мы получаем отрицательный градиент как p-y.

Аналогичные вычисления можно сделать, чтобы получить hessian.