9 · 표집법
실제로 사용하는 확률 모델 중 많은 것은 정확한 추론이 매우 까다롭다. 결정론적 근사 외에도, 수치적 표집에 기반한 근사 추론이 널리 쓰이며 강력하다.

9.1 기본적인 표집 알고리즘
- 표집법의 목표는 함수
의 분포 에 대한 기댓값을 구하는 것이다. 에서 독립 표본 을 뽑아 유한 합으로 근사한다.
추정량의 분산은
9.1.1 표준 분포 (역변환 표집)
균등 변수 를 로 변환하면 이다. 원하는 의 누적 분포 의 역함수로 변환하면 된다.
예컨대 지수 분포exponential distribution

그림 9.1 · 역변환 표집.
실습 · 역변환 표집 (지수 분포)
균등 난수
import numpy as np
rng = np.random.default_rng(0); lam = 1.5; L = 200000
z = rng.uniform(0, 1, L)
y = -np.log(1-z)/lam # y = -λ⁻¹ ln(1-z)
print(f"표본 평균={y.mean():.4f} (이론 1/λ={1/lam:.4f})")
print(f"표본 분산={y.var():.4f} (이론 1/λ²={1/lam**2:.4f})")9.1.2 거부 표집법
- 거부 표집법rejection sampling은 정규화 상수를 모르는
에서 표집한다. 표집이 쉬운 제안 분포proposal distribution 와 인 상수 를 잡는다. 에서 을 뽑고 에서 을 뽑아, 이면 거부한다. 승인된 표본은 를 따르며, 승인 확률은

그림 9.2 · 거부 표집법.
실습 · 거부 표집법
import numpy as np
rng = np.random.default_rng(1)
def ptil(z): # 정규화 안 된 목표 p̃(z)
return 0.6*np.exp(-(z+1)**2/(2*0.5**2)) + 0.4*np.exp(-(z-1.5)**2/(2*0.4**2))
sq = 1.5
def q(z): return np.exp(-z**2/(2*sq**2))/np.sqrt(2*np.pi*sq**2)
zg = np.linspace(-5, 5, 2001); dz = zg[1]-zg[0]
k = np.max(ptil(zg)/q(zg))*1.02 # kq(z) ≥ p̃(z)
L = 200000; z0 = rng.normal(0, sq, L); u = rng.uniform(0, k*q(z0), L)
acc = u <= ptil(z0); zs = z0[acc]
Zp = np.sum(ptil(zg))*dz # ∫p̃ (수치 적분)
print(f"k={k:.3f}, 승인율={acc.mean():.3f} (이론 (1/k)∫p̃={Zp/k:.3f})")
truemean = np.sum(zg*ptil(zg))*dz/Zp
print(f"승인 표본 평균={zs.mean():.3f} (참 평균={truemean:.3f})")9.1.3 중요도 표집법
- 중요도 표집법importance sampling은 표본을 뽑는 대신 기댓값을 직접 근사한다. 제안 분포
에서 표본을 뽑고 중요도 가중치importance weight 로 보정한다.
가중치는 잘못된 분포에서 표집해 생긴 편향을 바로잡는다.

그림 9.3 · 중요도 표집법. 표본을
실습 · 중요도 표집법
import numpy as np
rng = np.random.default_rng(2)
L = 200000; sq = 1.5; z = rng.normal(0, sq, L) # 제안 q=N(0,1.5²)에서 표집
pz = np.exp(-z**2/2)/np.sqrt(2*np.pi) # 목표 p=N(0,1)
qz = np.exp(-z**2/(2*sq**2))/np.sqrt(2*np.pi*sq**2)
w = pz/qz # 중요도 가중치
print(f"E_p[z²] 추정={np.mean(w*z**2):.4f} (참=1.0)")
print(f"E_p[z⁴] 추정={np.mean(w*z**4):.4f} (참=3.0)")9.1.4 표집법과 EM 알고리즘
- EM의 E 단계를 해석적으로 풀기 어려우면 표집으로 근사한다. M 단계에서 최적화하는 완전 데이터 로그 가능도의 기댓값을 표본 합으로 근사한다.
이를 몬테 카를로 EMMonte Carlo EM이라 하고, 각 E 단계에서 표본 하나만 뽑으면 확률적 EMstochastic EM이 된다. 완전 베이지안에서는 매개변수 사후 분포에서도 표집해야 하며, 데이터 증가data augmentation(IP) 알고리즘이 이를 다룬다.
IP 알고리즘
I 단계(대치) —
를 이용해, 현재 에서 을 뽑고 이어서 에서 을 뽑는다.P 단계(사후) — 표본
로 매개변수 사후 분포를 갱신한다.
9.2 마르코프 연쇄 몬테 카를로
- 거부·중요도 표집은 고차원에서 한계가 있다. 마르코프 연쇄 몬테 카를로Markov chain Monte Carlo; MCMC는 현재 상태
에 의존하는 제안 분포 로 후보를 뽑아 표본 열 가 마르코프 연쇄를 이루게 한다. 메트로폴리스Metropolis 알고리즘은 대칭 제안 분포를 가정하고 후보를 다음 확률로 승인한다.
9.2.1 메트로폴리스–헤이스팅스 알고리즘
- 메트로폴리스–헤이스팅스Metropolis–Hastings는 비대칭 제안 분포로 일반화한다. 제안 분포
의 비대칭성을 승인 확률에서 보정한다.
실습 · 메트로폴리스–헤이스팅스
양봉 목표 분포에 무작위 걷기 제안으로 MCMC를 돌려 표본 평균·분산이 참값에 수렴함을 확인합니다(초기 구간은 버림).
import numpy as np
rng = np.random.default_rng(3)
def ptil(z): return 0.5*np.exp(-(z+2)**2/(2*0.5**2)) + 0.5*np.exp(-(z-2)**2/(2*0.5**2))
L = 100000; step = 1.5; z = 0.0; samples = np.empty(L); nacc = 0
for t in range(L):
zstar = z + rng.normal(0, step) # 대칭 무작위 걷기 제안
if rng.uniform() < min(1, ptil(zstar)/ptil(z)): # 메트로폴리스 승인
z = zstar; nacc += 1
samples[t] = z
s = samples[2000:] # 초기 구간(번인) 제거
print(f"승인율={nacc/L:.3f}")
print(f"표본 평균={s.mean():+.3f} (참 0), 표본 분산={s.var():.3f} (참 {0.25+4:.2f})")9.3 기브스 표집법
- 기브스 표집법Gibbs sampling은 메트로폴리스–헤이스팅스의 특수 경우로, 각 변수를 나머지 변수에 대한 조건부 분포에서 차례로 갱신한다. 각 갱신의 승인 확률이 항상
이라 거부가 없다.
기브스 표집법
을 초기화한다. 에 대해 각 변수를 조건부 분포에서 차례로 갱신한다.
실습 · 기브스 표집법 (이변량 가우시안)
상관
import numpy as np
rng = np.random.default_rng(4)
rho = 0.8; L = 100000; z1 = z2 = 0.0; S = np.empty((L, 2))
for t in range(L):
z1 = rng.normal(rho*z2, np.sqrt(1-rho**2)) # z1 | z2 ~ N(ρz2, 1-ρ²)
z2 = rng.normal(rho*z1, np.sqrt(1-rho**2)) # z2 | z1 ~ N(ρz1, 1-ρ²)
S[t] = [z1, z2]
S = S[1000:] # 번인 제거
c = np.cov(S.T)
print("표본 평균 :", np.round(S.mean(0), 3).tolist(), "(참 [0, 0])")
print(f"표본 공분산: [[{c[0,0]:.3f}, {c[0,1]:.3f}], [{c[1,0]:.3f}, {c[1,1]:.3f}]] (참 대각 1, 비대각 {rho})")9.4 조각 표집법
- 메트로폴리스는 단계 크기에 민감하다. 조각 표집법slice sampling은 분포에 맞춰 단계 크기를 자동 조절한다. 변수
에 보조 변수 를 더해 결합 공간에서 균등 표집한다.
에 대해 주변화하면 이므로, 에서 표집해 를 버리면 표본을 얻는다. 를 고정해 에서 를 뽑고, 를 고정해 조각 에서 를 균등 표집하는 것을 번갈아 한다.


그림 9.4 · 조각 표집법. (a)
연습문제
문제 9.1
풀이
문제 9.2
풀이
누적 분포
즉 균등 변수
문제 9.3
풀이
따라서
여기서