3.6 Generate random vector from Multivariate Normal Distribution / 다변량 정규분포에서 샘플링
우선. vector X = (x1,x2,...,xd)를 d차원의 MVN(Multivariate normal dist)에서 추출해보자.
그럼 X~ Nd(mean, var)임을 알 수 있다.
여기서 matrix 연산을 위해서
mu = (mu1, mu2, ..., mud)^T
var = cov matrix (dxd)로 표현할 수 있다.
그럼 이제 우리가 원하는 평균 mu와 분산 sigma를 갖는 정규분포의 샘플을 만드는 과정에 대해서 공부해보자.
1. iid 조건을 갖는 vector Z를 생성한다.
즉 Z = (Z1, Z2, ..., Zd) 이고 iid standard normal variates이다.
서로 독립이고 같은 분포에서 나왔다는 말이다.
그다음
2. vector Z를 linear transform(선형변환)하는데 내가 원하는 평균인 mu와 분산 sigma를 갖도록 선형변환한다.
여기서 중요한 부분은
Z는 CZ + b 선형 변환을 통해
mu = C * mu + b 가 되고
var = C * sigma C^T가 된다.
때문에 우리는 우리가 원하는 정규분포의 분산에 대해서 C * sigma * C^T를 만족하는 C를 알아내야한다.
여기서 사용하는 방법이 바로 factorization, 우리말로는 인수분해, 방법으로는 선형대수에서는 spectral decomposition(고유값 분해)를 이용한다. 선형대수에서 배웠던 아주 반갑지만 지겨운 이름이라고 할 수 있겠다.
그럼 이제 Z를 표준정규분포에서 추출한 샘플이라고 가정해보자.
Z~ Nd(0,I_d) 일 것이고, ZQ + Jmu^T에서 Q는 우리가 원하는 분산 sigma를 factoring 한 값이다.
그럼 ZQ+Jmu^T ~ N(mu, Q^TQ) = N(mu, Sigma)가 된다.
정리하면
1. n x d 인 Z matrix를 N(0,1)인 표준정규분포에서 생성한다.
2. sigma 를 factoring한다. (sigma = Q^TQ인 Q를 구하라는 말.)
3. Z를 선형변환 하여 X를 구한다.
X = ZQ + Jmu^T (여기서 Q는 sigma를 factoring한 값, mu는 원하는 평균 값)
4. 그럼 X는 X~ Nd(mu, Sigma)를 따른다. !
안뇽.