Градиент для функции логистической потери

12

Я хотел бы задать вопрос, связанный с этим .

Я нашел пример написания пользовательской функции потерь для 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))
}

Функция логистической потери

log(1+eyP)

где - лог-шансы, а - метки (0 или 1).Py

Мой вопрос: как мы можем получить градиент (первую производную), просто равный разнице между истинными значениями и предсказанными вероятностями (рассчитанными из log-odds as preds <- 1/(1 + exp(-preds)))?

Огурцы
источник
Вы должны использовать квадрат ошибки потери, чтобы достичь этого. Ваша запись сбивает с толку и должна быть определена в посте. Если - прогнозируемый риск, тогда - это то, что вы хотите. Я запутался, потому что мы никогда не используем для обозначения лог-шансов. p(yp)2p
AdamO
p был зафиксирован в столице . Это лог-шансы, и это четко обозначено в вопросе. Я знаю, что градиент для функции потерь - это , но это квадратные потери, а не логистика. P(yf(x))2f(x)y
Огурцов
Когда вы говорите «градиент», какой градиент вы имеете в виду? Градиент потерь? Это простое математическое соотношение, что если производная выражения является линейной разностью, то выражение является квадратичной разностью или квадратом потери ошибок.
AdamO
Да, все дело в градиенте потерь. Это просто, когда функция потерь является квадратом ошибки. В этом случае функция потерь - это логистическая потеря ( en.wikipedia.org/wiki/LogitBoost ), и я не могу найти соответствия между градиентом этой функции и приведенным примером кода.
Огурцов

Ответы:

19

Мой ответ на мой вопрос: да, можно показать, что градиент логистических потерь равен разнице между истинными значениями и прогнозируемыми вероятностями. Краткое объяснение было найдено здесь .

Во-первых, логистическая потеря - это просто отрицательное логарифмическое правдоподобие, поэтому мы можем начать с выражения для логарифмического правдоподобия ( стр. 74 - это выражение само по себе логарифмически, а не отрицательно логарифмически):

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

pi - логистическая функция: , где - прогнозируемые значения до логистического преобразования (т. е. лог-шансы):pi=11+ey^iy^i

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

Первая производная, полученная с использованием 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

После изменения знака у нас есть выражение для градиента функции логистической потери:

piyi
Огурцы
источник
2
То, что вы называете здесь - это не предсказание , а линейная комбинация предикторов. В обобщенном линейном моделировании мы используем обозначение и называем этот термин «линейный предиктор». Ваша производная логарифмического правдоподобия (оценка) неверна, в знаменателе должен быть квадратный член, поскольку бернулли образуют экспоненциальную вероятность. Счет должен быть в формеy^yν1pi(1pi)(yipi)
AdamO