Функция потери биномиального отклонения Scikit

11

Это функция биномиального отклонения Scikit GradientBoosting,

   def __call__(self, y, pred, sample_weight=None):
        """Compute the deviance (= 2 * negative log-likelihood). """
        # logaddexp(0, v) == log(1.0 + exp(v))
        pred = pred.ravel()
        if sample_weight is None:
            return -2.0 * np.mean((y * pred) - np.logaddexp(0.0, pred))
        else:
            return (-2.0 / sample_weight.sum() *
                    np.sum(sample_weight * ((y * pred) - np.logaddexp(0.0, pred))))

Эта функция потери не похожа между классом с 0 и классом с 1. Может кто-нибудь объяснить, как это считается нормальным.

Например, без выборочного веса функция потерь для класса 1

-2(pred - log(1 + exp(pred))

против класса 0

-2(-log(1+exp(pred))

Сюжет для этих двух не похожи по стоимости. Может ли кто-нибудь помочь мне понять.

Kumaran
источник

Ответы:

17

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

Во-первых, predэто не вероятность, это логарифмические шансы.

Второе - это стандартная алгебраическая манипуляция биномиальным отклонением, которая выглядит следующим образом. Пусть будет логарифмировать, что звонит . Тогда определение биномиального отклонения наблюдения составляет (до коэффициента )пsklearnpred-2

Yжурнал(п)+(1-Y)журнал(1-п)знак равножурнал(1-п)+Yжурнал(п1-п)

Теперь обратите внимание, что и (быстрая проверка заключается в их суммировании в вашей голове, вы получите ). Такпзнак равноеп1+еп1-пзнак равно11+еп1

журнал(1-п)знак равножурнал(11+еп)знак равно-журнал(1+еп)

а также

журнал(п1-п)знак равножурнал(еп)знак равноп

Таким образом, в целом, биномиальное отклонение равно

Yп-журнал(1+еп)

Какое уравнение sklearnиспользует.

Мэтью Друри
источник
Спасибо вам. Если я заменю predлог-коэффициентами, функция потерь одинакова для обоих классов.
Кумаран
Этот же вопрос возник у меня недавно. Я смотрел на градиентboostedmodels.googlecode.com/ git/gbm/inst/doc/gbm.pdf стр. 10, где указан градиент отклонения. Но кажется, что градиент, который они показывают, предназначен для лог-лайка, а не для негативного лог-лайка. Это правильно - кажется, это соответствует вашему объяснению здесь?
B_Miner
1
@B_Miner ссылка не работает
GeneX
Большое спасибо @Matthew Drury
Catbuilts