Fungsi Kerugian Deviance Binomial Scikit

11

Ini adalah fungsi kerugian penyimpangan binomial 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))))

Fungsi kerugian ini tidak sama antara kelas dengan 0 dan kelas dengan 1. Adakah yang bisa menjelaskan bagaimana ini dianggap OK.

Misalnya, tanpa bobot sampel, fungsi kerugian untuk kelas 1 adalah

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

vs untuk kelas 0

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

Plot untuk keduanya tidak sama dalam hal biaya. Adakah yang bisa membantu saya mengerti.

Kumaran
sumber

Jawaban:

17

Ada dua pengamatan yang diperlukan untuk memahami implementasi ini.

Yang pertama adalah bahwa predadalah tidak probabilitas, itu adalah peluang log.

Yang kedua adalah manipulasi aljabar standar dari penyimpangan binomial yang berjalan seperti ini. Biarkan menjadi peluang log, panggilan apa . Kemudian definisi penyimpangan binomial dari pengamatan adalah (hingga faktor )Psklearnpred2

ycatatan(hal)+(1-y)catatan(1-hal)=catatan(1-hal)+ycatatan(hal1-hal)

Sekarang amati bahwa dan (pemeriksaan cepat adalah untuk menjumlahkannya di kepala Anda, Anda akan mendapatkan ). Begituhal=eP1+eP1-hal=11+eP1

catatan(1-hal)=catatan(11+eP)=-catatan(1+eP)

dan

catatan(hal1-hal)=catatan(eP)=P

Jadi sama sekali, penyimpangan binomial sama

yP-catatan(1+eP)

Yang merupakan persamaan sklearnmenggunakan.

Matthew Drury
sumber
Terimakasih. Jika saya ganti preddengan peluang log, fungsi kerugian seragam untuk kedua kelas.
Kumaran
Pertanyaan yang sama muncul untuk saya baru-baru ini. Saya melihat gradientboostedmodels.googlecode.com/git/gbm/inst/doc/gbm.pdf halaman 10 di mana gradien penyimpangan terdaftar. Tapi sepertinya gradien yang mereka tunjukkan adalah untuk log-lik bukan log-lik negatif. Apakah ini benar - sepertinya cocok dengan penjelasan Anda di sini?
B_Miner
1
@ B_Miner tautannya rusak
GeneX
Terima kasih banyak @Matthew Drury
Catbuilts