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


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+e−yP)

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

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


Вы должны использовать квадрат ошибки потери, чтобы достичь этого. Ваша запись сбивает с толку и должна быть определена в посте. Если - прогнозируемый риск, тогда - это то, что вы хотите. Я запутался, потому что мы никогда не используем для обозначения лог-шансов. p(y−p)2p
— AdamO

p был зафиксирован в столице . Это лог-шансы, и это четко обозначено в вопросе. Я знаю, что градиент для функции потерь - это , но это квадратные потери, а не логистика. P(y−f(x))2f(x)−y
— Огурцов

Когда вы говорите «градиент», какой градиент вы имеете в виду? Градиент потерь? Это простое математическое соотношение, что если производная выражения является линейной разностью, то выражение является квадратичной разностью или квадратом потери ошибок.
— AdamO

Да, все дело в градиенте потерь. Это просто, когда функция потерь является квадратом ошибки. В этом случае функция потерь - это логистическая потеря ( en.wikipedia.org/wiki/LogitBoost ), и я не могу найти соответствия между градиентом этой функции и приведенным примером кода.
— Огурцов

Ответы:


19

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

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

L=yi⋅log(pi)+(1−yi)⋅log(1−pi)

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

L=yi⋅log(11+e−y^i)+(1−yi)⋅log(e−y^i1+e−y^i)

Первая производная, полученная с использованием Wolfram Alpha:

L′=yi−(1−yi)⋅ey^i1+ey^i

После умножения на :e−y^ie−y^i

L′=yi⋅e−y^i+yi−11+e−y^i=yi⋅(1+e−y^i)1+e−y^i−11+e−y^i=yi−pi

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

pi−yi

2
То, что вы называете здесь - это не предсказание , а линейная комбинация предикторов. В обобщенном линейном моделировании мы используем обозначение и называем этот термин «линейный предиктор». Ваша производная логарифмического правдоподобия (оценка) неверна, в знаменателе должен быть квадратный член, поскольку бернулли образуют экспоненциальную вероятность. Счет должен быть в формеy^yν1pi(1−pi)(yi−pi)
— AdamO
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.