EDUCATION/DSS Online 6기

DAY29 - 다변수정규분포

Kululu_ 2021. 3. 2. 10:11

다변수정규분포

- 확률변수벡터가 따를 수 있는 분포 중 하나로 모수로는 "평균벡터"와 "공분산행렬"이 필요합니다.

- 다변수정규분포의 확률밀도함수

$$ \mathcal{N}(x ; \mu, \Sigma) = \dfrac{1}{(2\pi)^{D/2} |\Sigma| ^{1/2}} \exp \left( -\dfrac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) \right) $$

$$ x \in \mathbf{R}^D \\ \mu \in \mathbf{R}^D \Sigma \in \mathbf{R}^{D \times D} $$

- 다변수정규분포는 파이썬에서는 scipy.stats의 multivariate_norm 클래스로 구현 가능합니다.

 

*numpy 패키지의 meshgrid함수는 좌표를 만들어낼 때 많이 사용하는데 다음과 같이 작동합니다.

첫 번째 인자로 들어온 x1은 벡터자체가 반복되어서 하나의 행렬을 이루고, 두 번째 인자로 들어온 x2는 벡터의 각 원소가 반복되어 하나의 벡터를 이룬 뒤 이를 모아 행렬을 만들게 됩니다.

 

이것이 좌표가 될 수 있는 이유는 이대로 플롯을 그리게 되면 각 행렬에서 같은 자리에 있는 원소들 끼리 쌍으로 묶이기 때문입니다.

(1,4), (2,4), (3,4), (1,5), ..., (2,7),(3,7) 까지 해서 결국 처음 x1,x2를 이용해 만들어낼 수 있는 모든 좌표가 그려지게 되는 것입니다.

 

*numpy패키지의 dstack함수는 3번째 축을 기준으로 데이터를 쌓는함수입니다. 만약 원본 데이터에 3번째 축이 없다면 자동으로 reshape을 이용해 3번째 축을 만들어냅니다.

2차원 데이터를 3차원으로 변형하게 되면 행렬의 각 원소들이 3번째 차원으로 들어가게 됩니다. 그 상태에서 3번째 축을 기준으로 쌓는다는 것은 행렬의 같은 자리 원소들끼리 쌓는다는 것과 같은 의미이므로 최종결과과 위와 같이 (1,4),(2,4), ... (3,7)로 나오게 됩니다.

 

 

다변수정규분포의 고유값분해

다변수정규분포의 모수 중 공분산행렬 $\Sigma$는 양의정부호인 대칭행렬이므로 대각화가능행렬입니다.

따라서 정밀도행렬 $\Sigma^{-1}$는 다음과 같이 분해가 가능합니다.

$$ \Sigma^{-1} = V\Lambda^{-1}V^T $$

 

다변수정규분포의 확률밀도함수는

$$ \mathcal{N}(x ; \mu, \Sigma) = \dfrac{1}{(2 \pi)^{D/2} |\Sigma| ^{1/2}} \exp \left( -\dfrac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) \right) $$

과 같기에 다음과 같이 표현할 수도 있습니다.

 

$$ \mathcal{N}(x) \propto \exp \left( -\dfrac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) \right) \\ = \exp \left( -\dfrac{1}{2} (x-\mu)^T V \Lambda^{-1} V^T (x-\mu) \right) \\ = \exp \left( -\dfrac{1}{2} (V^T(x-\mu))^T \Lambda^{-1} (V^T (x-\mu)) \right) \\ = \exp \left( -\dfrac{1}{2} (V^{-1}(x-\mu))^T \Lambda^{-1} (V^{-1} (x-\mu)) \right) \\ $$

 

이 때 $ x^{'} = V^{-1}(x-\mu) $라고 하게 되면

$$ \mathcal{N}(x) \propto \exp \left( -\dfrac{1}{2} x'^T \Lambda^{-1} x' \right) \\ \propto \exp \left( \dfrac{{x'}_1^2}{\lambda_1^2} + \dfrac{{x'}_2^2}{\lambda_2^2} + \cdots + \dfrac{{x'}_D^2}{\lambda_D^2} \right) $$

 

여기서 $exp$안에 있는 식은 타원을 의미하게 되고, 각 고유벡터들은 타원의 축을 각 고유값들은 타원의 폭을 의미하게 됩니다.

 

 

다변수정규분포의 조건부확률분포

- 다변수정규분포의 조건부확률분포 역시 다변수정규분포가 됩니다.

- 예를들어 5개의 변수로 이루어진 다변수정규분포에서 3개의 변수에 대한 값이 주어졌을 때 나머지 2개의 변수가 이루는 분포 역시 다변수정규분포가 되는 것입니다.

 

- 조건부확률분포 역시 다변수정규분포가 되므로 모수로 평균벡터와 공분산행렬을 갖게 되는데 그 값은 다음과 같습니다.

$ x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} $는 다변수벡터 중 값이 주어진 조건에 해당하는 변수들을 x2로, 그렇지 않은 나머지 변수들을 x1으로 나타낸 것입니다.

 

$x$를 나눈 것과 동일하게 원래의 평균벡터와 공분산행렬도 나눌 수 있습니다.

$$ \mu = \begin{bmatrix} \mu_1 \\ \mu_2 \end{bmatrix} $$

$$ \Sigma = \begin{bmatrix} \Sigma_{11} & \Sigma_{12} \\ \Sigma_{21} & \Sigma_{22} \\ \end{bmatrix} $$

$$ \Lambda = \Sigma^{-1} = \begin{bmatrix} \Lambda_{11} & \Lambda_{12} \\ \Lambda_{21} & \Lambda_{22} \\ \end{bmatrix} $$

 

이 때 조건부확률분포의 모수 중 기대값은

$$ \mu_{1|2} = \mu_1 -\Lambda_{11}^{-1}\Lambda_{12}(x_2-\mu_2) $$

 

조건부확률분포의 공분산행렬은

$$ \Sigma_{1|2} = \Lambda_{11}^{-1} = \Sigma_{11} − \Sigma_{12}\Sigma_{22}^{-1}\Sigma_{21} $$

 

 

다변수정규분포의 주변확률분포

- 다변수정규분포의 주변확률분포 역시 다변수정규분포가 됩니다.

- 주변확률분포는 다음과 같습니다.

$$ p(x_1) = \int p(x_1, x_2) dx_2 = \mathcal{N}(x_1; \mu_1, \Sigma_{11}) $$