Je voudrais poser une question liée à celle-ci .
J'ai trouvé un exemple d'écriture d'une fonction de perte personnalisée pour xgboost ici :
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))
}
La fonction de perte logistique est
où est log-odds et y est labels (0 ou 1).
Ma question est: comment obtenir un gradient (dérivée première) simplement égal à la différence entre les valeurs vraies et les probabilités prédites (calculées à partir des log-odds as preds <- 1/(1 + exp(-preds))
)?
Réponses:
Ma réponse à ma question: oui, on peut montrer que le gradient de perte logistique est égal à la différence entre les valeurs réelles et les probabilités prédites. Une brève explication a été trouvée ici .
Tout d'abord, la perte logistique est simplement une log-vraisemblance négative, nous pouvons donc commencer par l'expression de log-vraisemblance ( p. 74 - cette expression est log-vraisemblance elle-même, pas log-vraisemblance négative):
Dérivée première obtenue à l'aide de Wolfram Alpha:
Après avoir changé de signe, nous avons l'expression du gradient de la fonction de perte logistique:
la source