Scikit 이항 편차 손실 함수


11

이것은 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))

이 두 도표는 비용면에서 비슷하지 않습니다. 누구든지 나를 이해하도록 도울 수 있습니까?

답변:


17

이 구현을 이해하려면 두 가지 관찰이 필요합니다.

첫 번째는 즉 pred입니다 되지 는 로그 확률이고, 확률.

두 번째는 이항 이탈의 표준 대수 조작입니다. 하자 로그 확률 수, 무슨 호출 . 그런 다음 관측치의 이항 이탈의 정의는 ( 배까지 )Psklearnpred2

ylog(p)+(1y)log(1p)=log(1p)+ylog(p1p)

이제 및 (빠른 확인은 이들을 합산하는 것임) 당신의 머리에, 당신은 얻을 것이다 ). 그래서p=eP1+eP1p=11+eP1

log(1p)=log(11+eP)=log(1+eP)

log(p1p)=log(eP)=P

따라서 이항 편차는

yPlog(1+eP)

어떤 방정식 sklearn을 사용 하고 있습니까 ?


감사합니다. 난 바꾸면 pred로그 확률로 상기 손실 함수는 모두 클래스 균일하다.
Kumaran 2016 년

이 같은 질문이 최근에 나에게 나타났습니다. 나는보고 있었다 gradientboostedmodels.googlecode.com/git/gbm/inst/doc/gbm.pdf의 일탈의 기울기가 목록에 10 페이지. 그러나 그들이 보여주는 기울기는 음의 log-lik이 아닌 log-lik에 대한 것 같습니다. 이것이 맞습니까? 여기에 설명과 일치하는 것 같습니다.
B_Miner

1
@B_Miner 링크가 끊어졌습니다
GeneX

고마워 @Matthew Drury
Catbuilts
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.