Esta es la función de pérdida de desviación binomial de GradientBoosting de scikit,
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))))
Esta pérdida de funciones no es similar entre la clase con 0 y la clase con 1. ¿Alguien puede explicar cómo esto se considera correcto?
Por ejemplo, sin peso de muestra, la función de pérdida para la clase 1 es
-2(pred - log(1 + exp(pred))
vs para la clase 0
-2(-log(1+exp(pred))
La trama de estos dos no es similar en términos de costo. ¿Alguien puede ayudarme a entender?
pred
con probabilidades de registro, la función de pérdida es uniforme para ambas clases.