12.3 분포 기반 문제 정의

실습 · 연습문제 2개

이분산 가우시안의 음의 로그우도 gaussian-nll

예측분포가 y∼N(μ,σ2)y \sim \mathcal{N}(\mu, \sigma^2)일 때, 관측값 하나의 음의 로그우도(NLL)는

−log⁡p(y∣μ,σ)=12log⁡(2πσ2)+(y−μ)22σ2-\log p(y \mid \mu, \sigma) = \frac{1}{2}\log(2\pi\sigma^2) + \frac{(y - \mu)^2}{2\sigma^2}

이다. 이분산 회귀에서는 샘플마다 μ\mu와 σ\sigma가 다르다.

  1. gaussian_nll(y, mu, sigma): 배열 y와, y와 같은 shape이거나 스칼라인 mu, sigma에 대한 평균 NLL. 입력은 리스트로 올 수도 있으니 np.asarray로 바꾸고, NumPy 브로드캐스팅으로 계산한다. sigma에 0 이하의 값이 있으면 ValueError를 낸다.
  2. best_sigma(residuals, grid): 모든 샘플이 같은 σ\sigma를 쓴다고 할 때, 후보 grid 중 평균 NLL을 가장 작게 만드는 σ\sigma

테스트는 best_sigma가 잔차의 제곱평균제곱근(RMS)에 가까운지 확인한다. 직접 미분해 보면 왜 그런지 알 수 있다.

Pinball loss로 분위수 찾기 pinball-loss

분위수 회귀의 손실인 pinball loss는 잔차 u=y−qu = y - q에 대해

ρτ(u)=u (τ−1[u<0])\rho_\tau(u) = u\,(\tau - \mathbb{1}[u < 0])

이다. 두 함수를 완성한다.

  1. pinball_loss(y, q, tau): 관측값 배열 y와 예측값 q(스칼라 또는 같은 shape의 배열)에 대한 평균 pinball loss
  2. best_constant(y, tau, grid): 후보값 배열 grid 중에서 pinball_loss(y, q, tau)를 가장 작게 만드는 상수 q

테스트는 best_constant가 표본의 tau 분위수에 가까운지 확인한다. τ=0.5\tau = 0.5일 때 pinball loss는 평균 절댓값 오차의 절반이라는 점도 확인한다.