これに関する質問をします。
私はここでxgboostのカスタム損失関数を書く例を見つけました:
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))
}
ロジスティック損失関数は
ここで、は対数オッズ、はラベル(0または1)です。y
私の質問は、真の値と予測確率(対数オッズからとして計算)の差に等しい勾配(一次導関数)をどのように取得できるpreds <- 1/(1 + exp(-preds))
かです。
そのためには、二乗誤差損失を使用する必要があります。あなたの表記は紛らわしく、投稿で定義する必要があります。場合は予測リスクである、そしての損失は、あなたが望むものです。私はログの奇数を意味するためにを決して使用しないので混乱しています。(y − p )2 p
—
AdamO
P (y − f (x ))2 f (x )− yは大文字のに固定されていました。それは奇数であり、質問で明確にマークされています。損失関数の勾配はであることは知っていますが、それはロジスティックではなく二乗損失です。
—
Ogurtsov
「勾配」と言うとき、どのような勾配を意味しますか?損失の勾配?式の導関数が線形差である場合、式は二次差または二乗誤差損失であるというのは、単純な数学的関係です。
—
AdamO
はい、それはすべて損失の勾配についてです。損失関数が二乗誤差である場合、それは簡単です。この場合、損失関数はロジスティック損失(en.wikipedia.org/wiki/LogitBoost)であり、この関数の勾配と与えられたコード例の間の対応を見つけることができません。
—
Ogurtsov 2016年