Logistic损失函数的梯度


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))
}

物流损失函数为

ØG1个+Ë-ÿP

其中是对数奇数,是标签(0或1)。Pÿ

我的问题是:如何获得仅等于真实值与预测概率(由对数奇数计算为preds <- 1/(1 + exp(-preds)))之间的差的梯度(一阶导数)?


您应该使用平方误差损失来实现这一目标。您的符号令人困惑,应在帖子中定义。如果是预测的风险,那么损失就是您想要的。我很困惑,因为我们从不使用来表示对数奇数。y p 2 ppÿ-p2p
AdamO

P Ý - ˚F X 2 ˚F X - ÿp固定资本。它是对数奇数,并且在问题中已清楚标记。我知道损失函数梯度是,但这是平方损失,而不是逻辑损失。Pÿ-FX2FX-ÿ
Ogurtsov

当您说“梯度”时,您指的是什么梯度?梯度的损失?这是一个简单的数学关系,如果表达式的导数是线性差,则表达式是二次差或平方误差损失。
AdamO

是的,这全都与损失的梯度有关。很简单,当损失函数为平方误差时。在这种情况下,损失函数为逻辑损失(en.wikipedia.org/wiki/LogitBoost),我找不到该函数的梯度与给定代码示例之间的对应关系。
Ogurtsov

Answers:


19

我对这个问题的回答是:是的,可以证明逻辑损失的梯度等于真实值与预测概率之间的差。在这里找到简要说明。

首先,逻辑损失仅仅是对数似然的负数,因此我们可以从对数似然的表达式开始(第74页 -此表达式本身就是对数似然,而不是对数似然):

大号=ÿ一世ØGp一世+1个-ÿ一世ØG1个-p一世

是逻辑函数: p i = 1p一世,其中 ÿ被预测值逻辑变换之前(即,数优势比):p一世=1个1个+Ë-ÿ^一世ÿ^一世

大号=ÿ一世ØG1个1个+Ë-ÿ^一世+1个-ÿ一世ØGË-ÿ^一世1个+Ë-ÿ^一世

使用Wolfram Alpha获得的一阶导数:

大号=ÿ一世-1个-ÿ一世Ëÿ^一世1个+Ëÿ^一世

乘以后Ë-ÿ^一世Ë-ÿ^一世

大号=ÿ一世Ë-ÿ^一世+ÿ一世-1个1个+Ë-ÿ^一世=ÿ一世1个+Ë-ÿ^一世1个+Ë-ÿ^一世-1个1个+Ë-ÿ^一世=ÿ一世-p一世

更改符号后,我们得到逻辑损失函数的梯度表达式:

p一世-ÿ一世

2
ÿ^ÿν1个p一世1个-p一世ÿ一世-p一世
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.