통계, IT, AI

주성분분석(Principal Component Analysis; PCA)에 관하여 본문

통계

주성분분석(Principal Component Analysis; PCA)에 관하여

Harold_Finch 2017. 1. 30. 00:10


1. 들어가며

2차원의 세계가 존재한다고 가정하고 그곳을 플랫랜드라고 부르자. 즉, 플랫랜드에는 높이라는 것이 없다. 플랫랜드에서 일어나는 일을 상상해보자. 먼저 그곳의 주민들을 관찰한다면 아래와 같은 모습일 것이다.[각주:1]  테두리는 피부이고 그 안에 보이는 것은 장기이다. 우리는 장기를 관찰할 수 있고 심지어 만질 수도 있다.


그림 1. 무엇인가를 이야기하고 있는 플랫랜드의 주민들


그곳의 주민 A를 들어 다른 곳에 두자. 그러면 플랫랜드의 사람들은 A가 갑자기 사라지고 엉뚱한 곳에 나타났다고 생각할 것이다. 우리가 플랫랜드에 다리를 걸쳐둔다면 그들은 동그란 두개의 원을 볼 수 있을텐데 사실 그 두개의 원이 하나의 존재라는 것을 결코 쉽게 이해하지 못할 것이다. 


이제 우리에게 과제가 하나 주어졌다. 아래와 같은 3차원의 물체를 어떻게 해야 그나마 그들에게 잘 이해시킬 수 있을까? 즉, 이 물체를 어떻게 회전시켜서 어떤 모습을 그들에게 보여줘야 2차원 세계의 주민이 이 물체의 특징을 가장 잘 알 수 있을까? 마우스를 이용하여 회전시켜가면서 생각해보자. 잘 보이지 않는다면 휠을 사용하여 확대할 수 있다.



사람마다 이견은 있겠지만 대체적으로 아래와 같은 모습 즉, 위나 아래에서 본 모습일 것이다. 그리고 그 이유는 이렇게 회전시키는 것이 이 물체의 특성을 가장 잘 나타내기 때문일 것이다. 참고로 이 물체는 스텔스 폭격기인 B-2이다.


그림 2. B-2의 특징이 가장 잘 드러난다.


2. PCA

위의 예를 통해서 PCA가 무엇인지를 알 수 있다. PCA란 어떤 자료의 특징을 최대한 보존하면서 차원을 축소시키는 방법론이다. 특징을 최대한 보존한다는 것과 차원을 축소한다는 것을 각각 알아보자. 


특징을 최대한 보존한다는 것은, 수리적인 용어를 사용하자면 분산을 최대한 크게 하자는 것이다. 즉, 어떤 자료를 선형 변환하되, 가능한 한 적은 측면을 바라봐도 특징을 알 수 있도록 축 하나하나의 분산을 최대화하고, 변환 후 각 축은 서로 연관성이 없도록 한다. 


어떤 자료를 \(X\)로 나타내자. \(X\)는 \(N\times p\) 매트릭스로 행과 열은 각각 자료와 변수를 나타내고 각 열(\(x_i\))의 평균은 0으로 한다. 이를 통하여 \(X\)의 공분산 \(\hat{\Sigma}\)을 \(X^TX\)로 나타낼 수 있다. 선형 변환 후의 자료는 \(Y=[Y_1, Y_2,\cdots , Y_p]=[Xw_1, Xw_2, \cdots, Xw_p]=Xw\)로 표기하고 앞의 열부터 큰 분산을 갖는다고 하자. \(w_j\)는 길이 \(p\)의 열벡터이다. 먼저 \(Y\)의 첫번째 열부터 구해보자. 


\(Var(Y_1)=Var(Xw_1)\)을 최대화할 때 \(\left \| w_1 \right \| \rightarrow \infty\)라는 자명한 해가 존재하므로 \(\left \| w_1 \right \| = 1\)이라는 제약을 주고 다음을 최대화 한다. 


\(J(w_1)=Var(Xw_1)+\lambda_1(w_1^Tw_1-1)=w_1^T\hat{\Sigma}w_1+\lambda_1(w_1^Tw_1-1)\)


단, \(\lambda_1\)은 라그랑즈 승수이다. 미분을 통하여 해를 구하자.


\begin{eqnarray*} \frac{\partial}{\partial w_1}J(w_1)&=&2\hat{\Sigma}w_1-2\lambda_1w_1=0 \Leftrightarrow \hat{\Sigma}w_1&=&\lambda_1w_1 \end{eqnarray*}


따라서 \(Y_1\)의 분산을 최대화하는 \(w_1\)는 공분산 행렬의 고유벡터임을 알 수 있다. 그리고 분산의 최대화를 위하여 가장 큰 고유값을 \(\lambda_1\)로 하면 \(Var(Y_1)=\lambda_1\)임 또한 알 수 있다. \(w_2\)는 두번째로 큰 고유값에 대응하는 고유벡터이며 나머지도 그와 같은 방법으로 구하면 된다.[각주:2] 이렇게 만들어진 \(w\)는 \(w^T=w^{-1}\)이며 \(det(w)=1\)이므로 회전 변환 행렬임을 알 수 있다. 그리고 서로 다른 \(i\)와 \(j\)에 대하여 \(Cov(Y_i,Y_j)=w_i^T\hat{\Sigma}w_j=0\)이므로 변환 후 각 축은 서로 연관성이 없음을 알 수 있다.


이제 차원을 축소한다는 것을 알아보자. 고유값과 고유벡터의 성질을 이용하면 \(tr(\hat{\Sigma})=\sum Var(x_i)=\sum \lambda_i\)임을 알 수 있다. 즉, 회전변환으로는 총 분산이 변하지 않는다. 이제 \(Y_1\)부터 적절한 수의 \(Y_k\)를 선택하면 \(\sum_{j=1}^{k}\lambda_j/\sum_{i=1}^{p} \lambda_i\ \)만큼의 정보(분산)를 확보하면서 차원을 축소할 수 있다. 


3. B-2 다시 보기

1. 들어가며에서 소개한 B-2로 PCA를 해보자. 첨부한 csv 파일에 해당되는 데이터가 있으며 R 코드 또한 첨부한다. 

pca.zip

먼저 \(X\)의 공분산 행렬은 다음과 같다.


$$Cov(X)=\begin{bmatrix} 0.44& -1.46 & 0.64\\  -1.46& 5.5 & -2.24 \\  0.64 & -2.24  & 9.92\end{bmatrix}$$


이 공분산 행렬의 고유값은 크기 순서대로 10.98,  4.83,  0.05이며 고유벡터로 구성된 \(w\)는 아래와 같다.


$$w=\left[w_1, w_2, w_3\right]=\begin{bmatrix} 0.111& 0.232 & 0.966 \\  -0.4 & -0.879 & 0.257 \\  0.91 & -0.415  & -0.005\end{bmatrix}$$


앞의 두 축만 선택하면 총 분산의 (10.98+4.83)/(10.98+4.83+0.05)=99.7%가 설명되므로 효율적인 차원 축소이다. \(Y_1=Xw_1, Y_2=Xw_2\)로 구성한 뒤 그림을 그려보자. 놀랍게도 그림 2와 같다.


그림 3. PCA 수행 결과


4. 마치며

PCA라는 방법이 고유값과 고유벡터를 사용한다는 것은 알고 있었지만 PCA가 어떤 의미를 지니고 있고 왜 고유값과 고유벡터를 사용하는지는 제대로 알지 못했다. 이번 기회에 제대로 알기 위해서 노력했지만, \(w_2\)가 왜 두번째로 큰 고유값에 대응되는 고유벡터여야 하는지는 아직도 해결되지 않은 부분이다. 좀 더 깊게 들어가자면 고유값과 고유벡터의 성질도 정확하게 이해하지 못했다. 알고자 할수록 모르는 것만 더 늘어나는 느낌이다.


  1. 출처 : Flatland - The Film 캡쳐, https://www.youtube.com/watch?v=Mfglluny8Z0 [본문으로]
  2. 안타깝게도 이 부분은 이해가 부족하여 왜 그러한지 알지 못한다. [본문으로]

'통계' 카테고리의 다른 글

[Bayes] 베이지안 문제(몬티홀 등)  (0) 2018.02.03
작성중  (0) 2017.03.01
표본 분산의 분산  (3) 2017.01.16
공분산과 누적분포함수 간의 관계  (0) 2017.01.05
표본 범위와 표본 표준편차 비교  (0) 2016.10.12
Comments