Как tweedie nloglike в XGBoost соотносится с фактическим nloglike?

Просматривая код того, как XGBoost вычисляет метрику оценки твида (tweedie-nloglik), мы видим, что она рассчитывается как:

bst_float a = y * std::exp((1 - rho_) * std::log(p)) / (1 - rho_);
bst_float b = std::exp((2 - rho_) * std::log(p)) / (2 - rho_);
return -a + b;

Источник: строка 310-313 ниже: https://github.com/dmlc/xgboost/blob/master/src/metric/elementwise_metric.cu

Выражение действительно показывает сходство с выражением для твидового отклонения для значений p между 1-2, но, похоже, нет точного сопоставления. Отклонение от твида согласно википедии:

если я удалю константы и возьму отрицательный логарифмический знак выражения из Википедии, я не получу выражение, которое равно -a + b из XGBoost. У меня тогда возникает вопрос, какое значение вычисляет XGBoost и как оно соотносится с отрицательной логарифмической вероятностью?

Благодарность!

1 ответ

Я знаю, что это немного старый вопрос, но я оставляю здесь свои выводы (которые, конечно, могут быть неправильными).XGBoost, как и LightGBM, используют потерю Tweedie в контексте обобщенных линейных моделей (GLM). Допустим, наша функция отклика подчиняется распределению Пуассона.

$$ y \ sim \ mathit {Пуассон} (\ mu) $$

и что $ \ mu $ получается как линейная комбинация нескольких ковариат, сгруппированных в вектор $ x $; $ \ mu = w ^ T x $. Однако мы знаем, что на $ \ mu $ действуют некоторые ограничения, накладываемые используемым нами распределением. Для Пуассона нам нужно, чтобы он был положительным, поэтому мы можем использовать экспоненциальную функцию такую, что

$$ \ mu = \ ехр (w ^ T x) $$

или, чтобы облегчить вычисление

$$ \ журнал (\ му) = w ^ T x $$.

$ \ Log() $ называется функцией связи и является выбором по умолчанию для нескольких дистрибутивов (включая Tweedie), а также связана с канонической формой моделей экспоненциальной дисперсии (EDM). Дополнительную информацию можно найти в следующем источнике https://bookdown.org/steve_midway/BHME/Ch7.html.

Поскольку мы преобразовали $ \ mu $ в логарифмическую форму, в формуле будет не $ \ mu^{1 - p} $, а $ \ log(\mu)^{1 - p} = (1 - p) \ log(\ му) $. С помощью $ \ exp((1 - p) \ log(\ mu)) $ мы получаем правильное количество, которое нужно включить в логарифмическую вероятность.

Подводя итог, отметим, что фактические потери, реализованные в XGBoost, представляют собой просто общую логарифмическую вероятность, когда функция $ \ log() $ используется в качестве функции связи.

Другие вопросы по тегам