이것은 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))
0 급 대
-2(-log(1+exp(pred))
이 두 도표는 비용면에서 비슷하지 않습니다. 누구든지 나를 이해하도록 도울 수 있습니까?
pred
로그 확률로 상기 손실 함수는 모두 클래스 균일하다.