R
邏輯損失函數的梯度
我會問一個與此相關的問題。
我在這裡找到了為 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 獲得的一階導數:
乘以後:
改變符號後,我們得到邏輯損失函數梯度的表達式: