Gradient dla funkcji straty logistycznej

12

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

log(1+eyP)

gdzie jest log-odds, a y oznacza etykiety (0 lub 1).yPy

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)))?

Ogurcow
źródło
Aby to osiągnąć, należy użyć kwadratowej utraty błędów. Twoja notacja jest myląca i powinna zostać zdefiniowana w poście. Jeśli jest przewidywanym ryzykiem, to strata jest tym, czego chcesz. Jestem zdezorientowany, ponieważ nigdy nie używamy aby oznaczać logarytmiczne szanse. ( y - p ) 2 pp(yp)2p
AdamO,
P ( y - f ( x ) ) 2 f ( x ) - yp została ustalona do kapitału . Jest to iloraz szans i jest wyraźnie zaznaczony w pytaniu. Wiem, że gradient funkcji straty to , ale jest to strata kwadratowa, a nie logistyczna. P(yf(x))2f(x)y
Ogurtsov
Kiedy mówisz „gradient”, jaki masz na myśli gradient? Gradient straty? Jest to prosta zależność matematyczna, że ​​jeśli pochodna wyrażenia jest różnicą liniową, to wyrażenie jest różnicą kwadratową lub kwadratową stratą błędu.
AdamO,
Tak, chodzi o gradient straty. To proste, gdy funkcja straty jest kwadratem błędu. W tym przypadku funkcją straty jest utrata logistyczna ( en.wikipedia.org/wiki/LogitBoost ) i nie mogę znaleźć zgodności między gradientem tej funkcji a podanym przykładem kodu.
Ogurtsov,

Odpowiedzi:

19

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):

L=yilog(pi)+(1yi)log(1pi)

p i = 1pi to funkcja logistyczna: , gdzie to przewidywane wartości przed transformacją logistyczną (tj. log-odds): r ipi=11+ey^iy^i

L=yilog(11+ey^i)+(1yi)log(ey^i1+ey^i)

Pierwsza pochodna uzyskana przy użyciu Wolfram Alpha:

L=yi(1yi)ey^i1+ey^i

Po pomnożeniu przez :mi-y^jami-y^ja

L.=yjami-y^ja+yja-11+mi-y^ja=yja(1+mi-y^ja)1+mi-y^ja-11+mi-y^ja=yja-pja

Po zmianie znaku mamy wyrażenie na gradient funkcji utraty logistyki:

pja-yja
Ogurcow
źródło
2
To, co nazywacie tutaj , nie jest przewidywaniem , ale liniową kombinacją predyktorów. W uogólnionym modelowaniu liniowym używamy notacji i nazywamy ten termin „predyktorem liniowym”. Twoja pochodna logarytmu (wyniku) jest niepoprawna, w mianowniku powinien znajdować się kwadrat, ponieważ bernoullis tworzy wykładnicze prawdopodobieństwo. Wynik powinien mieć postać yv1y^yν1pja(1-pja)(yja-pja)
AdamO