PCA 정의

PCA는 기존의 변수를 일차 결합하여 서로 선형 연관성이 없는 새로운 변수, 즉 주성분(principal component, PC)들을 만들어 낸다. 이때 계산은 주로 행렬의 고윳값 분해 또는 특이값 분해(SVD)를 사용한다. 첫 번째 주성분 PC1이 원 데이터의 분포를 가장 많이 보존하고, 두 번째 주성분 PC2가 그 다음으로 원 데이터의 분포를 많이 보존한다. 예를 들어, PC1, PC2, PC3가 원 데이터의 분포(성질)의 약 90%를 보존한다면, 10% 정도의 정보는 잃어버리더라도, 합리적인 분석에 큰 무리가 없으므로, PC1, PC2, PC3만 택하여 3차원 데이터로 차원을 줄일 수 있다. 이 경우 계산과 시각화가 용이하여 데이터를 쉽게 분석할 수 있다.

PCA의 기하학적 의미

PCA는 데이터의 분산(variance)을 최대한 보존하면서 서로 직교하는 새 기저(축)를 찾아, 고차원 공간의 표본들을 선형 연관성이 없는 저차원 공간으로 projection하는 기법

row-wise vector vs column-wise vector

  • row-wise vector: 행에 데이터(n), 열에 특성변수(P)가 위치한 행렬
  • column-wise vector: 열에 데이터(n), 행에 특성변수(P)가 위치한 행렬
  • PCA를 유도하는 과정에서 X는 column-wise로 간주한다.

Covariance Matrix

  • X: (p by n matrix: p: # of variables, n: # of records)
  • COV(X) = $\frac{1}{n}(X - \overline{X})(X - \overline{X})^{T}$
  • X는 column-wise 이므로 $\overline{X}$의 각 Column은 변수들의 평균으로 채워져 있음
  • $(X - \overline{X})$ 가 p x n 차원이고 $(X - \overline{X})^{T}$가 n x p 차원이므로 COV(X)는 P x P 차원임
  • COV(X)는 대칭행렬임
  • COV(X) = $\frac{1}{n}(X - \overline{X})(X - \overline{X})^{T}$ = $\Sigma$이라고 하자

사영(projection)이란?

  • 한 벡터 $\vec{b}$를 다른 벡터 $\vec{a}$에 사영시킨다는 것은 벡터 $\vec{b}$로부터 벡터 $\vec{a}$에 수직인 점까지의 길이를 가지며 벡터$\vec{a}$와 같은 방향을 갖는 벡터를 찾는다는 것을 의미

$$(\vec{b}-p\vec{a})^{T}\;\vec{a} = 0 ⇒ \vec{b}^{T}\vec{a} - p\vec{a}^{T}\vec{a} = 0 ⇒ p = \frac{\vec{b}^T\vec{a}}{\vec{a}^{T}\vec{a}}$$

$$\therefore \vec{x} = p\vec{a} = \frac{\vec{b}^{T}\vec{a}}{\vec{a}^{T}\vec{a}}\vec{a} \; (if \; \vec{a} \; is \; unit \; vector)$$

$$p = \vec{b}^{T}\vec{a}    ⇒ \vec{x} = p\vec{a} = (\vec{b}^{T}\vec{a})\vec{a}$$

Data centering

  • 각 변수의 평균을 0으로 바꿔주는 것
  • $즉, X 대신 (X - \overline{X})$를 쓰는 것
  • 만약 X를 이미 centering 한 것으로 간주하면 COV(X) = $\frac{1}{n}XX^{T}$이 된다.
  • PCA를 수행하기 전에 데이터는 사전에 centering 된 것으로 간주한다. (즉, $\overline{x}_{i} = 0 \; , i=1,2,....,p$)

선형변환

  • PCA는 변수가 p개, 관측치가 n개 있는 데이터 X(p x n)로부터 새로운 변수 $z_{i}$를 만드는 과정으로 모든 특성변수를 선형결합하여 새로운 $z_{i}$를 만들게 된다.
  • 여기서 $\vec{x_i}$는 행렬X의 i번째 변수에 해당하는 열벡터(n x 1)이다. 또한 $\vec{\alpha_{i}}는$ (p x 1)열벡터이고 $\vec{\alpha_{i}}^{T}X$의 값인 $\vec{z_{i}}$ 는 (n x 1 )열벡터 (1차원) 이다.

$$ \vec{z_{1}}= \alpha_{11}\vec{x_{1}} + \cdots + \alpha_{1p}\vec{x_{p}} = \vec{\alpha_{1}}^{T}X \\ \vec{z_{2}}= \alpha_{21}\vec{x_{1}} + \cdots + \alpha_{2p}\vec{x_{p}} = \vec{\alpha_{2}}^{T}X \\ \vdots \\ \vec{z_{p}}= \alpha_{p1}\vec{x_{1}} + \cdots + \alpha_{pp}\vec{x_{p}} = \vec{\alpha_{p}}^{T}X $$

  • 이를 기하학적으로 본다면 $\vec{z_{i}}$는 X를 $\vec{\alpha_{i}}$ (p x 1)라는 새로운 축에 사영시킨 결과물이라고 말할 수 있다.
  • 즉, PCA는 X의 분산을 최대로 보존하는 새로운 차원 $\vec{z_{i}}$를 k개(단, k < p ) 찾아서 X를 k개의 $\vec{\alpha_{i}}$로 각각 정사영시킨 결과물을 새로운 변수로 하여 P차원을 k 차원으로 줄인 것임

PCA의 목적

  • PCA의 목적은 행렬 x의 분산을 최대한 보존하는 것임. 따라서 $z_i$의 분산 또한 최대화 되어야 한다.

$$ MAX_{\alpha_{i}} \; (var(z_{i})) = MAX_{\alpha_{i}}(var(\vec{\alpha_{i}}X)) \\=MAX_{\alpha_{i}}(\vec{\alpha_{i}}^{T}var(X)\vec{\alpha_{i}}) = MAX_{\alpha_{i}}(\vec{\alpha_{i}}^{T}\Sigma\vec{\alpha_{i}})
$$

  • 위식을 만족하는 $\alpha_{i}$는 무수히 많음. 사실 $\alpha_{i}$의 크기를 무작정 키우기만 해도 $z_{i}$의 분산은 높일 수 있음. 때문에 아래와 같은 제약식을 둔다

$$ \parallel \alpha_{i} \parallel \; = \vec{\alpha_{i}}^{T}\vec{\alpha_{i}} \; = 1 $$

by 라그랑지안

$$ L = \vec{\alpha_{i}}^{T}\Sigma\vec{\alpha_{i}} \; - \lambda_{i}(\vec{\alpha_{i}}^{T}\vec{\alpha_{i}}-1) $$

$$ \frac{\partial L}{\partial \vec{\alpha_{i}}} = \;\Sigma\vec{\alpha_{i}} \;-\lambda_{i}\vec{\alpha_{i}} \; = 0 $$

  • 이는 고유벡터(eigenvector)에 정의에 의해 $\alpha_{i}$는 공분산행렬 $\Sigma$의 고유 벡터를 의미하고 $\lambda_i$는 이에 대응하는 $\Sigma$의 고유값이 됨
  • 따라서 X의 분산을 최대화하는 $\alpha_{i}$는 X의 공분산행렬 $\Sigma$의 고유벡터임
  • Q) x의 공분산 행렬 $\Sigma$은 P x P의 비특이행렬(non-singular matrix)임. 따라서 고유벡터, 고유값이 p개 존재함. 그렇다면 어떤 고유벡터가 분산을 가장 최대화할까?

$$ var(z_{i}) = \vec{\alpha_{i}}^{T}\Sigma\vec{\alpha_{i}} \; = \vec{\alpha_{i}}^{T}\;\lambda_{i} \;\vec{\alpha_{i}} \\ = \lambda_i \; \vec{\alpha_{i}}^{T}\vec{\alpha_{i}} \; = \lambda_{i}\\ (\because \; \vec{\alpha_{i}}^{T}\vec{\alpha_{i}} = 1) $$

  • $\lambda_{i}$는 X의 공분산행렬 $\Sigma$의 고유벡터 $\vec {\alpha_{i}}$에 대응되는 고유값(eigen value)임. 따라서 분산을 가장 최대화 하는 공분산행렬의 고유벡터는 공분산 행렬의 고유값중 가장 큰 값의 고유값에 대응되는 고유벡터임

새로운 축들의 무상관성(uncorrelated)

  • pca에서 데이터의 각 변수들은 평균이 0으로 centering되어있다고 가정하고 있음.

$$ \Sigma \; = cov(X) = \frac{1}{n-1}XX^{T} \; \propto XX^{T} $$

  • $\Sigma$의 고유벡터들을 각각의 열벡터들로 하는 행렬을 $\alpha$라 하고, $\alpha$의 각각의 열벡터에 대응하는 고유값을 대각성분으로하고 나머지는 0인 대각행렬을  $\Lambda$ 라고할 때 다음이 성립한다.

$$ \Sigma \alpha = \Lambda \alpha \\ \therefore \Sigma = \alpha\Lambda \alpha^{T} $$

$\sum$는 대칭행렬이므로 다음과 같이 정리할 수 있다

$$ \Sigma ^{T} = (\alpha^{-1})\Lambda \alpha^{T}\\ = \Sigma = \alpha\Lambda \alpha^{-1} $$

$$ \therefore \alpha^{-1} = \alpha^{T}\\ => \alpha^{T}\alpha = I $$

따라서, $\alpha_{i}^{T}\alpha_{j} = 0 \;( if \; i \neq j)$ , $\alpha_{i}^{T}\alpha_{j} = 1 \;( if \; i = j)$

  • $var(\alpha_{i}^{T}X + \alpha_{j}^{T}X)$ = $var(\alpha_{i}^{T}X)$ + $var(\alpha_{j}^{T}X)$ = $var(z_{i})$ + $var(z_{j})$
  • V는 $\Sigma$의 고유벡터들을 각각의 열벡터들로 하는 행렬이므로 PCA에 의해 변환된 좌표축들은 uncorrelated가 됨
  • 따라서 원 데이터의 특성변수들이 상관관계가 크더라도 PCA에 의해 변환된 변수들은 상관관계가 없음

얼마나 많은 principal components를 선택해야 합리적일까

  • total variance ( $\frac{1}{n}XX^{T}$ ) = trace($\frac{1}{n}XX^{T}$)
  • 그런데 $\Sigma = \frac{1}{n}XX^{T}$는 (p x p) non-singular matrix이므로 tr($\frac{1}{n}XX^{T}$) = $\lambda_1 + \lambda_2 + ... + \lambda_p$
  • 따라서 X의 공분산행렬 $\Sigma$의 총 분산의 합은 공분산행렬 $\Sigma$의 고유값들의 합 ($\lambda_1 + \lambda_2 + ... + \lambda_p$)과 같다.
  • 또한 if i $\neq$j 일 때, $z_i 와 z_j$는uncorrelated되어 있으므로 var($z_i + z_j$) = $var(z_i)$+ $var(z_j)$ = $\lambda_{i}$ + $\lambda_{j}$
  • $\frac{var(z_{1}+...+ z_{k})}{total- variance(\Sigma)}$ = $\frac{var(z_{1})+var(z_{2})+ \ldots + var(z_{k})}{\lambda_{1} + \lambda_{2} + \ldots \lambda_{p}}$ = $\frac{\lambda_{1} + \lambda_{2} + \ldots \lambda_{k}}{\lambda_{1} + \lambda_{2} + \ldots \lambda_{p}}$ (단, k < p) 에서 전체 데이터의 분산 중 보존되는 정도를 통해 principal components의 수 k 를 구한다
  • 일반적으로 누적 분산의 합 그래프를 통해 분산의 합의 증가 기울기가 무뎌지는 곳(elbow point)의 k 값을 principal components 의 수로 결정한다

PCA의 단점

  • PCA는 통계모델에서 시작했기 때문에 데이터의 분포가 Gaussian 분포를 가정함. 따라서 Gaussian분포를 따르지 않거나 multimodel Gaussian 분포를 따를 경우 PCA의 결과물이 유용하지 못함
    • 대안: 커널 PCA, LLE(Local Linear Embedding)
  • PCA는 범주 정보를 고려하지 않고 오직 데이터가 가진 분산을 최대한 보존하는 방법론이기 때문에 target의 범주 정보가 주어져있을 때, 분류 성능을 향상시키는 모델은 아님.
    • 대안: Fisher의 LDA(Linear Discriminant Analysis) - 두 범주간의 구분을 잘 할 수 있는 축을 찾아 사영을 하는 방법은 Fisher의 LDA, Partial Least Square(PLS)

데이터 복원

                  X    (p x n) - >               $\alpha_i^{T}$X     (1 x p)(p x n)               - >              $\alpha_{i}\alpha_{i}^{T}$X       (p x 1)(1 x p)(p x n)

  • 값이 완벽하게 복원되지는 않음. 재구축 오차가 생김
  • 재구축 오차를 사용하여 이상치 탐지에서 많이 사용됨

PCA 알고리즘 요약

  1. 데이터 정규화(mean centering)
  2. 기존 변수의 covariance matrix 계산
  3. covariance matrix로부터 eigenvalue 및 이에 대응되는 eigenvector를 계산
  4. eigenvalue 및 이에 대응되는 eigenvector를 순서대로 나열
  5. 정렬딘 eigenvector를 토대로 기존 변수를 변환

$$ \vec{z_{1}}= \alpha_{11}\vec{x_{1}} + \cdots + \alpha_{1p}\vec{x_{p}} = \vec{\alpha_{1}}^{T}X \\ \vec{z_{2}}= \alpha_{21}\vec{x_{1}} + \cdots + \alpha_{2p}\vec{x_{p}} = \vec{\alpha_{2}}^{T}X \\ \vdots \\ \vec{z_{p}}= \alpha_{p1}\vec{x_{1}} + \cdots + \alpha_{pp}\vec{x_{p}} = \vec{\alpha_{p}}^{T}X $$

  1. 누적 분산의 증가 기울기가 무뎌지는 곳을 선택하여 principal components의 수 k 를 선택함

참고: 김성범, 강필성 교수님 강의, https://ratsgo.github.io/machine%20learning/2017/04/24/PCA/

+ Recent posts