본문 바로가기

머신러닝

Principal Component Analysis (PCA)

PCA는 데이터들을 정사영한 점들이 가장 큰 분산을 가지도록 하는 방향이 어디인지를 구하는 것이다. 이것의 목적은 주로 차원 축소를 하기 위함인데, 가장 정보의 손실을 줄이면서 차원을 축소하려면 분산이 가장 큰 방향으로 정사영(projection)시키는 것이 좋다. 왜냐하면 분산이 크다는 것은 데이터가 많이 퍼져 있다는 뜻이고, 그만큼 데이터들이 잘 구분된다는 것을 의미하기 때문이다.

 

(1) 공분산 행렬: 원래는 random하게 분포된 데이터에 공분산 행렬을 곱해주어 변환을 시키면 데이터의 분포가 달라진다. 이때 이 행렬의 eigvenvalue와 eigenvector를 구하면 어떤 방향으로 변환이 가장 많이 일어나는지 알 수 있으므로 공분산 행렬의 eigenvector를 이용해 가장 분산이 큰 방향을 알 수 있다. 즉 데이터가 가장 많이 퍼지는 방향을 알 수 있다.

데이터의 차원(feature의 개수)이 $d$이고 데이터의 개수가 $n$일 때, $n\times d$ 크기의 데이터 행렬을 만들고 각 데이터로부터 평균값들을 빼 주어서 데이터의 평균을 0으로 맞춘 후 그 행렬을 $X$라고 하자. 공분산 행렬($C$)은 다음과 같이 정의된다.

$$C=\frac{1}{n}X^TX$$

(참고: 공분산 행렬의 각 원소들은 어떤 두 feature에 대한 데이터의 내적인데, 그 feature들 사이의 선형 상관관계가 클수록 내적값이 크게 나올 것이고 따라서 공분산 값이 크게 나올 것이다. 그런데 내적하는 데이터 값의 스케일이 서로 다르면 공분산 값만으로 상관관계를 비교하기 힘들다. 예를 들어 값 자체가 큰 데이터끼리는 상관관계가 적더라도 공분산이 크게 나올 수 있고, 반대의 경우도 가능하다. 따라서 데이터의 크기를 normalize하기 위해 데이터 row들을 그 row의 크기(예를 들면 $X_1$의 경우 $\sqrt{X_1^TX_1}$, 즉 $X_1$ 데이터의 분산의 제곱근)로 나눠주어 크기를 1로 맞춘 다음 공분산 행렬을 계산하면 그것을 correlation coefficient ($\rho$)라 한다.)

$$\rho=\frac{Cov(X,Y)}{\sqrt{Var(X)Var(Y)}}$$

한편 공분산 행렬의 eigenvector의 방향이 주성분 축 방향이고 그 eigenvalue가 해당 축 방향으로의 공분산 크기이다(데이터들을 그 축으로 정사영시켜 얻은 점들의 분산). 이때 가장 큰 eigenvalue를 갖는 eigenvector의 방향을 첫째 주성분 축 방향으로 하고, 이 방향이 공분산이 가장 큰 방향이다. 즉 이 방향으로 데이터가 가장 많이 퍼져 있다.

$$C=P\Lambda P^T$$

 

(2) 주성분 벡터를 SVD(singular value decomposition)를 이용해 구할 수도 있다.

$$X=U\Sigma V^T\rightarrow X^TX=V\Sigma^2 V^T$$

즉 $X$를 SVD하여 얻은 $V$가 주성분 벡터를 담고 있는 행렬이다. 사실, $V$의 column vector들은 $X$의 row space의 principal component, $U$의 column vector들은 $X$의 column space의 principal component이다. 위 경우에는 $d$차원의 데이터 $n$개로 $n\times d$ 행렬을 만들었으므로 데이터는 $X$의 row space에 존재한다. 이때 $X$의 row vector를 $V$의 orthonormal basis로 projection시킨 결과는 $XV$이므로, 각 데이터(row vector)를 principal axis로 정사영한 결과는 다음과 같이 얻을 수 있다.

$$XV=U\Sigma$$

 

참고:

https://angeloyeo.github.io/2019/07/27/PCA.html

 

주성분 분석(PCA) - 공돌이의 수학정리노트

 

angeloyeo.github.io

https://butter-shower.tistory.com/210

 

주성분 분석(PCA)이란?

오늘은 가장 인기있는 차원 축소 알고리즘인 주성분 분석(Principle Component Analysis, PCA)에 대해서 알아봅시다. 차원의 저주란? 많은 경우 머신러닝 문제는 훈련 샘플이 각각 수천, 혹은 수백만개의

butter-shower.tistory.com

'머신러닝' 카테고리의 다른 글

Graph Neural Network  (0) 2022.04.26
Feature Selection  (0) 2022.04.24
Bias & Variance  (0) 2022.04.24
Regularization  (0) 2022.04.24
Cross Validation  (0) 2022.04.24