Saya akan mengajukan pertanyaan terkait dengan ini .
Saya menemukan contoh penulisan fungsi kehilangan kustom untuk xgboost di sini :
loglossobj <- function(preds, dtrain) {
# dtrain is the internal format of the training data
# We extract the labels from the training data
labels <- getinfo(dtrain, "label")
# We compute the 1st and 2nd gradient, as grad and hess
preds <- 1/(1 + exp(-preds))
grad <- preds - labels
hess <- preds * (1 - preds)
# Return the result as a list
return(list(grad = grad, hess = hess))
}
Fungsi kerugian logistik adalah
di mana adalah peluang-log dan adalah label (0 atau 1).y
Pertanyaan saya adalah: bagaimana kita bisa mendapatkan gradien (turunan pertama) sama dengan perbedaan antara nilai sebenarnya dan probabilitas yang diprediksi (dihitung dari log-odds sebagai preds <- 1/(1 + exp(-preds))
)?
Jawaban:
Jawaban saya untuk pertanyaan saya: ya, dapat ditunjukkan bahwa gradien untuk kehilangan logistik sama dengan perbedaan antara nilai sebenarnya dan probabilitas yang diprediksi. Penjelasan singkat ditemukan di sini .
Pertama, kehilangan logistik hanyalah log-likelihood negatif, jadi kita bisa mulai dengan ekspresi untuk log-likelihood ( p. 74 - ungkapan ini adalah log-likelihood itu sendiri, bukan log-likelihood negatif):
Derivatif pertama diperoleh dengan menggunakan Wolfram Alpha:
Setelah mengubah tanda kami memiliki ekspresi untuk gradien fungsi kehilangan logistik:
sumber