베이지안 계산
베이지안 추론에서 관심있는 건, 사전분포 $\pi(\theta)$가 주어졌을 때, 사후분포
$$E\left[ g(\theta) | y \right] = \frac{\int_{\Theta} g(\theta) p(y | \theta) \pi (\theta) d\theta}{\int_{\Theta} p(y|\theta) \pi(\theta) d\theta}$$
$g(\theta) = I_A (\theta)$: 신용구간을 구하겠다.
$g(\theta) = \theta$: 사후평균 $\hat{\theta}$ 을 구하겠다.
$g(\theta) = (\theta - \hat{\theta})^2)$: 사후분산을 구하겠다.
결국 우리가 관심있는 값을 구하려면 적분을 피할 수 없다는 뜻이다. 젠장.
1. 수치적분
사후평균 $g(\theta) = \theta$, 사후분산 $g(\theta) = (\theta - \hat{\theta})^2)$ 을 구하기 위해 테일러급수를 활용한 라플라스 방법(사후분포의 모양이 정규분포에 가까운 경우), 최빈값을 바탕으로 계산하는 뉴톤-랍슨 알고리즘 등을 사용할 수 있음.
2. 몬테칼로 방법
시작은 대수의 법칙. (law of large number). 실험 횟수가 증가하면 표본 평균이 모평균에 수렴한다는 이론.
즉, 주사위를 겁나 던지면 결국 1/6에 가까워진다는 의미.
그렇다면 "사후 분포에서 샘플을 겁나 뽑으면 실제랑 비슷하겠네?" 라는 접근에서 시작.
$$\lim_{m \to \infty} \frac{1}{m} \sum^{m}_{i=1} g(\theta_i) = E\left[ g(\theta) | y \right]$$
가능만 하다면 우리가 알고 싶은 $g(\theta |y)$ 의 분포에서 샘플을 무지하게 뽑아서 그 기대값으로 추정하고 싶은 굴뚝같은 마음.
하지만 인생과 사후분포는 호락호락하지 않다. $p(\theta |y)$가 어떻게 생겨먹은 줄 알고 샘플을 뽑나?
대신 그나마 가장 만만한 $h\(\theta)$ - 주표본함수로부터 표본을 뽑는 주표본기법(importance sampling method) 을 활용.
주표본함수 $h(\theta)$ 특: 랜덤표본 생성이 쉬움; 실제 사후분포 $p(\theta | y)$ 가 0일 때 얘는 0이 아님. 즉, 더 떠있음;
결국 몬테카를로 계산법이란, 사후 분포랑 비슷한 녀석 하나 데려다가 표본을 겁나 뽑고 평균내서 "기댓값 구함 ㅎ"
3. 마르코브 연쇄 몬테카를로
어차피 샘플을 뽑을 거라면 $h(\theta)$ 를 가정하는 불편한 짓 없이
하나 뽑고, 뽑힌 하나를 토대로 새로운 하나를 뽑고, 그렇게 다른 하나를 뽑고...
작은 촛불 하나 켜보니 주변이 밝아져 다른 초를 또 찾고 세 개가 되고 네 개가 되고 어둠은 사라져가고
○ 깁스 샘플러
다차원의 결합확률분포가 복잡하여 직접 랜덤표본을 생성하기 어려운 경우.
그러니까, $f(x, y)$ 가 너무 복잡해서 $f_X(x)$ 에서 X 를, $f_Y(y)$ 에서 Y 를 뽑아서 샘플링 하기 어려울 경우.
이 때에는 $Y_0=y_0$ 에서부터 $f(x|y)$ 를 가지고 "$y$가 있다 치고 나올 수 있는 $x_0$" 를 뽑고
그럼 $x_0$ 가 있으니 $f(y|x)$를 가지고 "$x$가 있다 치고 나올 수 있는 $y_1$" 를 뽑고...
이렇게 $Y_0, X_0, Y_1, X_1, ..., Y_k, X_k$ 를 뽑아나가는 과정을 반복.
그러니까 Y팀이랑 X팀에서 서로 아~싸 너! 하고 지목
그러니까, 이거 하려면 결합확률분포 joint prob. dist. $f(x, y)$ 에서 조건부확률분포 $f(x|y)$ 랑 $f(y|x)$ 를 구해야 함.
이제 $X$를 겁나 많이 뽑아봤으니, 여기에서 $m$ 개를 뽑은 다음에 평균을 내면
$$\hat{f}(x) = \frac{1}{m} \sum^{m}_{i=1} f(x|y_i)$$
로 $f(x)$를 추정할 수 있고,
기댓값 $E[g(X)]$가 관심사라면
$$E\left[ g(X) \right] \approx (1/m)\sum^{m}_{i=1}g(x_i)$$ 로 나올 수 있다.
다변수의 경우에는 그냥 여러번 하면 됨.
○ 메트로폴리스-해스팅스 알고리즘
목표 확률분포가 $f(y) \propto \pi(y)$ 혹은 $f(y)=c\pi(y)$ 와 같이 주어지고, $c$를 모르는 경우.
그러니까 적당한 후보생성밀도함수 $q(y|x)$ 를 잡고, 초깃값 $Y_0$을 정한 뒤,
전 단계에서 정해진 $Y_{m-1}$에 대해 $q(y|Y_{m-1})$로부터 후보난수 $Y^*$ 를 생성시키고,
이 때 이동확률 $alpha$ 는
$$\alpha = min\left[\frac{\pi(Y^*)/q(Y^* | Y_{m-1})}{\pi(Y_{m-1} / q(Y_{m-1}|Y^*)}, 1 \right]$$
균일분포 $U(0, 1)$로부터 난수 $u$를 생성했을 때, $u \le \alpha$ 이면 $Y_m = Y^*$ 으로 갱신
그렇지 않을 경우에는 $Y_m = Y_{m-1}$로 생성.
그러니까, 원래 함수를 잘 모르겠으면 적당~한 $q(y|x)$ 잡고,
일단 하나 뽑은 다음에 0~1사이에 아무 숫자보다 원래 있던 애와 얘가 데리고 온 친구의 비율이 작으면 OK 통과,
그렇지 않으면 다른 친구 또 데리고와.
$c$ 를 몰라도 결국 $\pi(Y^*) / \pi(Y_{m-1})$ 만 알면 되니까 적당~한 $q(y|x)$를 잡기만 하면 가능.
가장 일반적인 선택은 $q(y|x) = q_1(|y-x})$ 로 주어지는 확률 보행(random walk) 연쇄.
$q_1$ 은 밀도 함수, 후보난수 $y$ 는 $y=x+z$ 로 후보 = 현재 + Noise 형태로 주어짐.
○ 수렴진단
깁스샘플링, 메트로폴리스-해스팅스를 사용한 사후평균, 사후분산에 대한 계산이 정당성을 가지려면 관심모수 $\psi$에 대한 샘플러의 수렴성을 조사해야 한다. 이 때에는 겔만-루빈(Gelman-Rubin) 방법 사용.