これはscikit GradientBoostingの2項偏差偏差関数です。
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のクラスの間で類似していません。これがどのようにOKと見なされるかを誰かが説明できますか
たとえば、サンプルの重さがなければ、クラス1の損失関数は次のようになります。
-2(pred - log(1 + exp(pred))
クラス0の場合
-2(-log(1+exp(pred))
これら2つのプロットは、コストの点で似ていません。誰かが私を理解するのを手伝ってくれる?
pred
対数オッズで置き換えると、損失関数は両方のクラスで均一になります。