Scikit Binomial Deviance Loss-Funktion


11

Dies ist die Binomial-Deviance-Loss-Funktion von 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))))

Diese Verlustfunktion ist zwischen Klasse mit 0 und Klasse mit 1 nicht ähnlich. Kann jemand erklären, wie dies als OK angesehen wird.

Beispielsweise ist die Verlustfunktion für Klasse 1 ohne Stichprobengewicht

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

vs für Klasse 0

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

Die Handlung für diese beiden ist in Bezug auf die Kosten nicht ähnlich. Kann mir jemand helfen zu verstehen.

Antworten:


17

Es sind zwei Beobachtungen erforderlich, um diese Implementierung zu verstehen.

Der erste ist , dass predist nicht eine Wahrscheinlichkeit, es ist ein Protokoll Chancen ist.

Die zweite ist eine standardmäßige algebraische Manipulation der Binomialabweichung, die so abläuft. Sei die Log-Quote, was ruft . Dann ist die Definition der binomialen Abweichung einer Beobachtung (bis zu einem Faktor von )Psklearnpred2

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

Beachten Sie nun, dass und (eine schnelle Überprüfung besteht darin, sie zu summieren in deinem Kopf bekommst du ). Damitp=eP1+eP1p=11+eP1

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

und

log(p1p)=log(eP)=P

Insgesamt ist also die binomische Abweichung gleich

yPlog(1+eP)

Welches ist die Gleichung sklearnverwendet.


Danke. Wenn ich durch predLog Odds ersetze , ist die Verlustfunktion für beide Klassen einheitlich.
Kumaran

Die gleiche Frage kam mir kürzlich. Ich habe mir gradientboostedmodels.googlecode.com/git/gbm/inst/doc/gbm.pdf Seite 10 angesehen, auf der der Gradient der Abweichung aufgeführt ist. Aber es scheint, dass der Gradient, den sie zeigen, für den logarithmischen Lik ist, nicht für den negativen logarithmischen Lik. Ist das richtig - es scheint Ihrer Erklärung hier zu entsprechen?
B_Miner

1
@B_Miner die Verbindung ist unterbrochen
GeneX

Vielen Dank @Matthew Drury
Catbuilts
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.