Я хотел бы задать вопрос, связанный с этим .
Я нашел пример написания пользовательской функции потерь для xgboost здесь :
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))
}
Функция логистической потери
где - лог-шансы, а - метки (0 или 1).
Мой вопрос: как мы можем получить градиент (первую производную), просто равный разнице между истинными значениями и предсказанными вероятностями (рассчитанными из log-odds as preds <- 1/(1 + exp(-preds))
)?
Ответы:
Мой ответ на мой вопрос: да, можно показать, что градиент логистических потерь равен разнице между истинными значениями и прогнозируемыми вероятностями. Краткое объяснение было найдено здесь .
Во-первых, логистическая потеря - это просто отрицательное логарифмическое правдоподобие, поэтому мы можем начать с выражения для логарифмического правдоподобия ( стр. 74 - это выражение само по себе логарифмически, а не отрицательно логарифмически):
Первая производная, полученная с использованием Wolfram Alpha:
После умножения на :e−y^ie−y^i
После изменения знака у нас есть выражение для градиента функции логистической потери:
источник