Gradient für die logistische Verlustfunktion

11

Ich würde eine Frage zu diesem Thema stellen .

Ich habe hier ein Beispiel für das Schreiben einer benutzerdefinierten Verlustfunktion für xgboost gefunden :

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

Logistische Verlustfunktion ist

log(1+eyP)

Dabei ist Log-Odds und y Labels (0 oder 1).Py

Meine Frage ist: Wie können wir einen Gradienten (erste Ableitung) erhalten, der einfach der Differenz zwischen wahren Werten und vorhergesagten Wahrscheinlichkeiten entspricht (berechnet aus logarithmischen Quoten als preds <- 1/(1 + exp(-preds)))?

Ogurtsov
quelle
Sie sollten den quadratischen Fehlerverlust verwenden, um dies zu erreichen. Ihre Notation ist verwirrend und sollte im Beitrag definiert werden. Wenn das vorhergesagte Risiko ist, dann ist ( y - p ) 2 Verlust das, was Sie wollen. Ich bin verwirrt , weil wir nie verwenden p den Log-Odds bedeuten. p(yp)2p
AdamO
wurde auf das Kapital P festgelegt . Es handelt sich um Log-Odds, die in der Frage deutlich gekennzeichnet sind. Ich weißdassGradienten fürVerlustfunktion ( y - f ( x ) ) 2 ist , f ( x ) - y , aber es ist squred Verlust, nicht Logistik. pP(yf(x))2f(x)y
Ogurtsov
Wenn Sie den "Gradienten" sagen, welchen Gradienten meinen Sie? Der Gradient des Verlustes? Es ist eine einfache mathematische Beziehung, dass, wenn die Ableitung eines Ausdrucks eine lineare Differenz ist, der Ausdruck eine quadratische Differenz oder ein quadratischer Fehlerverlust ist.
AdamO
Ja, es geht nur um den Gradienten des Verlustes. Es ist einfach, wenn die Verlustfunktion ein quadratischer Fehler ist. In diesem Fall handelt es sich bei der Verlustfunktion um einen logistischen Verlust ( en.wikipedia.org/wiki/LogitBoost ), und ich kann keine Entsprechung zwischen dem Gradienten dieser Funktion und dem angegebenen Codebeispiel finden.
Ogurtsov

Antworten:

18

Meine Antwort auf meine Frage: Ja, es kann gezeigt werden, dass der Gradient für den logistischen Verlust gleich der Differenz zwischen wahren Werten und vorhergesagten Wahrscheinlichkeiten ist. Kurze Erklärung wurde gefunden hier .

Erstens ist der logistische Verlust nur eine negative Log-Wahrscheinlichkeit, sodass wir mit dem Ausdruck für die Log-Wahrscheinlichkeit beginnen können ( S. 74 - dieser Ausdruck ist die Log-Wahrscheinlichkeit selbst, nicht die negative Log-Wahrscheinlichkeit):

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

ist eine logistische Funktion: p i = 1pi , wobei y i-Werte vor logistischen Transformation vorhergesagt wird (dh Log-Odds):pi=11+ey^iy^i

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

Erste Ableitung mit Wolfram Alpha:

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

ey^iey^i:

L=yiey^i+yi11+ey^i=yi(1+ey^i)1+ey^i11+ey^i=yipi

After changing sign we have expression for gradient of logistic loss function:

piyi
Ogurtsov
quelle
2
What you're calling y^ here is not a prediction of y, but a linear combination of predictors. In generalized linear modeling we use the notation ν and call this term the "linear predictor". Your derivative of the loglikelihood (score) is wrong, there should be a squared term in the denominator, since bernoullis form an exponential likelihood. The score should be of the form 1pi(1pi)(yipi)
AdamO