studies

3.6 Generate random vector from Multivariate Normal Distribution / 다변량 정규분포에서 샘플링

Abokadoh 2023. 10. 18. 11:42

우선. 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)를 따른다. !

 

안뇽.