Zadałbym pytanie związane z tym .
Znalazłem przykład pisania niestandardowej funkcji utraty dla xgboost tutaj :
loglossobj <- function(preds, dtrain) {
# dtrain is the internal format of the training data
# We extract the labels from the training data
labels <- getinfo(dtrain, "label")
# We compute the 1st and 2nd gradient, as grad and hess
preds <- 1/(1 + exp(-preds))
grad <- preds - labels
hess <- preds * (1 - preds)
# Return the result as a list
return(list(grad = grad, hess = hess))
}
Funkcja utraty logistycznej to
gdzie jest log-odds, a y oznacza etykiety (0 lub 1).y
Moje pytanie brzmi: w jaki sposób możemy uzyskać gradient (pierwsza pochodna) po prostu równy różnicy między wartościami rzeczywistymi a przewidywanymi prawdopodobieństwami (obliczonymi na podstawie ilorazów logarytmu jako preds <- 1/(1 + exp(-preds))
)?
Odpowiedzi:
Moja odpowiedź na moje pytanie: tak, można wykazać, że gradient strat logistycznych jest równy różnicy między wartościami rzeczywistymi a przewidywanymi prawdopodobieństwami. Krótkie wyjaśnienie zostało znalezione tutaj .
Po pierwsze, utrata logistyki jest po prostu ujemnym prawdopodobieństwem logarytmicznym, więc możemy zacząć od wyrażenia log-prawdopodobieństwo ( s. 74 - to wyrażenie jest log-samo w sobie, a nie ujemne log-prawdopodobieństwo):
p i = 1pja to funkcja logistyczna: , gdzie to przewidywane wartości przed transformacją logistyczną (tj. log-odds): r ipja= 11 + e- y^ja y^ja
Pierwsza pochodna uzyskana przy użyciu Wolfram Alpha:
Po pomnożeniu przez :mi- y^jami- y^ja
Po zmianie znaku mamy wyrażenie na gradient funkcji utraty logistyki:
źródło