Função de perda de desvio binomial do Scikit

11

Esta é a função de perda de desvio binomial do 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))))

Essa perda de funções não é semelhante entre classe com 0 e classe com 1. Alguém pode explicar como isso é considerado bom.

Por exemplo, sem peso de amostra, a função de perda para a classe 1 é

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

vs para classe 0

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

A trama para esses dois não é semelhante em termos de custo. Alguém pode me ajudar a entender.

Kumaran
fonte

Respostas:

17

Há duas observações necessárias para entender essa implementação.

A primeira é que nãopred é uma probabilidade, é uma probabilidade de log.

O segundo é uma manipulação algébrica padrão do desvio binomial que é assim. Seja as probabilidades do log, o que chama . Então a definição do desvio binomial de uma observação é (até um fator de )Psklearnpred2

ylog(p)+(1y)log(1p)=log(1p)+ylog(p1p)

Agora observe que e (uma verificação rápida é somar em sua cabeça, você receberá ). entãop=eP1+eP1p=11+eP1

log(1p)=log(11+eP)=log(1+eP)

e

log(p1p)=log(eP)=P

Então, no conjunto, o desvio binomial é igual a

yPlog(1+eP)

Qual é a equação sklearnestá usando.

Matthew Drury
fonte
Te agradece. Se eu substituir predpor probabilidades de log, a função de perda é uniforme para ambas as classes.
Kumaran
Essa mesma pergunta surgiu para mim recentemente. Eu estava olhando para gradientboostedmodels.googlecode.com/git/gbm/inst/doc/gbm.pdf página 10 onde o gradiente do desvio está listado. Mas parece que o gradiente que eles mostram é para o log-lik e não o log-lik negativo. Isso está correto - parece corresponder à sua explicação aqui?
B_Miner 29/03
11
@B_Miner o link está quebrado
GeneX 30/06
Muito obrigado @Matthew Drury
Catbuilts