본문 바로가기

Machine learning/Unsupervised Learning

[차원축소] PCA(주성분분석)

이 글은 Joshua StarmerStatQuest: Principal Component Analysis (PCA), Step-by-Step 를 정리한 것임을 밝힙니다.

 

PCA

주성분 분석(PCA, Principal Component Analysis)은 고차원 데이터의 주요 특성을 추출해 차원을 축소하는 통계적 방법이다. 이 방법은 데이터에서 중요한 정보를 유지하면서 차원을 감소시켜 데이터를 더 단순한 형태로 표현한다. 이 글에서는 PCA를 하는 과정을 설명하면서 PCA에 대해 설명해보겠다.

 

PCA 과정

Gene1, Gene2 피처 2개가 있는 데이터로 예시를 들어보자.

1. 데이터 정규화 및 이동

PCA를 위해서는 먼저 피처들을 같은 스케일로 맞춰줘야 한다. 단위가 같은 크기로 반영되어야 하기 때문이다. 또한, 데이터의 중심점을 찾고, 중심을 원점으로 가도록 모든 데이터들을 평행이동 시킨다. (정규화를 하면 평균이 0으로 맞춰지고 스케일링도 된다!)

※ SVD를 통한 PCA는 원점을 기준으로 PC를 구하기 때문에 평행이동을 해야한다!

피타고라스 정리에 의해 사영시킨 거리가 길어질수록 데이터와 직선 사이의 거리는 가까워진다.

 

2. PC(주성분) 찾기

데이터를 가장 잘 설명할 수 있는 PC(주성분)를 찾아야 한다.

어떻게? 원점을 지나는 직선을 긋는 다음에 데이터포인트를 직선 위로 사영시킨다.

각 데이터들에서 사영시킨 지점과 원점까지의 거리의 제곱합이 최대가 되는 지점이 최적의 PC가 된다. 이 말은 사영시킨 지점과 데이터 사이의 거리의 제곱합이 최소가 된다는 의미와 같다.

 

3. 주성분 해석

위 그림처럼 빨간선이 첫번째 주성분(PC)인 PC1으로 찾아졌다고 해보자. PC1에서는 Gene1가 4만큼 커질 때 Gene2는 1 밖에 안커진다. 이는 Gene1 정보가 PC1에서 중요하다는 것을 의미한다.

그리고 이렇게 Gene1과 Gene2의 축에서 만들어진 PC1을 변수들의 선형결합(linear combination)으로 이루어졌다고 한다.

 

4. 주성분의 고유 벡터 찾기

(3) 에서 빨간선을 벡터라고 보고, 단위 벡터를 구하기 위해 길이를 1로 스케일을 맞춰준다. (3)에서 Gene1과 Gene2의 비율이 4:1이었는데, 이 벡터를 단위 벡터로 만들면서 길이를 1로 맞춰주기 때문에 0.97:0.242가 된다. (비율은 4:1로 유지됨!)

아래 그림에서 빨간 화살표가 PC1의 단일 벡터, 고유 벡터가 된다. 그리고 이 벡터에서 각각의 피처(Gene1, Gene2)들의 비율은 Loading scores라고 한다.

 

5. 주성분의 고유값, 특이값 찾기

 

d: 원점과 사영시킨 지점까지의 거리
PC의 고유값과 특잇

위 수식을 풀어보면, 사영시킨 거리들의 제곱합을 SS(distances)라고 하고 이걸 n-1로 나눠 거리의 평균을 구하면 Eigenvalue(고유값)을 구할 수 있다. 마찬가지로 SS(distances)에 루트를 씌우면 Singular value(특잇값)을 구할 수 있다.

고유값은 분산으로 해석할 수도 있는데 이를 통해 PC1의 Eigenvalue가 클수록 데이터의 분산을 잘 설명하는 PC라고 볼 수 있다. 예를 들어, PC1의 고유값이 15이고 PC2가 3이라면 PC1의 분산은 83%, PC2는 17%가 된다.

 

6. 그 다음 주성분 찾기

PC1과 직교하는 선을 긋고 (2)에서와 마찬가지로 최적의 선을 구한다. (이 예시에서는 2차원이라 그냥 직교하는 선이 PC2가 된다.) 만약, 변수가 3개 있는 3차원 공간이라면 직교 평면 상에서 직선을 찾는 것이 되므로, (2)에서처럼 제곱합이 최대가 되는 선을 직교 평면 위에서 찾으면 된다.

 

7. 주성분으로 데이터 다시 표현하기

PC선을 축으로 사영시킨 점을 좌표 삼아 데이터를 다시 표현할 수 있다.

이 과정이 특잇값 분해(SVD)를 이용한 PCA의 과정이다.

 

8. 주성분 개수 결정

위 그림처럼 각 PC의 분산 / PC들의 전체 분산의 합 을 통해 각 PC가 데이터의 분산을 몇 % 설명할 수 있는지 나타낼 수 있다. 위 그림에서는 PC1 쪽으로 데이터가 많이 퍼져있어 PC1이 83%로 데이터를 설명하고 있다.

Scree plot

데이터에 대한 분산도를 그림으로 표현한 게 Scree plot이다.

분산도의 기준을 threshold(일반적으로 90%를 사용함)로 사용하여 몇 개의 PC로 데이터를 설명할지 고려할 수 있다. 주성분(PC)의 최대 개수는 min(샘플 수-1, 피처 수)로 만약 5개 데이터가 있고 7개 피처가 있으면 최대 주성분의 개수는 4(=5-1)개가 되며, 10개의 데이터가 있고 3개의 피처가 있으면 주성분의 최대 개수는 3개가 된다.

샘플보다 PC가 많아지는 경우 새로 생기는 PC들의 고유값이 0이 되기 때문이다. (이건 직접 해보면 금방 이해된다.)

 

이렇게 축소된 차원으로 시각화를 하거나, 과적합 문제를 해결하여 모델의 일반화 성능을 높일 수 있다.