这是scikit GradientBoosting的二项式偏差损失函数,
def __call__(self, y, pred, sample_weight=None):
"""Compute the deviance (= 2 * negative log-likelihood). """
# logaddexp(0, v) == log(1.0 + exp(v))
pred = pred.ravel()
if sample_weight is None:
return -2.0 * np.mean((y * pred) - np.logaddexp(0.0, pred))
else:
return (-2.0 / sample_weight.sum() *
np.sum(sample_weight * ((y * pred) - np.logaddexp(0.0, pred))))
在具有0的类和具有1的类之间,这种损失函数并不相似。任何人都可以解释这是如何确定的。
例如,在没有样本权重的情况下,类别1的损失函数为
-2(pred - log(1 + exp(pred))
vs 0级
-2(-log(1+exp(pred))
这两个图在成本上并不相似。谁能帮我理解。
pred
对数赔率代替,则损失函数对于两个类别都是统一的。