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 é
onde é probabilidades de log e é rótulos (0 ou 1).y
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))
)?
Respostas:
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):
Primeira derivada obtida usando o Wolfram Alpha:
Depois de multiplicar por :e−y^ie−y^i
Após alterar o sinal, temos expressão para gradiente da função de perda logística:
fonte