我想问一个与此有关的问题。
我在这里找到了为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))
)之间的差的梯度(一阶导数)?
您应该使用平方误差损失来实现这一目标。您的符号令人困惑,应在帖子中定义。如果是预测的风险,那么损失就是您想要的。我很困惑,因为我们从不使用来表示对数奇数。(y − p )2 p
—
AdamO
P (Ý - ˚F (X ))2 ˚F (X )- ÿ固定资本。它是对数奇数,并且在问题中已清楚标记。我知道损失函数梯度是,但这是平方损失,而不是逻辑损失。
—
Ogurtsov
当您说“梯度”时,您指的是什么梯度?梯度的损失?这是一个简单的数学关系,如果表达式的导数是线性差,则表达式是二次差或平方误差损失。
—
AdamO
是的,这全都与损失的梯度有关。很简单,当损失函数为平方误差时。在这种情况下,损失函数为逻辑损失(en.wikipedia.org/wiki/LogitBoost),我找不到该函数的梯度与给定代码示例之间的对应关系。
—
Ogurtsov