본문 바로가기
개발 공부/ML&DL

[차원 축소] 주성분 분석 (PCA, Principal Component Analysis)

by whatisthisblog 2020. 2. 9.
반응형

1. 주성분 분석 (PCA)

주성분 분석은 고차원의 데이터를 분산이 최대로 보존되는 저차원의 축 평면으로 투영시키는 대표적인 차원 축소 방법입니다.

이때 데이터를 투영시킬 수 있는 각 축의 단위 벡터들을 주성분(Principal Component) 이라고 하며, 차원의 수만큼 존재하고 서로 직교하는 성질을 갖고 있습니다. (즉, 기존의 좌표계를 주성분을 축으로 하는 좌표계로 선형 변환한다고 생각하면 됩니다.)

 

N개의 데이터 X에 대해 주성분벡터 P로의 선형변환(투영)은 아래와 같이 표현됩니다.

$$ z_1 = p_{11} x_1 + p_{12} x_2 + \cdots + p_{1N} x_N = p_1^T X $$

$$ z_2 = p_{21} x_1 + p_{22} x_2 + \cdots + p_{2N} x_N = p_2^T X $$

$$ z_N = p_{N1} x_1 + p_{N2} x_2 + \cdots + p_{NN} x_N = p_N^T X $$

 

분산이 최대로 보존되는 축으로 투영하는 이유는 해당 축이 데이터 분포의 특성을 가장 잘 대변하면서 정보 손실을 최소화할 수 있기 때문입니다. 데이터 X를 Z 축으로 투영시켰을 때 분산이 최대가 되는 식을 아래와 같이 표현할 수 있습니다.

 

$$ max_V(Var(Z)) = max_V(Var(V^T X)) = max_V(V^T Var(X) V) = max_V(V^T C V)$$

위의 식을 만족하는 $V$는 매우 많기 때문에, $\left\vert V \right\vert = V^TV = 1$ 이라는 제약조건을 걸어 라그랑지안 문제로 변형할 수 있습니다.

$$L = V^T C V - \Lambda(V^TV - 1)$$

최대값을 구하기 위해 $L$을 $V$에 대해 미분하면,

$$\frac{\Delta L}{\Delta V} = CV - \Lambda V = 0, (C - \Lambda)V = 0$$

즉, PCA는 공분산 행렬 C의 고유값과 고유벡터를 찾는 문제 입니다.

 

 

2. 공분산(Covariance)과 상관계수(Correlation)

공분산이란 두 확률변수 X, Y의 상관정도를 나타내는 값으로, 확률변수 X의 변화에 따른 Y의 변화 경향을 나타냅니다.

 

 

확률 변수 X, Y 변화에 따른 분포 모양

 

Cov(X, Y) > 0 : 확률변수 X가 증가 할 때 Y도 증가하면, 공분산은 0보다 큰 값을 가지며 양의 상관 관계를 가진다.

Cov(X, Y) < 0 : 확률변수 X가 증가할 때 Y는 감소하면, 공분산은 0보다 작은 값을 가지며 음의 상관 관계를 가진다.

Cov(X, Y) = 0 : 두 변수간에는 아무런 선형관계가 없으면 (서로 독립적인 관계이면), 공분산은 0의 값을 가진다.

단, 두 변수가 독립적이면 공분산은 0 이지만, 공분산이 0일 때 두 변수가 항상 독립적이라고 할 수 없다.

 

공분산은 실수값을 가지는 두 확률변수 X, Y에 대해 아래와 같이 표현할 수 있습니다.

 

확률변수 X, Y의 기대값(평균값)을 각각 $E(X)=\mu, E(Y)=\nu$ 이라 했을 때, 공분산은 $Cov(X, Y) = E(X-\mu)(Y-\nu) = E(XY) - \mu\nu$ 라고 표현할 수 있습니다.

만약 확률변수 X, Y가 서로 독립적인 관계라면, $E(XY) = E(X)E(Y) = \mu\nu$이므로, 공분산 $Cov(X, Y) = \mu\nu - \mu\nu = 0$이 됩니다.

이를 통해 공분산은 확률변수 X, Y 편차를 곱한 값의 평균이라는 것을 알 수 있습니다.

 

이러한 공분산의 성질들은 내적이 가지는 성질(서로의 변화에 대해 얼마나 잘 표현할 수 있는가)과 유사하며, 이를 통해 두 확률 변수가 서로 독립적이면 각 확률 변수의 단위 벡터들이 서로 직교한다는 것을 알 수 있습니다.

 

공분산은 두 확률 변수 X, Y의 상관 관계에 대해 알 수 있지만, 상관 정도가 얼마나 큰지는 제대로 반영할 수 없습니다. 각 확률 변수의 단위 크기에 영향을 받는다는 문제가 있기 때문입니다.

즉, 두 확률 변수 간 상관성이 낮아도 기대값이 크면 공분산 값은 크게 나오고, 상관성이 높아도 기대값이 작으면 공분산 값은 작게 나옵니다.

이를 보완하기 위해 각 확률변수를 각 분산으로 나눠주는 정규화 과정이 필요하며, 이를 상관계수라고 합니다.

상관 계수는 다음과 같이 나타낼 수 있습니다.

 

$$\rho = {Cov(X,Y) \over \sqrt{Var(X)Var(Y)}},   -1 \le \rho \le 1$$

 

공분산 행렬은 확률변수 X의 기대값 벡터와 Y의 기대값 벡터의 전치와의 내적으로 나타낼 수 있습니다.

 

$$Cov(X, Y) = E(X-\mu)(Y-\nu)^T$$

 

2차원 N개의 데이터 $(x_1, y_1), (x_2, y_2), \cdots ,(x_n, y_n)$의 공분산 행렬은 다음과 같이 표현됩니다.

 

$C = \begin{bmatrix} cov(x, x) & cov(x, y) \\ cov(y, x) & cov(y, y) \end{bmatrix}$ = ${1 \over N} \begin{bmatrix} \Sigma (x_i - m_x)^2 & \Sigma (x_i - m_x)(y_i - m_y) \\ \Sigma(x_i - m_x)(y_i - m_y) & \Sigma (y_i - m_y)^2  \end{bmatrix}$

 

이때 공분산 행렬 $C$는 NxN 크기의 정방행렬이며, $C = C^T$인 대칭 행렬입니다.

공분산 행렬 $C$의 고유벡터 행렬을 $V$, 고유값행렬을 $\Lambda$라 했을때, 아래와 같이 정리할 수 있습니다.

$$ C = V \Lambda V^T $$

 

 

3. 고유값(Eigenvalue)과 고유벡터(Eigenvector)

고유벡터란 벡터공간 V에서 선형 변환 T:V $\to$ V에 의한 변환 결과가 자기 자신의 상수배 $\lambda$가 되는 0이 아닌 벡터이며, 그 상수배를 고유값이라 합니다.

 

$$Tv = \lambda v$$

 

즉, 아래 그림의 파란색 벡터처럼 어떤 선형 변환으로 인해 벡터의 방향은 바뀌지 않고 그 크기만 변화되는 것을 의미합니다.

 

선형 변환에 의한 벡터의 방향 및 크기 변화

 

고유값과 고유벡터를 계산하기 위해 위의 식을 정리해보면 아래와 같습니다.

 

$$Tv - \lambda v = 0 \to (T-\lambda E)v = 0, (E : 단위 행렬, v \neq 0)$$

 

이때, 고유 벡터 $v$는 0이 아니어야 하므로, $(T-\lambda E)$의 역행렬이 존재하지 않아야 합니다.

따라서 $det(T - \lambda E) = 0$ 을 만족해야 합니다. (이를 행렬 T에 대한 특성방정식이라고 합니다.)

변환 행렬 T에 대해 위의 방정식을 풀어보면 고유값 $\lambda$를 구할 수 있고, 이를 다시 $Tv = \lambda v$ 에 대입하면 단위 벡터 $v$ 를 계산할 수 있습니다.

 

예를 들어, $T = \begin{pmatrix} 4 & -5 \\ 2 & -3 \end{pmatrix}$ 라 했을 때, $det \begin{pmatrix} 4-\lambda & -5 \\ 2 & -3-\lambda \end{pmatrix} = 0$를 계산하면, $\lambda^2 - \lambda - 2 = 0, \lambda_1 = -1, \lambda_2 = 2$ 와 같이 고유값을 계산 할 수 있습니다.

구해진 고유값 -1, 2를 각각 다시 대입하면 $\begin{pmatrix} 5 & -5 \\ 2 & -2 \end{pmatrix} v_1 = 0$, $ v_1= \begin{pmatrix} 1 && 1 \end{pmatrix}$, $\begin{pmatrix} 2 & -5 \\ 2 & -5 \end{pmatrix} v_2 = 0$, $ v_2= \begin{pmatrix} 5 && 2 \end{pmatrix}$와 같이 고유 벡터를 계산할 수 있습니다.

 

재미있는 것은, 변환 행렬 T의 대각 합이 고유값을 모두 합친 값이고, 행렬식의 값이 고유값을 모두 곱한 것과 같은 값이 된다는 것 입니다.

 

$$\lambda_1 + \lambda_2 + \cdots + \lambda_n = trace(T)$$

$$\lambda_1 \lambda_2 \cdots \lambda_n = det(T)$$

 

4. 대각화(Diagonalization)와 고유값 분해 (Eigen-Decomposition)

N차원의 정방행렬 A는 N개의 복소수 고유값행렬 $\Lambda = \begin{bmatrix} \lambda_1 & 0 & \cdots & 0 \\ 0 & \lambda_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_N \end{bmatrix}$와 이에 대응되는 고유벡터행렬 $V = [v_1 \cdots v_N]$를 가진다는 성질이 있으며, 이를 이용해 정방행렬 A를 분해할 수 있습니다.

$$AV = V\Lambda$$

만약 고유벡터행렬 $V$가 역행렬이 존재한다면, 다음과 같이 대각화할 수 있습니다.

$$A = V \Lambda V^{-1} = V \Lambda V^T$$

 

이때 행렬이 대각화가 가능하려면 고유벡터행렬 $V$가 역행렬이 존재해야 하므로, 고유벡터들이 선형 독립(직교)이어야 한다는 것을 알 수 있습니다.

$$(VV^T = I)$$

 

5. 특이값 분해 (SVD : Singular Value Decomposition)와 PCA

PCA에서 고유값과 고유벡터를 찾기 위해서는 주로 특이값 분해라는 행렬 분해 방법을 통해 구할 수 있습니다.

특이값 분해는 고유값 분해와 같이 행렬을 대각화하는 방법 중 하나입니다.

다만, 정방행렬 중 일부 조건을 만족하는 행렬에 대해서만 분해가 가능한 고유값 분해와 달리, 특이값 분해는 MxN의 모든 행렬에 대해 적용이 가능합니다.

MxN 크기의 행렬 A는 특이값 분해를 통해 아래와 같이 MxM 행렬 U와 NxN 행렬 V로 분해할 수 있습니다.

$$A = U \Sigma V^T$$

 

여기서 U와 V는 특이벡터라고 불리며, 모든 특이벡터는 서로 직교하는 성질을 가집니다.

$$ U^T U = I, V^T V = I$$

특이값 행렬인 $\Sigma$는 MxN크기의 대각행렬로, 고유값들의 제곱근 값을 원소로 합니다.

이때 $\Sigma$ 행렬의 모든 원소들은 0보다 크거나 같으며, 내림차순으로 정렬되어 있습니다.

 

이를 이용해 공분산 행렬 C를 분해하면 다음과 같습니다.

$$Cov(X, X) = \frac{1}{n-1} X^T X = U \Sigma V^T (U \Sigma V^T)^T = U \Sigma^2 U^T = U \Lambda U^T$$

 

6. PCA의 한계

PCA는 기존 데이터 벡터를 선형변환하여 Projection 하는 것이므로, 비선형 데이터 분포에 대해 적합하지 않습니다.

또한 PCA는 데이터의 분포가 가장 크게 되는 벡터를 찾는 것인데, 분포가 가장 커지는 벡터가 우리가 찾는 데이터의 특성을 항상 잘 표현한다고 할 수 없으며, 해당 축에 대한 의미를 분석하는 것도 어렵습니다.

이밖에도 PCA는 라벨링된 데이터 클래스간의 관계를 표현하기 힘들다는 한계가 있습니다.

반응형

댓글