수식이 깨질 경우 새로고침을 눌러주세요.¶
Probability for Data-Science-14¶
다변수 확률 모형 ③¶
- Categorical (Multinoulli)
- Multinomial
- Dirichlet
- ✓Multivariate Gaussian Normal
Multivariate Gaussian Normal(다변량 가우시안 정규 분포)¶
다변량 가우시안 정규 분포 혹은 간단히 다변량 정규 분포(MVN: Multivariate Normal)라고 한다.
복수의 확률 변수를 모형화하는데 가장 많이 사용되는 분포이다.
이 식에서 각 기호의 의미는 다음과 같다.
$$ 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| : \;\;\;\;\Sigma의\; 디터미넌트 = 스칼라\; 값 $$공분산 벡터의 역행렬 $\Sigma^{-1}$는 precision matrix 혹은 concentration matrix 라고도 한다.
scipy를 사용하여 다변수 정규 분포를 더 알아 보자.¶
SciPy의 stats 서브패키지에는 다변수 정규 분포를 위한
multivariate_normal
클래스가 있다.
mean
인수로 평균 벡터를,cov
인수로 공분산 행렬을 받는다.
2차원 다변수 정규 분포의 예를 몇가지 살펴보자.¶
Case_1¶
$$만약 \;\;\;\; \mu = \begin{bmatrix}2 \\ 3 \end{bmatrix}, \;\;\; \Sigma = \begin{bmatrix}1 & 0 \\ 0 & 1 \end{bmatrix} 이면, $$$$ | \Sigma| = 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}{2\pi} \exp \left( -\dfrac{1}{2} \left( (x_1 - 2)^2 + (x_2 - 3)^2 \right) \right) $$
이 확률 밀도 함수의 모양은 다음과 같다.¶
# -*- coding: utf-8 -*-
import seaborn as sns
import pandas as pd
import scipy as sp
import matplotlib as mpl
import matplotlib.pylab as plt
import numpy as np
%matplotlib inline
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 같은 shape의 벡터 → XX, YY 서로 같은 매트릭스로 변환
# meshgrid : 벡터를 행렬로 변환
XX, YY = np.meshgrid(xx, yy)
plt.grid(False)
plt.contourf(XX, YY, rv.pdf(np.dstack([XX, YY])))
plt.axis("equal")
plt.show()
찌그러진 정도가 적을수록( 원에 가까울 수록) → 상관계수 = 0
Case_2¶
$$ 만약,\;\;\;\; \mu = \begin{bmatrix}2 \\ 3 \end{bmatrix}, \;\;\; \Sigma = \begin{bmatrix}2 & 3 \\ 3 & 7 \end{bmatrix} 이면, $$$$ |\Sigma| = 5,\;\;\; \Sigma^{-1} = \begin{bmatrix}1.4 & -0.6 \\ -0.6 & 0.4 \end{bmatrix} $$$$ (x-\mu)^T \Sigma^{-1} (x-\mu) = \begin{bmatrix}x_1 - 2 & x_2 - 3 \end{bmatrix} \begin{bmatrix}1.4 & -0.6 \\ -0.6 & 0.4\end{bmatrix} \begin{bmatrix}x_1 - 2 \\ x_2 - 3 \end{bmatrix} = \dfrac{1}{10}\left(14(x_1 - 2)^2 - 12(x_1 - 2)(x_2 - 3) + 4(x_2 - 3)^2\right) $$$$ \mathcal{N}(x_1, x_2) = \dfrac{1}{20\pi} \exp \left( -\dfrac{1}{10}\left(7(x_1 - 2)^2 - 6(x_1 - 2)(x_2 - 3) + 2(x_2 - 3)^2\right) \right) $$이 확률 밀도 함수의 모양은 다음과 같다.¶
mu = [2, 3]
cov = [[2, 3],[3, 7]]
rv = sp.stats.multivariate_normal(mu, cov)
xx = np.linspace(0, 4, 120)
yy = np.linspace(1, 5, 150)
## xx, yy 같은 shape의 벡터 → XX, YY 서로 같은 매트릭스로 변환
# meshgrid : 벡터를 행렬로 변환
XX, YY = np.meshgrid(xx, yy)
plt.grid(False)
plt.contourf(XX, YY, rv.pdf(np.dstack([XX, YY])))
plt.axis("equal")
plt.show()
찌그러진 정도가 클수록 → 상관계수 = 1
찌그러진 정도가 적을수록( 원에 가까울 수록) → 상관계수 = 0
찌그러진 정도가 클수록 → 상관계수 = 1
다변수 정규 분포의 최적화¶
다변수 정규 분포를 모수에 대해 최적화하는 문제를 풀어보자.
- 어떤 함수에 로그를 취해도 최고점이나 최저점의 위치는 변하지 않는다.
다만, 폭이 좁아지고, 높이는 높아진다.
또한, 아래에서 보듯이 계산량이 줄어들기 때문에 로그를 취한 분포함수를 최적화를 한다.
$$ \log N(x|\mu, \Sigma) = -\dfrac{1}{2} \log|\Sigma| - \dfrac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) $$Log Gaussian Normal
$$ \log N(x|\mu, \Sigma) = \dfrac{1}{2} \log|\Lambda| - \dfrac{1}{2} (x-\mu)^T \Lambda (x-\mu) $$precision matrix $ \Lambda = \Sigma ^{-1} $
$$ \mu = \dfrac{1}{N}\sum_{i=1}^N x_i $$$$ \Sigma = \dfrac{1}{N}\sum_{i=1}^N (x_i-\mu)(x_i-\mu)^T $$위 함수를 미분하면 다음 변수에서 최적화가 된다.
$$ 이번에는\; 두\; 개의\; 다변수\; 정규\; 분포\; 확률\; 변수\; X,\; Y가\; 있을\; 경우를\; 생각해\; 보자.\; 두\; 확률\; 변수가\; 독립이며\; 모수\; \mu,\; \Lambda가\; 같다고\; 가정하자. $$$$ \\이\; 때\; 로그\; 정규\; 분포는\; 다음과\; 같다. $$$$ \begin{eqnarray} 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} $$
다변량 가우시안 정규분포를 좀 더 그려 보자.¶
from scipy.stats import multivariate_normal
XX, YY = np.mgrid[-5:5:500j, -2:2:200j]
rv = multivariate_normal([0.5, -0.2], [[2.0, 0.3], [0.3, 0.5]])
plt.grid(False)
plt.contour(XX, YY, rv.pdf(np.dstack((XX, YY))))
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(XX, YY, rv.pdf(np.dstack((XX, YY))))
Partitioned Multivariate Gaussian¶
$$ x = \begin{bmatrix} x_a \\ x_b \end{bmatrix} ,\;\; \mu = \begin{bmatrix} \mu_a \\ \mu_b \end{bmatrix} ,\;\; \Sigma = \begin{bmatrix} \Sigma_{aa} & \Sigma_{ab} \\ \Sigma_{ba} & \Sigma_{bb} \end{bmatrix} ,\;\; \Lambda = \begin{bmatrix} \Lambda_{aa} & \Lambda_{ab} \\ \Lambda_{ba} & \Lambda_{bb} \end{bmatrix} $$Linear Discriminant Analyis 때 활용
- Conditional distribution:
- Marginal distribution:
Chain Rule¶
$$ x_i는\; 서로\; 독립이므로\; 아래가\; 성립한다. $$$$ \begin{eqnarray} P(X_{1:N}|\theta) &=& P(X_1,X_2,X_3,\cdots,X_N|\theta) \\ &=& P(X_2,X_3,\cdots,X_N|\theta)\cdot P(X_1, \theta) \\ &=& P(X_3,\cdots,X_N|\theta)\cdot P(X_2, \theta)\cdot P(X_1, \theta) \\ &=& \vdots \\ &=& P(X_N|\theta)\cdot P(X_N-1|\theta)\cdots\cdot P(X_2, \theta)\cdot P(X_1, \theta) \\ &=& \prod_{i=1}^N P(X_i|\theta) \end{eqnarray} $$Chain Rule $$ P(X_{1:N}|\theta) = P(X_1|\theta) P(X_2|X_1, \theta) \cdots P(X_N|X_{1:N-1},\theta) = \prod_{i=1}^N P(X_i|\theta) $$
- likelyhood를 구할 때 주로 사용한다.