https://studyingrabbit.tistory.com/42
지난 포스팅에서 주성분분석의 기본적인 개념과 주축 벡터를 구하는 방법에 대해서 알아 보았습니다. 요약하면 주축 벡터는 데이터의 분포 특성을 가장 뚜렷하게 표현하는 특성 공간의 좌표축의 방향이라고 할 수 있습니다. 가장 뚜렷하다는 것은 해당 좌표축의 방향의 분산을 크게 함을 뜻 합니다.
이번 포스팅에서는 주성분분석에서 나오는 공분산행렬Covariance Matrix와 주축 벡터가 갖는 수학적인 성질을 선형대수학의 개념을 활용하여 알아보도록 하겠습니다. 행렬과 벡터에 대한 일반적인 지식이 있다면 어렵지 않게 포스팅을 이해할 수 있을 것 입니다.
선형대수학의 일반적인 방법을 PCA에 적용하기
공분산행렬에 대한 정의를 다시 쓰면, 데이터 집합 $S = \{ \vec{x}_i = (x^1_i, x^2_i, ..., x^M_i) | i =1,2, 3, ..., N \}$에 대해서 공분산행렬은
$$C = \frac{1}{N} \sum_{i=1}^{N} \begin{pmatrix}
x^1_ix^1_i&x^1_ix^2_i&...&x^1_ix^M_i\\
x^2_ix^1_i&x^2_ix^2_i&...&x^2_ix^M_i\\
...&...&...&...\\
x^M_ix^1_i&x^M_ix^2_i&...&x^M_ix^M_i\\
\end{pmatrix}$$
와 같이 정의 됩니다. 윗첨자는 특성공간의 차원을 뜻하고, 아랫첨자는 데이터의 인덱스를 뜻 합니다. 윗첨자와 제곱이 헷갈릴 수도 있는데, 제곱이 나오는 경우에는 뚜렷하게 제곱임을 나타내도록 하겠습니다. 데이터 집합 $S$의 평균을 영벡터 $\vec{0}$이 될 수 있도록 데이터 값을 평행이동 했다고 가정하겠습니다. 그렇지 않은 경우에는 $x^m_i = x^m_i - \mu^m$와 같이 각 데이터의 특성값을 각 특성의 평균만큼 빼주면 됩니다.
이 행렬은 정사각 행렬이며 대칭 행렬이기 때문에, 선형대수학의 유명한 정리에 따라서 고유벡터가 존재하며 고유값은 항상 실수가 되게 됩니다. $i$ 번째 고유 벡터 $\vec{e}_i$를 좀 구체적으로 쓰면, (지난 포스팅에서는 고유 벡터를 $\vec{\omega}$로 나타냈는데, 이번 포스팅에서는 $\vec{e}$로 쓰도록 하겠습니다. 그리스 문자 $\omega$를 입력하는것이 너무 번거롭습니다)
$$\vec{e}_i = e^1_i \hat{x}^1 + e^2_i \hat{x}^2 + ... + e^M_i \hat{x}^M = \sum_{j=1}^{M} e^m_i \hat{x}^m$$
이 됩니다. 여기서 $\hat{x}^m$ 은 데이터 특성 공간의 $m$번째 유닛 벡터이고 $\vec{e}_i$는 간단하게 $(e_i^1, e_i^2, ..., e^M_i)$로 쓸 수 있습니다. $\vec{e}$가 유닛 벡터임을 강조하기 위해서 $\hat{e}$이라고 쓰는 것이 더 좋을 수도 있는데, $\vec{e}$와 $\hat{e}$를 그냥 차이 없이 번갈아 쓰도록 하겠습니다. 또한 고유 벡터라고 칭하는 것은 항상 PCA의 주축 벡터라고 생각하면 됩니다.
행렬 대각화를 통해서 얻은 고유 벡터들은 상호 수직하기 때문에, 공간의 기저 벡터가 됩니다. 즉 데이터(일반적인 벡터)를 원래의 기저 벡터 $\{\hat{x}_1, \hat{x}_2, ... , \hat{x}_M\}$를 이용하여 표현할 수 도 있지만, 고유 벡터 $\{\hat{e}_1, \hat{e}_2, ... , \hat{e}_M\}$ 를 이용해서도 표현할 수 있습니다. 예를들면 일반적인 벡터 $\vec{y}$는
$$\vec{y} = p^1 \hat{x}_1 + p^2 \hat{x}_2 + ... + p^M \hat{x}_M \rightarrow (p^1, p^2, ..., p^M) \equiv \vec{p}$$
$$\vec{y} = q^1 \hat{e}_1 + q^2 \hat{e}_2 + ... + q^M \hat{e}_M \rightarrow (q^1, q^2, ..., q^M) \equiv \vec{q}$$
와 같이 두 가지 방식으로 표현할 수 있습니다. $\vec{p}, \vec{q}$는 공간상의 동일한 점을 가리키고 있는데, 이 벡터를 표현하는 기저 벡터만 다를 것 입니다. $\vec{q}$의 성분은 $\vec{p}$의 성분을 이용하여 표현할 수 있는데, 위 식에서 고유 벡터 $\hat{e}_i$를 기저 벡터 $\{\hat{x}_1, \hat{x}_2, ... , \hat{x}_M\}$로 표현하여 정리하면 아래와 같은식을 얻습니다.
$$\begin{pmatrix}q^1\\q^2\\...\\q^M\end{pmatrix} =\begin{pmatrix} e^1_1&e^2_1&...&e^M_1\\ e^1_2&e^2_2&...&e^M_2\\...&...&...&...\\e^1_M&e^2_M&...&e^M_M\\ \end{pmatrix} \begin{pmatrix}p^1\\p^2\\...\\p^M\end{pmatrix}$$
이를 간단히하면 행렬 $A$를 도입하여 $\vec{q} = A \vec{p}$ 와 같이 쓸 수 있습니다. 행렬 $A$의 횡벡터(row vector)는 고유 벡터 $\hat{e}_i$가 됩니다. 행렬대각화의 정의에 따라서 위와 같은 방식으로 데이터를 기저 벡터 $\{\hat{x}_1, \hat{x}_2, ... , \hat{x}_M\}$를 이용하여 표현하고, 이 표현법으로 공분산행렬을 기술하면
$$\frac{1}{N} \sum_{i=1}^{N} \begin{pmatrix} p^1_ip^1_i&p^1_ip^2_i&...&p^1_ip^M_i\\ p^2_ip^1_i&p^2_ip^2_i&...&p^2_ip^M_i\\ ...&...&...&...\\ p^M_ip^1_i&p^M_ip^2_i&...&p^M_ip^M_i\\ \end{pmatrix} \rightarrow \frac{1}{N} \sum_{i=1}^{N} \begin{pmatrix} q^1_iq^1_i&0&...&0\\ 0&q^2_iq^2_i&...&0\\ ...&...&...&...\\ 0&0&...&q^M_iq^M_i\\ \end{pmatrix}$$
와 같이 대각선 성분만 남기고 나머지 성분을 모두 0으로 만들 수 있습니다. 대각선 성분은 각 $i$번째 좌표값의 분산이 됩니다. 이 대각 성분값은 교유값과 같습니다.
고유값이 작은 고유 벡터는 무시할 수 있다 : 차원 축소
PCA는 차원 축소에 주로 이용되는데, PCA가 차원 축소에 이용될 수 있는 근거는 PCA 변환은 분산이 큰 주축 벡터에서 부터 분산이 작은 주축 벡터의 순서를 매겨준다는 것에 있습니다. $m$번째 고유값은 데이터를 $m$번째 고유 벡터의 방향과 나란한 축 방향의 성분의 분산과 같습니다. 따라서 고유값이 작다는 것은, 이에 대응되는 고유 벡터의 방향으로 데이터의 분산이 작다는 뜻이 됩니다. 만일 고유값이 극단적으로 작는 경우에는 (혹은 정해 놓은 특정한 값 보다 작다면) 이에 대응되는 고유 벡터이 방향의 분산(변화량)은 무시할 수 있게 됩니다. 즉, $i$ 번째 데이터를
$$\vec{q}_i = q^1_i \hat{e}_1 + q^2_i \hat{e}_2 + q^3_i \hat{e}_3 + ... q^M_i \hat{e}_M$$
와 같이 쓸 수 있습니다. 이 때, $m$번째 고유 벡터의 고유값, 즉 분산값이, $V_m$이라고 한다면,
$$q^m_i \approx \sqrt{V_m} = \sigma_m$$
이 됩니다. 여기서 $\sigma_m$는 분산의 제곱근, 즉 표준편차가 됩니다. 특정한 $i$번째 데이터의 $m$ 성분의 값과 $\sigma_m$을 단순히 비교할 수는 없지만, 데이터가 정규 분포와 같이 특정한 점 (평균)을 중심으로 모여 있는 분포라고 한다면 $q^m_i$의 크기와 $\sigma_m$ 크기가 같은 Order라고 할 수 있습니다. 실제로 정규 분포의 경우 $|q^m_i - 2.56\sigma|$ 일 확률은 $99\%$가 됩니다.
이와 같은 성질을 이용하여 분산이 특정한 값 보다 더 작은 주축 벡터의 성분은 무시 할 수 있습니다. 예를들어서 3번째 고유 벡터의 분산값이 $V_3 = \sigma_3^2$라고 할 때, $\vec{q} = q^1_i \hat{e}_1 + q^2_i \hat{e}_2 + q^3_i \hat{e}_3 + ... q^M_i \hat{e}_M$ 를 $\tilde{q} = q^1_i \hat{e}_1 + q^2_i \hat{e}_2$ 와 같이 3번째 성분 이후는 무시하고 근사를 한다면, 참값 $\vec{q}$와 근사값 $\tilde{q}$의 차이의 크기(의 제곱)은
$$|\vec{q} - \tilde{q}|^2 = (q^3)^2 + ... + (q^M)^2 \lt \sigma_3^2 + ... + \sigma_M^2 \lt (M-2) \sigma_3^2$$
가 됩니다. 따라서 $|\vec{q} - \tilde{q}| \lt \sqrt{M-2} \sigma_3$ 이 되고, $\sigma_3$이 매우 작아서 $\sqrt{M-2} \sigma_3$ 역시 작은 경우엔 $\vec{q} \approx \tilde{q}$ 라고 근사할 수 있습니다.
즉, 원래 특성 공간의 데이터(벡터) $\vec{p} = (p^1, p^2, ..., p^M)$을 기술하기 위해서는 총 $M$개의 숫자가 필요했지만, 이를 주축 벡터 기저 공간의 벡터 $\vec{q}$로 표현하고, 고유값(분산)이 작은 고유 벡터를 무시하여 $\tilde{q}$로 근사한다면 $M$개 보다 훨씬 작은 갯수의 숫자(위의 예시에서는 2개)를 이용하여 원래 데이터 $\vec{p}$를 표현할 수 있는 것 입니다. $M$차원에서 $2$차원으로 차원의 축소가 생겼고, 이를 데이터의 차원 축소라고 합니다. 데이터를 기술하는 숫자(실수)의 갯수를 매우 줄였지만 ($M \rightarrow 2$), 데이터의 변화는 거의 없다는 매우 좋은 장점이 있습니다. 고차원 공간에서 데이터를 분석하는 것 보다는 저차원 공간에서 분석하는 것이 훨씬 편하기 때문에 이와 같은 차원 축소는 데이터 분석에서 항상 중요한 역할을 합니다. PCA에서 차원 축소가 가능한것은, PCA에서는 공분산행렬을 대각화 함으로써 고유값(분산)의 순서대로 고유 벡터를 나열할 수 있었기 때문입니다.
PCA 변환은 직교 변환
주축 벡터를 기저로 하는 좌표 변환 $\vec{q} = A \vec{p}$ 은 직교 변환Orthogonal transform 입니다. 직교 변환은 벡터의 내적을 보존하는 변환으로, 변환을 하기 전 두 벡터의 내적과 변환을 하고나서 두 벡터의 내적의 값이 동일하게 유지됩니다. 즉, $\vec{p}_1, \vec{p}_2$가 있을 때 이 벡터를 주축 벡터 기저 공간으로 변환한 벡터 $\vec{q}_1, \vec{q}_2$에 대해서,
$$\vec{q}_1 \cdot \vec{q}_2 = (A \vec{p}_1 ) \cdot (A \vec{p}_2) = \vec{p}_1 (A^T A) \vec{p}_2 = \vec{p}_1 I \vec{p}_2 = \vec{p}_1 \cdot \vec{p}_2$$
가 됩니다. $A^T A = I$ 에서 $A$가 직교 변환임을 이용하였습니다. 직교 변환은 $A^T = A^{-1}$ 을 만족합니다.
내적을 보존한다는 것은 매우 중요한 성격이며, PCA를 활용할 때 매우 다양하게 활용될 수 있습니다. 예를들면, 내적이 보존되면 거리(길이) 역시 보존됩니다. 왜냐하면 (유클리드 공간에서) 거리는 내적으로 부터 정의가 되기 때문인데,
$$|\vec{p}|^2 = \vec{p} \cdot \vec{p} = \vec{q} \cdot \vec{q} = |\vec{q}|^2 $$
를 만족합니다. 원래 공간에서 벡터의 길이 (피타고라스의 정리를 이용하여) 계산하는 것이나, 이 벡터를 주축 벡터를 기저로 하는 공간으로 변환하여 벡터의 길이를 계산하는 것이나 같은 값을 준다는 뜻 입니다.
고유 벡터의 기하학적 의미를 생각하면
임의의 공분산행렬이 주어진다면, 이러한 공분산행렬을 주는 분포를 여러개(정확히는 무한개) 만들어 낼 수 있습니다. 그 중에서 가장 쉬운 방법은 다변량 정규분포Multivariate Normal Distribution을 생성하는 것인데, 공분산행렬이 $\Sigma$로 주어진 경우, 확률밀도함수
$$f_{X}(x_1, x_2, ..., x_k) = \frac{1}{\sqrt{(2\pi)^k |\Sigma|}}
\text{exp}\Big(-\frac{1}{2} (\vec{x}-\vec{\mu})^T \Sigma^{-1} (\vec{x}-\vec{\mu})\Big)$$
의 공분산행렬은 정확히 $\Sigma$가 됩니다.
구체적으로 $\Sigma = \begin{pmatrix}1.0&0.8\\0.8&0.7\end{pmatrix} $ 확률밀도함수 $f_X$의 등고선을 그리면,
와 같습니다. 위 등고선은 $(\vec{x}-\vec{\mu})^T \Sigma^{-1} (\vec{x}-\vec{\mu}) = \text{constant}$ 의 방정식을 따르는데, 이 타원의 주축 (장축, 단축)의 방향은 공분산행렬 $\Sigma$의 고유 벡터의 방향과 일치합니다. 즉, "PCA의 추축 벡터 = 공분산행렬에 의해 정해지는 다변량 정규분포의 타원 등고선의 주축 방향"이 됩니다. 앞서 언급했듯, 특정한 공분산행렬을 만족하는 분포는 무한히 많지만, 다변량 정규분포는 매우 대표적인 분포 중 하나입니다. 어쩌면 당연하게도 이 다변량 정규분포의 타원 모양의 등고선은 PCA의 주축 벡터와 일치합니다. 두 벡터의 이름에서 모두 주축Principal을 볼 수 있듯, 그 근원은 같다고 볼 수 있습니다.
2차형식과 행렬의 대각화에 대해서 다룬 이전 포스팅을 본다면 조금 더 많은 이해를 할 수 있을 것 입니다.
https://studyingrabbit.tistory.com/6?category=911605