ロジスティック損失関数の勾配


12

これに関する質問をします。

私はここで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))
}

ロジスティック損失関数は

log(1+e−yP)

ここで、は対数オッズ、はラベル(0または1)です。yPy

私の質問は、真の値と予測確率(対数オッズからとして計算)の差に等しい勾配(一次導関数)をどのように取得できるpreds <- 1/(1 + exp(-preds))かです。


そのためには、二乗誤差損失を使用する必要があります。あなたの表記は紛らわしく、投稿で定義する必要があります。場合は予測リスクである、そしての損失は、あなたが望むものです。私はログの奇数を意味するためにを決して使用しないので混乱しています。(y − p )2 pp(y−p)2p
— AdamO

P (y − f (x ))2 f (x )− ypは大文字のに固定されていました。それは奇数であり、質問で明確にマークされています。損失関数の勾配はであることは知っていますが、それはロジスティックではなく二乗損失です。P(y−f(x))2f(x)−y
— Ogurtsov

「勾配」と言うとき、どのような勾配を意味しますか?損失の勾配?式の導関数が線形差である場合、式は二次差または二乗誤差損失であるというのは、単純な数学的関係です。
— AdamO

はい、それはすべて損失の勾配についてです。損失関数が二乗誤差である場合、それは簡単です。この場合、損失関数はロジスティック損失(en.wikipedia.org/wiki/LogitBoost)であり、この関数の勾配と与えられたコード例の間の対応を見つけることができません。
— Ogurtsov 2016年

回答:


19

私の質問に対する私の答え:はい、ロジスティック損失の勾配は、真の値と予測確率の差に等しいことを示すことができます。ここで簡単な説明が見つかりました。

まず、ロジスティック損失は単に負の対数尤度であるため、対数尤度の式から始めることができます(p。74-この式は、負の対数尤度ではなく、対数尤度自体です)。

L=yi⋅log(pi)+(1−yi)⋅log(1−pi)

piはロジスティック関数です:、ここでは予測値ですロジスティック変換前(つまり、対数オッズ):pi=11+e−y^iy^i

L=yi⋅log(11+e−y^i)+(1−yi)⋅log(e−y^i1+e−y^i)

Wolfram Alphaを使用して得られた一次導関数:

L′=yi−(1−yi)⋅ey^i1+ey^i

掛けた後:e−y^ie−y^i

L′=yi⋅e−y^i+yi−11+e−y^i=yi⋅(1+e−y^i)1+e−y^i−11+e−y^i=yi−pi

符号を変更すると、ロジスティック損失関数の勾配の式が得られます。

pi−yi

2
ここでと呼んでいるのは、予測ではなく、予測子の線形結合です。一般化線形モデリングでは、という表記を使用し、この用語を「線形予測子」と呼びます。対数尤度(スコア)の導関数が間違っています。ベルヌーイは指数尤度を形成するため、分母には2乗項が必要です。スコアの形式は Yν1y^yν1pi(1−pi)(yi−pi)
— AdamO
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.