R

邏輯損失函數的梯度

  • June 16, 2016

我會問一個與相關的問題。

我在這裡找到了為 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)。

我的問題是:我們如何才能讓梯度(一階導數)簡單地等於真實值和預測概率之間的差異(從對數賠率計算為preds <- 1/(1 + exp(-preds)))?

我對我的問題的回答:是的,可以證明邏輯損失的梯度等於真實值和預測概率之間的差異。在這裡找到了簡要說明。

首先,邏輯損失只是負對數似然,所以我們可以從對數似然的表達式開始(第 74 頁- 這個表達式是對數似然本身,而不是負對數似然):

是邏輯函數:, 在哪裡是邏輯轉換前的預測值(即對數賠率):

使用 Wolfram Alpha 獲得的一階導數:

乘以後:

改變符號後,我們得到邏輯損失函數梯度的表達式:

引用自:https://stats.stackexchange.com/questions/219241

comments powered by Disqus