[models] 주성분 분석(Principal Component Analysis)

2021. 8. 16. 11:58Machine Learning/Models

728x90

이번 글에서는 데이터의 차원 축소에 많이 쓰이는 방법 중 하나인 주성분 분석에 대해 알아보겠습니다.

[관련 글] 가우시안 혼합 모델의 확장(Extention of Gaussian Mixture)


$D$차원의 $N$개 데이터셋 $ \textbf {x} = \left ( x_1,\dots, x_N \right )^T $에 대해 생각해보겠습니다. 우리는 $D$ 차원의 데이터를 $M$차원으로 축소하기를 원한다고 가정하겠습니다.

$M=1$이라고 가정하고, 우리가 축소할 차원의 방향을 가진 $\textbf{u}_1$벡터를 생각해보겠습니다.

각각의 데이터를 $\textbf{u}_1$방향으로 사영(projection) 시킨 후, 그들의 분산을 구하면 다음과 같습니다.

$\frac {1}{N} \displaystyle \sum^{N}_{n=1} \{\textbf{u}_1^T x_n - \textbf{u}_1^T \bar{x} \}^2 =\textbf{u}_1^T S \textbf{u}_1 $

여기서 $S = \frac{1}{N} \displaystyle \sum^{N}_{n=1}(x_n - \bar {x})(x_n - \bar {x})^{T}$

우리는 최대한 데이터가 넓게 분포할 수 있는 차원의 벡터 $\textbf{u}_1$을 원하기 때문에, 앞서 구한 분산을 최대화하는 $\textbf{u}_1$을 찾아보겠습니다.

계산의 편의를 위해 $\textbf{u}_1^{T} \textbf{u}_1 = 1 $이라는 제약 조건을 준다면, 위의 문제는 제약된 최적화 문제를 푸는 방법 중 하나인 라그랑지 승수 법으로 풀 수 있습니다. 즉 다음 식을 미분하여 0이 되는 $\textbf{u}_1$을 찾아주면 됩니다.

$\textbf{u}_1^T S \textbf{u}_1 + \lambda_1 (1- \textbf{u}_1 ^ T \textbf{u}_1)$

찾아준 $\textbf{u}_1$의 식을 정리하면 다음과 같습니다.

$S \textbf{u}_1 = \lambda_1 \textbf{u}_1~~~~\cdots (1)$

이렇게 찾아준 벡터 $\textbf{u}_1$를 고유 벡터(eigen vector)라고 합니다.

또한 $(1)$의 식 왼쪽에 $\textbf{u}_1^T$를 곱해주면 다음과 같습니다.

$\textbf{u}_1^T S \textbf{u}_1 = \lambda_1$

즉 데이터의 분산을 최대로 만드는 고유 벡터로 사영시켰을 때의 분산이 $\lambda_1$이라는 뜻이 되는데, 이 $\lambda$ 값을 고윳값(eigen value)라고 합니다.

위와 같은 방법을 써서 $\textbf{u}$벡터를 더 많은 차원으로 확장한다면, 여러 개의 고유 벡터와 고윳값이 나올 수 있을 것입니다. 보통 시각화를 위해 두 개의 고유 벡터까지 고려하는 것이 일반적인 경우라고 할 수 있습니다.