Entropy
如何計算對數損失的梯度和粗麻布?(問題基於來自 xgboost 的 github 存儲庫的 numpy 示例腳本)
我想了解如何在xgboost 示例腳本中計算 logloss 函數的梯度和粗麻布。
我已經簡化了獲取 numpy 數組的函數,並生成了這些數組
y_hat
,y_true
它們是腳本中使用的值的示例。這是簡化的示例:
import numpy as np def loglikelihoodloss(y_hat, y_true): prob = 1.0 / (1.0 + np.exp(-y_hat)) grad = prob - y_true hess = prob * (1.0 - prob) return grad, hess y_hat = np.array([1.80087972, -1.82414818, -1.82414818, 1.80087972, -2.08465433, -1.82414818, -1.82414818, 1.80087972, -1.82414818, -1.82414818]) y_true = np.array([1., 0., 0., 1., 0., 0., 0., 1., 0., 0.]) loglikelihoodloss(y_hat, y_true)
對數損失函數是在哪裡.
梯度(相對於 p)是但是在代碼中.
同樣,二階導數(關於 p)是 但是在代碼中.
方程如何相等?
導數是關於 x (或
y_hat
在代碼中)而不是 p .正如您已經得出的那樣(編輯:正如 Simon.H 提到的,因為實際損失應該是負對數似然,所以我改變了結果的符號) ∂f∂p=p−y(1−p)p,
和sigmoid 的導數是 ∂p∂x=p(1−p),所以 ∂f∂x=∂f∂p∂p∂x=p−y,和二階導數 ∂2f∂x2=∂∂x(∂f∂x)=∂∂x(p−y)=∂p∂x=p(1−p).