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+e−yP)

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


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(y−p)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(y−f(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=yi⋅log(pi)+(1−yi)⋅log(1−pi)

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

L=yi⋅log(11+e−y^i)+(1−yi)⋅log(e−y^i1+e−y^i)

Pierwsza pochodna uzyskana przy użyciu Wolfram Alpha:

L′=yi−(1−yi)⋅ey^i1+ey^i

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

L.′=yja⋅mi-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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.