Scikit Binomial Deviance Loss Function

11

Jest to funkcja utraty dwumianowej dewiacji przez 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))))

Ta funkcja strat nie jest podobna dla klasy z 0 i klasy z 1. Czy ktoś może wyjaśnić, jak to jest uważane za OK.

Na przykład, bez wagi próbki, funkcją straty dla klasy 1 jest

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

vs dla klasy 0

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

Fabuła dla tych dwóch nie jest podobna pod względem kosztów. Czy ktoś może mi pomóc zrozumieć.

Kumaran
źródło

Odpowiedzi:

17

Aby zrozumieć tę implementację, potrzebne są dwie uwagi.

Po pierwsze, predto nie jest prawdopodobieństwo, to jest logarytm.

Drugi to standardowa algebraiczna manipulacja dewiacją dwumianową, która przebiega w ten sposób. Niech będzie logarytmicznym prawdopodobieństwem, jakie połączenia . Zatem definicją dwumianowego odchylenia obserwacji jest (do współczynnika - 2P.sklearnpred-2) )

ylog(p)+(1-y)log(1-p)=log(1-p)+ylog(p1-p)

Teraz zauważ, że p=miP.1+miP.1-p=11+miP.1

log(1-p)=log(11+miP.)=-log(1+miP.)

i

log(p1-p)=log(miP.)=P.

W sumie dwumianowe odchylenie jest równe

yP.-log(1+miP.)

Które to równanie sklearnwykorzystuje.

Matthew Drury
źródło
Dzięki Ci. Jeśli zastąpię predlogarytmiczne szanse, funkcja straty jest jednolita dla obu klas.
Kumaran
To samo pytanie pojawiło się ostatnio dla mnie. Patrzyłem na gradientboostedmodels.googlecode.com/git/gbm/inst/doc/gbm.pdf strona 10, gdzie znajduje się gradient odchylenia. Wygląda jednak na to, że gradient, który pokazują, jest podobny do logarytmu, a nie do logarytmu ujemnego. Czy to prawda - wydaje się pasować do twojego wyjaśnienia tutaj?
B_Miner
1
@B_Miner link jest zepsuty
GeneX
Wielkie dzięki @Mathew Drury
Catbuilts