[확률] 8.6 다변수정규분포

JKH·2024년 11월 24일
0

확률

목록 보기
17/25

✏️ 데이터 사이언스 스쿨에서 공부한 내용입니다.

DD차원 다변수정규분포(MVN: multivariate Gaussian normal distribution) 의 확률밀도함수는 평균벡터 μ\mu 와 공분산행렬 Σ\Sigma 라는 두 개의 모수를 가지며 다음과 같은 수식으로 정의한다.

N(x;μ,Σ)=1(2π)D/2Σ1/2exp(12(xμ)TΣ1(xμ))(8.6.1)\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) \tag{8.6.1}
  • xRDx \in \mathbf{R}^D 확률변수벡터
  • μRD\mu \in \mathbf{R}^D 평균벡터
  • ΣRD×D\Sigma \in \mathbf{R}^{D\times D} 공분산행렬

다변수정규분포에서 공분산행렬은 양의 정부호인 대칭행렬이어야 한다. 따라서 역행렬이 항상 존재한다. 공분산행렬의 역행렬 Σ1\Sigma^{-1}을 정밀도행렬(precision matrix)이라고 한다.

💡 Recap 💡

  • 양의 정부호: 영 벡터가 아닌 모든 벡터 xx에 대해 xTAx>0x^T A x > 0
  • 공분산: 두 확률 변수에 대해 '편차 곱의 평균'을 적용한 수식 떠올리기!
  • 공분산행렬: MM개의 확률 변수로 이루어진 확률 벡터 표본이 NN개 있을 때, iijj열의 성분이 ii번째 확률 변수와 jj번째 확률 변수의 공분산으로 이루어진 행렬을 공분산행렬이라 한다.
    S=1NX0TX0S = \dfrac{1}{N} X_0^TX_0 으로 계산할 수 있으며, X0=X1NxˉT=X1N1N1NTXX_0 = X - \mathbf{1_N}\bar{x}^T = X - \dfrac{1}{N} \mathbf{1_N}\mathbf{1_N}^TX 이다.

예제

다음과 같은 2차원(D=2D=2) 다변수정규분포를 생각하자. 2차원이므로 확률변수벡터는

x=[x1x2](8.6.2)x = \begin{bmatrix}x_1 \\ x_2 \end{bmatrix} \tag{8.6.2}

이다.

만약 모수가 다음과 같다고 하자.

μ=[23].      Σ=[1001](8.6.3)\mu = \begin{bmatrix}2 \\ 3 \end{bmatrix}. \;\;\; \Sigma = \begin{bmatrix}1 & 0 \\ 0 & 1 \end{bmatrix} \tag{8.6.3}

공분산행렬로부터 x1x_1x2x_2가 독립이라는 것을 알 수 있다. 확률밀도함수를 구하면 다음과 같다.

Σ=1.      Σ1=[1001](8.6.4)| \Sigma| = 1. \;\;\; \Sigma^{-1} = \begin{bmatrix}1 & 0 \\ 0 & 1 \end{bmatrix} \tag{8.6.4}
(xμ)TΣ1(xμ)=[x12x23][1001][x12x23]=(x12)2+(x23)2(8.6.5)\begin{aligned} (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 \end{aligned} \tag{8.6.5}
N(x1,x2)=12πexp(12((x12)2+(x23)2))(8.6.6)\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) \tag{8.6.6}

확률밀도함수값이 같은 등고선은 원이 된다.

(x12)2+(x23)2=r2(8.6.7)(x_1 - 2)^2 + (x_2 - 3)^2 = r^2 \tag{8.6.7}

사이파이의 stats 서브패키지는 다변수정규분포를 위한 multivariate_normal() 명령을 제공한다. mean 인수로 평균벡터를, cov 인수로 공분산행렬을 받는다. multivariate_normal() 명령으로 위 확률밀도함수를 그리고 랜덤 표본을 생성하면 다음 그림과 같다.

mu = [2, 3]
cov = [[1, 0], [0, 1]]

# 다변수 정규분포, 샘플링
rv = sp.stats.multivariate_normal(mu, cov)
X = rv.rvs(20000)

xx = np.linspace(-1, 6, 120)
yy = np.linspace(-1, 6, 150)
XX, YY = np.meshgrid(xx, yy)

plt.scatter(X[:, 0], X[:, 1], s=1)
plt.contour(XX, YY, rv.pdf(np.dstack([XX, YY])))
plt.axis("equal")
plt.xlim(0, 4)
plt.ylim(2, 4)
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
plt.title("이차원 다변수정규분포의 예")
plt.show()

예제

만약 모수가 다음과 같다고 하자. 공분산행렬로부터 x1x_1x2x_2가 양의 상관관계가 있다는 것을 알 수 있다.

μ=[23].      Σ=[2337](8.6.8)\mu = \begin{bmatrix}2 \\ 3 \end{bmatrix}. \;\;\; \Sigma = \begin{bmatrix}2 & 3 \\ 3 & 7 \end{bmatrix} \tag{8.6.8}

이 때 확률밀도함수는 다음과 같다.

Σ=5,      Σ1=[1.40.60.60.4](8.6.9)|\Sigma| = 5,\;\;\; \Sigma^{-1} = \begin{bmatrix}1.4 & -0.6 \\ -0.6 & 0.4 \end{bmatrix} \tag{8.6.9}
(xμ)TΣ1(xμ)=[x12x23][1.40.60.60.4][x12x23]=75(x12)265(x12)(x23)+25(x23)2(8.6.10)\begin{aligned} (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{7}{5}(x_1 - 2)^2 - \dfrac{6}{5}(x_1 - 2)(x_2 - 3) + \dfrac{2}{5}(x_2 - 3)^2 \end{aligned} \tag{8.6.10}
N(x1,x2)=125πexp(75(x12)265(x12)(x23)+25(x23)2)(8.6.11)\mathcal{N}(x_1, x_2) = \dfrac{1}{2\sqrt{5}\pi} \exp \left( \dfrac{7}{5}(x_1 - 2)^2 - \dfrac{6}{5}(x_1 - 2)(x_2 - 3) + \dfrac{2}{5}(x_2 - 3)^2 \right) \tag{8.6.11}

이 확률밀도함수의 모양은 다음과 같이 회전변환된 타원 모양이 된다.

mu = [2, 3]
cov = [[2, 3], [3, 7]]

rv = sp.stats.multivariate_normal(mu, cov)
X = rv.rvs(20000)

xx = np.linspace(-1, 6, 120)
yy = np.linspace(-1, 6, 150)
XX, YY = np.meshgrid(xx, yy)

plt.scatter(X[:, 0], X[:, 1], s=1)
plt.contour(XX, YY, rv.pdf(np.dstack([XX, YY])))
plt.axis("equal")
plt.xlim(0, 4)
plt.ylim(2, 4)
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
plt.title("이차원 다변수정규분포의 예")
plt.show()

💡 행렬의 대각화 (Matrix Diagonalization) 💡
행렬의 대각화는 정사각행렬 AA를 다음 형태로 분해하는 과정:

A=PDP1A = P D P^{-1}
  • PP: 행렬 AA고유벡터를 열로 가지는 행렬
  • DD: 행렬 AA고유값을 대각선에 가지는 대각행렬
  • P1P^{-1}: PP의 역행렬

다변수정규분포와 고윳값 분해

다변수정규분포의 공분산행렬 Σ\Sigma은 양의 정부호인 대칭행렬이므로 대각화가능(diagonalizable)이다. 정밀도행렬 Σ1\Sigma^{-1}은 다음처럼 분해할 수 있다. 이 식에서 Λ\Lambda는 고윳값행렬, VV는 고유벡터행렬이다.

Σ1=VΛ1VT(8.6.12)\Sigma^{-1} = V \Lambda^{-1} V^T \tag{8.6.12}

이를 이용하면 확률밀도함수는 다음처럼 좌표 변환할 수 있다.

N(x)exp(12(xμ)TΣ1(xμ))=exp(12(xμ)TVΛ1VT(xμ))=exp(12(VT(xμ))TΛ1(VT(xμ)))=exp(12(V1(xμ))TΛ1(V1(xμ)))(8.6.13)\begin{aligned} \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) \\ \end{aligned} \tag{8.6.13}
x=V1(xμ)(8.6.14)x' = V^{-1}(x-\mu) \tag{8.6.14}

라고 하자. 이 식은 변환행렬 V1V^{-1}의 열벡터인 고유벡터를 새로운 축으로 가지도록 회전하고 μ\mu벡터 방향으로 평행이동하는 것을 뜻한다.

최종 확률밀도함수식은 다음과 같다. 이 식에서 Λ\Lambda는 고윳값 λi\lambda_i를 대각성분으로 가지는 대각행렬이므로 새로운 좌표 xx'에서 확률밀도함수는 타원이 된다. 타원의 반지름은 고윳값 크기에 비례한다. 반대로 이야기하면 원래 좌표에서 확률밀도함수는 μ\mu를 중심으로 가지고 고윳값에 비례하는 반지름을 가진 타원을 고유벡터 방향으로 회전시킨 모양이다.

N(x)exp(12xTΛ1x)exp(x12λ12+x22λ22++xD2λD2)(8.6.15)\begin{aligned} \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) \end{aligned} \tag{8.6.15}

예를 들어 위의 두번째 예제에서 공분산행렬을 고유분해하면 다음과 같다.

mu = [2, 3]
cov = [[4, 3], [3, 5]]
w, V = np.linalg.eig(cov)
print(w)
print(V)
array([1.45861873, 7.54138127])
array([[-0.76301998, -0.6463749 ],
       [ 0.6463749 , -0.76301998]])

고윳값: λ1=1.46\lambda_1=1.46, λ2=7.54\lambda_2=7.54
고유벡터: v1=(0.763,0.646)v_1 = (-0.763, 0.646), v2=(0.646,0.763)v_2 = (-0.646, -0.763)

따라서 확률밀도함수가 고유벡터 v1=(0.763,0.646)v_1 = (-0.763, 0.646)v2=(0.646,0.763)v_2 = (-0.646, -0.763)를 축으로하는 타원형임을 알 수 있다

plt.figure(figsize=(8, 4))

d = dict(facecolor="k", edgecolor="k", width=2)

plt.subplot(121)
xx = np.linspace(-1, 5, 120)
yy = np.linspace(0, 6, 150)
XX, YY = np.meshgrid(xx, yy)
rv1 = sp.stats.multivariate_normal(mu, cov)
plt.contour(XX, YY, rv1.pdf(np.dstack([XX, YY])))
plt.annotate("", xy=(mu + 0.35 * w[0] * V[:, 0]), xytext=mu, arrowprops=d)
plt.annotate("", xy=(mu + 0.35 * w[1] * V[:, 1]), xytext=mu, arrowprops=d)
plt.scatter(mu[0], mu[1], s=10, c="k")
plt.axis("equal")
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
plt.title("$x_1,x_2$좌표의 결합확률밀도함수")

plt.subplot(122)
xx = np.linspace(-3, 3, 120)
yy = np.linspace(-3, 3, 150)
XX, YY = np.meshgrid(xx, yy)
rv2 = sp.stats.multivariate_normal((0,0), w)  # 좌표 변환
plt.contour(XX, YY, rv2.pdf(np.dstack([XX, YY])))
plt.annotate("", xy=(0.35 * w[0] * np.array([1, 0])), xytext=(0,0), arrowprops=d)
plt.annotate("", xy=(0.35 * w[1] * np.array([0, 1])), xytext=(0,0), arrowprops=d)
plt.scatter(0, 0, s=10, c="k")
plt.axis("equal")
plt.xlabel("$x'_1$")
plt.ylabel("$x'_2$")
plt.title("$x'_1,x'_2$좌표의 결합확률밀도함수")

plt.tight_layout()
plt.show()

연습 문제 8.6.1

다음과 같은 평균벡터와 공분산행렬을 가지는 2차원 다변수정규분포의 확률밀도함수의 모양은 어떻게 되는가?

μ=[12].      Σ=[4334](8.6.16)\mu = \begin{bmatrix} 1 \\ 2 \end{bmatrix}. \;\;\; \Sigma = \begin{bmatrix}4 & -3 \\ -3 & 4 \end{bmatrix} \tag{8.6.16}
mu = [1, 2]
cov = [[4, -3], [-3, 4]]
w, V = np.linalg.eig(cov)

rv = sp.stats.multivariate_normal(mu, cov)
X = rv.rvs(7777)

xx = np.linspace(-6, 6, 120)
yy = np.linspace(-6, 6, 150)
XX, YY = np.meshgrid(xx, yy)

plt.scatter(X[:, 0], X[:, 1], s=1)
plt.contour(XX, YY, rv.pdf(np.dstack([XX, YY])))
plt.axis("equal")
plt.xlim(-4, 6)
plt.ylim(-4, 8)
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
plt.title("연습 문제 8.6.1")
plt.show()

🚨 조건부 확률 분포, 주변 확률 분포에 대해 조사할 것!🚨

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

다변수 정규 분포인 확률 변수 벡터 중 어떤 원소의 값이 주어지면 다른 확률 변수의 조건부 확률 분포는 다변수 정규 분포다.

즉 다변수정규분포 확률밀도함수를 자른 단면은 다변수정규분포가 된다.

예를 들어 확률변수 XX의 값 xx를 두 벡터 x1x_1x2x_2로 나누었을 때

x=[x1x2](8.6.17)x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \tag{8.6.17}

x2x_2값이 주어지면(관측되면), X1X_1만의 확률밀도함수가 다변수정규분포를 이루는 것을 증명하자.

x1x_1x2x_2에 따라 기댓값벡터도 μ1\mu_1μ2\mu_2로 나뉘어진다.

μ=[μ1μ2](8.6.18)\mu = \begin{bmatrix} \mu_1 \\ \mu_2 \end{bmatrix} \tag{8.6.18}

공분산행렬 Σ\Sigma도 다음처럼 나뉘어진다.

Σ=[Σ11Σ12Σ21Σ22](8.6.19)\Sigma = \begin{bmatrix} \Sigma_{11} & \Sigma_{12} \\ \Sigma_{21} & \Sigma_{22} \\ \end{bmatrix} \tag{8.6.19}

공분산행렬의 역행렬인 정밀도행렬 Λ\Lambda도 마찬가지로 분할한다.

Λ=Σ1=[Λ11Λ12Λ21Λ22](8.6.20)\Lambda = \Sigma^{-1} = \begin{bmatrix} \Lambda_{11} & \Lambda_{12} \\ \Lambda_{21} & \Lambda_{22} \\ \end{bmatrix} \tag{8.6.20}

이 때 Σ\SigmaΛ\Lambda가 대칭행렬이므로 Λ11\Lambda_{11}Λ22\Lambda_{22}도 대칭행렬이고 Λ12=Λ21\Lambda_{12}=\Lambda_{21}이다.

이를 적용하면

(xμ)TΣ1(xμ)=(x1μ12)TΛ11(x1μ12)+C(x2,μ,Σ)(8.6.21)\begin{aligned} &(x-\mu)^T\Sigma^{-1}(x-\mu) = (x_1 - \mu_{1|2})^T\Lambda_{11}(x_1 - \mu_{1|2}) + C(x_2,\mu,\Sigma) \\ \end{aligned} \tag{8.6.21}

가 된다. 이 식에서 조건부기댓값 μ12\mu_{1|2}

μ12=μ1Λ111Λ12(x2μ2)(8.6.22)\mu_{1|2} = \mu_1 -\Lambda_{11}^{-1}\Lambda_{12}(x_2-\mu_2) \tag{8.6.22}

이다. CCx1x_1을 포함하지 않은 항을 가리키며 다음과 같다.

C=μ1TΛ11μ12μ1TΛ12(x2μ2)+(x2μ2)TΛ22(x2μ2)(x2μ2)TΛ12TΛ111Λ12(x2μ2)(8.6.23)\begin{aligned} C &= \mu_1^T\Lambda_{11}\mu_1 -2\mu_1^T\Lambda_{12}(x_2-\mu_2) + (x_2-\mu_2)^T\Lambda_{22}(x_2-\mu_2)\\ & - (x_2-\mu_2)^T \Lambda_{12}^T \Lambda_{11}^{-1}\Lambda_{12}(x_2-\mu_2) \end{aligned} \tag{8.6.23}

이 식에 지수함수를 적용하면

p(x1x2)=Cexp((x1μ12)TΛ11(x1μ12))(8.6.24)p(x_1 | x_2) = C' \exp \left( (x_1 - \mu_{1|2})^T\Lambda_{11}(x_1 - \mu_{1|2}) \right) \tag{8.6.24}

가 된다. 이 식에서 C=expCC' = \exp C다.

x2x_2가 어떤 값으로 주어지면 x1x_1은 조건부기댓값 μ12\mu_{1|2}와 조건부공분산행렬 Σ12\Sigma_{1|2}를 가지는 다변수정규분포가 된다. Σ12\Sigma_{1|2}은 분할행렬의 역행렬공식으로부터 다음과 같다.

Σ12=Λ111=Σ11Σ12Σ221Σ21(8.6.25)\Sigma_{1|2} = \Lambda_{11}^{-1} = \Sigma_{11} − \Sigma_{12}\Sigma_{22}^{-1}\Sigma_{21} \tag{8.6.25}

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

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

즉 결합확률밀도함수를 어떤 확률변수의 값으로 적분하여 나머지 확률변수의 주변확률분포를 구하면 다변수정규분포이다. 예를 들어 x1x_1x2x_2로 이루어진 결합 확률밀도함수 p(x1,x2)p(x_1, x_2)x2x_2로 적분하면 x1x_1의 주변확률분포는 정규분포가 된다.

p(x1)=p(x1,x2)dx2=N(x1;μ1,Σ11)(8.6.26)p(x_1) = \int p(x_1, x_2) dx_2 = \mathcal{N}(x_1; \mu_1, \Sigma_{11}) \tag{8.6.26}

x2x_2의 주변확률분포는의 기댓값은 원래 기댓값벡터 중 x1x_1 성분과 같고 공분산행렬은 분할행렬 중 Σ11\Sigma_{11}성분과 같다. 증명은 생략한다.

연습 문제 8.6.2

2차원 다변수정규분포가 다음과 같은 모수를 가진다고 하자.

μ=[μ1μ2],    Σ=[σ12ρσ1σ2ρσ1σ2σ22](8.6.27)\mu = \begin{bmatrix} \mu_1 \\ \mu_2 \end{bmatrix} ,\;\; \Sigma = \begin{bmatrix} \sigma_1^2 & \rho\sigma_1\sigma_2 \\ \rho\sigma_1\sigma_2 & \sigma_2^2 \\ \end{bmatrix} \tag{8.6.27}

(1) x2x_2가 주어졌을 때 x1x_1의 조건부확률분포함수가 다음과 같음을 보여라.

N(x1    μ1+ρσ1σ2σ22(x2μ2),σ12(ρσ1σ2)2σ22)(8.6.28)\mathcal{N} \left(x_1 \; \Big\vert \; \mu_1 + \dfrac{\rho\sigma_1\sigma_2}{\sigma_2^2}(x_2 - \mu_2), \sigma_1^2 - \dfrac{(\rho\sigma_1\sigma_2)^2}{\sigma_2^2} \right) \tag{8.6.28}

✏️
x2x_2가 주어졌을 때 x1x_1의 조건부 분포는 x1x2N(μ12,σ122)x_1 \mid x_2 \sim \mathcal{N}(\mu_{1|2}, \sigma_{1|2}^2) 이다.

  • 조건부 평균 (μ12\mu_{1|2}):
    μ12=μ1+ρσ1σ2(x2μ2),\mu_{1|2} = \mu_1 + \rho \frac{\sigma_1}{\sigma_2} (x_2 - \mu_2),
    여기서 ρ\rhox1x_1x2x_2 사이의 상관계수이며, ρ=Cov(x1,x2)σ1σ2\rho = \frac{\text{Cov}(x_1, x_2)}{\sigma_1\sigma_2} 이다.

  • 조건부 분산 (σ122\sigma_{1|2}^2):
    σ122=σ12(1ρ2).\sigma_{1|2}^2 = \sigma_1^2 (1 - \rho^2).

이를 정리하면 식 (8.6.28)과 같아진다.

한편 조건부 평균과 분산을 이용하면, 조건부 확률 밀도 함수는 다음과 같다.

f(x1x2)=12πσ122exp((x1μ12)22σ122)f(x_1 \mid x_2) = \frac{1}{\sqrt{2\pi \sigma_{1|2}^2}} \exp\left( -\frac{(x_1 - \mu_{1|2})^2}{2\sigma_{1|2}^2} \right)

profile
Connecting my favorite things

0개의 댓글