C'est la fonction de perte de déviance binomiale de 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))))
Cette fonction de perte n'est pas similaire entre la classe avec 0 et la classe avec 1. Quelqu'un peut-il expliquer comment cela est considéré comme OK.
Par exemple, sans poids d'échantillon, la fonction de perte pour la classe 1 est
-2(pred - log(1 + exp(pred))
vs pour la classe 0
-2(-log(1+exp(pred))
L'intrigue de ces deux ne sont pas similaires en termes de coût. Quelqu'un peut-il m'aider à comprendre.
pred
par log odds, la fonction de perte est uniforme pour les deux classes.