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
Dabei ist Log-Odds und y Labels (0 oder 1).
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))
)?
Antworten:
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):
ist eine logistische Funktion: p i = 1pi , wobei y i-Werte vor logistischen Transformation vorhergesagt wird (dh Log-Odds):pi=11+e−y^i y^i
Erste Ableitung mit Wolfram Alpha:
After changing sign we have expression for gradient of logistic loss function:
quelle