Gradient pour la fonction de perte logistique

12

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

log(1+eyP)

est log-odds et y est labels (0 ou 1).Py

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

Ogurtsov
la source
p(yp)2p
pP(yf(x))2f(x)y
Quand vous dites le "gradient", de quel gradient parlez-vous? Le gradient de la perte? C'est une relation mathématique simple que si la dérivée d'une expression est une différence linéaire, alors l'expression est une différence quadratique, ou une perte d'erreur quadratique.
AdamO
Oui, tout dépend du gradient de la perte. C'est simple, lorsque la fonction de perte est une erreur quadratique. Dans ce cas, la fonction de perte est une perte logistique ( en.wikipedia.org/wiki/LogitBoost ), et je ne trouve pas de correspondance entre le gradient de cette fonction et l'exemple de code donné.
Ogurtsov

Réponses:

19

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

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

pipi=11+ey^iy^i

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

Dérivée première obtenue à l'aide de 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

Après avoir changé de signe, nous avons l'expression du gradient de la fonction de perte logistique:

piyi
Ogurtsov
la source
2
y^yν1pi(1pi)(yipi)