다변수 가우시안 정규 분포

다변수 가우시안 정규 분포 혹은 간단히 다변수 정규 분포(MVN: Multivariate Normal)는 복수의 확률 변수를 모형화하는데 가장 많이 사용되는 분포이다.

$D$차원 다변수 정규 분포의 확률 밀도 함수는 다음과 같다.

외워야댐

$$ \mathcal{N}(x \mid \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} $ 공분산 벡터
  • $\Sigma^{-1} \in \mathbf{R}^{D\times D} $ 공분산 벡터의 역행렬

공분산 벡터의 역행렬 $\Sigma^{-1}$는 precision matrix 혹은 concentration matrix 라고도 한다.

SciPy의 다변수 정규 분포 지원

SciPy의 stats 서브패키지에는 다변수 정규 분포를 위한 multivariate_normal 클래스가 있다. mean 인수로 평균 벡터를, cov 인수로 공분산 행렬을 받는다.

다변수 정규 분포의 예

2차원($D=2$) 다변수 정규 분포의 예를 몇가지 살펴보자.

우선 2차원이므로 확률 변수 벡터는 $$ x = \begin{bmatrix}x_1 \\ x_2 \end{bmatrix} $$ 이다.

경우 1

만약

$$ \mu = \begin{bmatrix}2 \\ 3 \end{bmatrix}. \;\;\; \Sigma = \begin{bmatrix}1 & 0 \\ 0 & 1 \end{bmatrix} $$

이면

$$ |\Sigma|^{1/2} = 1. \;\;\; \Sigma^{-1} = \begin{bmatrix}1 & 0 \\ 0 & 1 \end{bmatrix} $$$$ (x-\mu)^T \Sigma^{-1} (x-\mu) = \begin{bmatrix}x_1 - 2 & x_2 - 3 \end{bmatrix} \begin{bmatrix}1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix}x_1 - 2 \\ x_2 - 3 \end{bmatrix} = (x_1 - 2)^2 + (x_2 - 3)^2 $$$$ \mathcal{N}(x_1, x_2) = \dfrac{1}{\sqrt{2\pi}} \exp \left( -\dfrac{1}{2} \left( (x_1 - 2)^2 + (x_2 - 3)^2 \right) \right) $$

이 확률 밀도 함수의 모양은 다음과 같다.


In [1]:
mu = [2, 3]
cov = [[1, 0], [0, 1]]
rv = sp.stats.multivariate_normal(mu, cov)
xx = np.linspace(0, 4, 120)
yy = np.linspace(1, 5, 150)
XX, YY = np.meshgrid(xx, yy)
plt.grid(False)
plt.contourf(XX, YY, rv.pdf(np.dstack([XX, YY])))
plt.axis("equal")
plt.show()


경우 2

만약

$$ \mu = \begin{bmatrix}2 \\ 3 \end{bmatrix}. \;\;\; \Sigma = \begin{bmatrix}2 & -1 \\ 2 & 4 \end{bmatrix} $$

이면 $$ | \Sigma | = 10,\;\;\; \Sigma^{-1} = \begin{bmatrix}0.4 & 0.1 \\ -0.2 & 0.2 \end{bmatrix} $$

$$ (x-\mu)^T \Sigma^{-1} (x-\mu) = \begin{bmatrix}x_1 - 2 & x_2 - 3 \end{bmatrix} \begin{bmatrix}0.4 & 0.1 \\ -0.2 & 0.2 \end{bmatrix} \begin{bmatrix}x_1 - 2 \\ x_2 - 3 \end{bmatrix} = \dfrac{1}{10}\left(4(x_1 - 2)^2 - (x_1 - 2)(x_2 - 3) + 2(x_2 - 3)^2\right) $$$$ \mathcal{N}(x_1, x_2) = \dfrac{1}{\sqrt{20\pi}} \exp \left( -\dfrac{1}{20}\left(4(x_1 - 2)^2 - (x_1 - 2)(x_2 - 3) + 2(x_2 - 3)^2\right) \right) $$

이 확률 밀도 함수의 모양은 다음과 같다.


In [2]:
mu = [2, 3]
cov = [[2, -1],[2, 4]]
rv = sp.stats.multivariate_normal(mu, cov)
xx = np.linspace(0, 4, 120)
yy = np.linspace(1, 5, 150)
XX, YY = np.meshgrid(xx, yy)
plt.grid(False)
plt.contourf(XX, YY, rv.pdf(np.dstack([XX, YY])))
plt.axis("equal")
plt.show()


다변수 정규 분포의 최적화

다변수 정규 분포를 모수에 대해 최적화하는 문제를 풀어보자. 어떤 함수에 로그를 취해도 최고점이나 최저점의 위치는 변하지 않기 때문에 문제를 쉽게 하기 위해 로그를 취한 분포함수를 최적화를 한다.

$$ \log \mathcal{N}(x|\mu, \Sigma) = -\dfrac{1}{2} \log|\Sigma| - \dfrac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) $$

기호를 단순하게 하기 위해 precision matrix $\Sigma ^{-1} $를 $ \Lambda$ 로 표시한다.

$$ \dfrac{1}{2} f = \log \mathcal{N}(x|\mu, \Sigma) = \dfrac{1}{2} \log|\Lambda| - \dfrac{1}{2} (x-\mu)^T \Lambda (x-\mu) $$

스칼라 함수 $f$ 를 평균 벡터 $\mu$로 미분하면 다음과 같다.

$$ \begin{eqnarray} \dfrac{\partial f}{\partial \mu} &=& \dfrac{\partial}{\partial \mu} \big( \log | \Lambda | \big) - \dfrac{\partial}{\partial \mu} \big( (x-\mu)^T \Lambda (x-\mu) \big) \\ &=& (\Lambda + \Lambda^T)(x-\mu) \\ &=& 0 \end{eqnarray} $$$$ \therefore \;\; \mu = x $$

이번에는 두 개의 다변수 정규 분포 확률 변수 $X$, $Y$가 있을 경우를 생각해 보자. 두 확률 변수가 독립이며 모수 $\mu$, $\Lambda$가 같다고 가정하자.

이 때 로그 정규 분포는 다음과 같다.

$$ \begin{eqnarray} \dfrac{1}{2}f &=& \log \left( \mathcal{N}(x|\mu, \Sigma)\mathcal{N}(y|\mu, \Sigma)\right) \\ &=& \log \mathcal{N}(x|\mu, \Sigma) + \log \mathcal{N}(y|\mu, \Sigma) \\ &=& - \log|\Sigma| - \dfrac{1}{2} (x-\mu)^T \Lambda (x-\mu) - \dfrac{1}{2} (y-\mu)^T \Lambda (y-\mu) \end{eqnarray} $$

이 함수 $f$를 평균 벡터 $\mu$와 precision matrix $\Lambda$ 로 미분하면 다음과 같다.

$$ \begin{eqnarray} \dfrac{\partial f}{\partial \mu} &=& \dfrac{\partial}{\partial \mu} \big( 2\log | \Lambda | \big) - \dfrac{\partial}{\partial \mu} \big( (x-\mu)^T \Lambda (x-\mu) \big) - \dfrac{\partial}{\partial \mu} \big( (y-\mu)^T \Lambda (y-\mu) \big) \\ &=& 2(\Lambda + \Lambda^T)(x-\mu) + (\Lambda + \Lambda^T)(y-\mu) \\ &=& 0 \end{eqnarray} $$$$ \therefore \;\; \mu = \dfrac{x + y}{2} $$$$ \begin{eqnarray} \dfrac{\partial f}{\partial \Lambda} &=& \dfrac{\partial}{\partial \Lambda} \big( \log | 2\Lambda | \big) - \dfrac{\partial}{\partial \Lambda} \big( (x-\mu)^T \Lambda (x-\mu) \big) - \dfrac{\partial}{\partial \Lambda} \big( (y-\mu)^T \Lambda (y-\mu) \big) \\ &=& (2\Lambda^{-1})^T - \dfrac{\partial}{\partial \Lambda} \left( \text{tr} \left( (x-\mu)(x-\mu)^T \Lambda \right) \right) - \dfrac{\partial}{\partial \Lambda} \left( \text{tr} \left( (y-\mu)(y-\mu)^T \Lambda \right) \right) \\ &=& 2\Sigma^T - ((x-\mu)(x-\mu)^T)^T - ((y-\mu)(y-\mu)^T)^T \\ &=& 0 \end{eqnarray} $$$$ \therefore \;\; \Lambda = \dfrac{1}{2} \left( (x-\mu)(x-\mu)^T + (y-\mu)(y-\mu)^T \right) $$