Gradiente para a função de perda logística

12

Eu faria uma pergunta relacionada a este .

Encontrei um exemplo de como escrever a função de perda personalizada para o xgboost aqui :

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

A função de perda logística é

log(1+eyP)

onde é probabilidades de log e é rótulos (0 ou 1).yPy

Minha pergunta é: como podemos obter gradiente (primeira derivada) simplesmente igual à diferença entre valores verdadeiros e probabilidades previstas (calculadas a partir de log-odds as preds <- 1/(1 + exp(-preds)))?

Ogurtsov
fonte
Você deve usar a perda de erro ao quadrado para conseguir isso. Sua notação é confusa e deve ser definida na postagem. Se é o risco previsto, então perda é o que você deseja. Estou confuso porque nunca usamos para significar as probabilidades do log. ( y - p ) 2 pp(yp)2p
AdamO
P ( y - f ( x ) ) 2 f ( x ) - yp foi fixado ao capital . É log-odds, e está claramente marcado na pergunta. Eu sei que o gradiente para a função de perda é , mas é uma perda squred, não logística. P(yf(x))2f(x)y
Ogurtsov
Quando você diz "gradiente", qual gradiente você quer dizer? O gradiente da perda? É uma relação matemática simples que, se a derivada de uma expressão é uma diferença linear, a expressão é uma diferença quadrática ou perda de erro ao quadrado.
Adamo
Sim, é tudo sobre o gradiente da perda. É simples, quando a função de perda é um erro ao quadrado. Nesse caso, a função de perda é a perda logística ( en.wikipedia.org/wiki/LogitBoost ), e não consigo encontrar correspondência entre o gradiente dessa função e o exemplo de código fornecido.
Ogurtsov

Respostas:

19

Minha resposta para minha pergunta: sim, pode-se mostrar que o gradiente para perda logística é igual à diferença entre valores verdadeiros e probabilidades previstas. Uma breve explicação foi encontrada aqui .

Primeiro, a perda logística é apenas uma probabilidade logarítmica negativa, para que possamos começar com a expressão de probabilidade logarítmica ( p. 74 - essa expressão é a própria probabilidade logarítmica, não a probabilidade logarítmica negativa):

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

pi é uma função logística: , em que são valores previstos antes da transformação logística (ou seja, log-odds):pi=11+ey^iy^i

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

Primeira derivada obtida usando o Wolfram Alpha:

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

Depois de multiplicar por :ey^iey^i

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

Após alterar o sinal, temos expressão para gradiente da função de perda logística:

piyi
Ogurtsov
fonte
2
O que você está chamando aqui não é uma previsão de , mas uma combinação linear de preditores. Na modelagem linear generalizada, usamos a notação e chamamos esse termo de "preditor linear". Sua derivada da probabilidade de log (pontuação) está errada, deve haver um termo ao quadrado no denominador, pois os bernouis formam uma probabilidade exponencial. A pontuação deve ser de forma a yv1y^yν1pi(1pi)(yipi)
Adamo