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


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

2
y^yν1pi(1pi)(yipi)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.