Gradiente para la función de pérdida logística

12

Haría una pregunta relacionada con este .

Encontré un ejemplo de escritura de la función de pérdida personalizada para xgboost aquí :

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 función de pérdida logística es

log(1+eyP)

donde es log-odds e es etiquetas (0 o 1).Py

Mi pregunta es: ¿cómo podemos obtener un gradiente (primera derivada) simplemente igual a la diferencia entre los valores verdaderos y las probabilidades pronosticadas (calculadas a partir de las probabilidades de registro como preds <- 1/(1 + exp(-preds)))?

Ogurtsov
fuente
Debe usar la pérdida de error al cuadrado para lograr eso. Su notación es confusa y debe definirse en la publicación. Si es el riesgo predicho, entonces pérdida es lo que desea. Estoy confundido porque nunca usamos para referirnos a las probabilidades de registro. p(yp)2p
AdamO
p se fijó al capital . Es log-odds, y está claramente marcado en la pregunta. Sé que el gradiente para la función de pérdida es , pero es pérdida de escuadra, no logística. P(yf(x))2f(x)y
Ogurtsov
Cuando dices "gradiente", ¿a qué gradiente te refieres? ¿El gradiente de la pérdida? Es una relación matemática simple que si la derivada de una expresión es una diferencia lineal, entonces la expresión es una diferencia cuadrática o pérdida de error al cuadrado.
AdamO
Sí, se trata del gradiente de la pérdida. Es simple, cuando la función de pérdida es un error al cuadrado. En este caso, la función de pérdida es la pérdida logística ( en.wikipedia.org/wiki/LogitBoost ), y no puedo encontrar correspondencia entre el gradiente de esta función y el ejemplo de código dado.
Ogurtsov

Respuestas:

19

Mi respuesta a mi pregunta: sí, se puede demostrar que el gradiente de pérdida logística es igual a la diferencia entre los valores verdaderos y las probabilidades pronosticadas. Breve explicación fue encontrada aquí .

Primero, la pérdida logística es solo una probabilidad logarítmica negativa, por lo que podemos comenzar con la expresión de probabilidad logarítmica ( p. 74 ; esta expresión es la probabilidad logarítmica misma, no la probabilidad logarítmica negativa)

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

pi es función logística: , donde es valores pronosticados antes de la transformación logística (es decir, log-odds):pi=11+ey^iy^i

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

Primera derivada obtenida usando Wolfram Alpha:

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

Después de multiplicar por :ey^iey^i

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

Después de cambiar el signo, tenemos expresión para el gradiente de la función de pérdida logística:

piyi
Ogurtsov
fuente
2
Lo que estás llamando aquí no es una predicción de , sino una combinación lineal de predictores. En el modelado lineal generalizado usamos la notación y llamamos a este término el "predictor lineal". Su derivada de loglikelihood (score) es incorrecta, debe haber un término al cuadrado en el denominador, ya que bernoullis forma una probabilidad exponencial. El puntaje debe tener la formay^yν1pi(1pi)(yipi)
AdamO