Entropy

如何計算對數損失的梯度和粗麻布?(問題基於來自 xgboost 的 github 存儲庫的 numpy 示例腳本)

  • August 23, 2016

我想了解如何在xgboost 示例腳本中計算 logloss 函數的梯度和粗麻布。

我已經簡化了獲取 numpy 數組的函數,並生成了這些數組y_haty_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 提到的,因為實際損失應該是對數似然,所以我改變了結果的符號) $$ \frac{\partial f}{\partial p}=\frac{p-y}{\left(1-p\right)p}, $$ 和sigmoid 的導數是 $$ \frac{\partial p}{\partial x}=p(1-p), $$ 所以 $$ \frac{\partial f}{\partial x}=\frac{\partial f}{\partial p}\frac{\partial p}{\partial x}=p-y, $$ 和二階導數 $$ \frac{\partial^2 f}{\partial x^2}=\frac{\partial}{\partial x}(\frac{\partial f}{\partial x})=\frac{\partial}{\partial x}(p-y)=\frac{\partial p}{\partial x}=p(1-p). $$

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

comments powered by Disqus