본문 바로가기

프로그래밍/데이터사이언스

차원축소알고리즘 (PCA)

어떠한 데이터가 있다고 가정하자

1차원

2차원

3차원

4차원

5차원

1차원에 있던 데이터는 2차원으로 차원이 늘면서 거리가 늘어나고 2차원은 3차원이 되면서 거리가 늘어나고 차원이 커질 수록 늘어난다. 또한 데이터가 희소화 된다.

 

만약 수백개의 피처을 작은 피처으로 축소할 수 있다면 어떻게 될까?

그러면 당연히 데이터의 크기가 줄어들어 학습 시간을 절약 할 수 있고 인간이 다룰 수 있는 거대한 피처를 줄여서 좀 더 핸들링 하기 쉽게 만들 수 있다.

피처를 줄이려면 불필요한 피처를 제거하고 데이터의 특성에 부합하는 중요한 피처만 선택하여 추출하면 피처 추출 전의 정보를 최대한 훼손하지 않고 추출 할 수 있다.

여기서 피처 추출에 대해 이해가 가지 않을 수 있다.

 

예시를 들면 어떠한 사람이 건강보험공단의 공단정기검진으로 피 검사를 한 후 피처를 추출한다고 생각해보자

혈액검사를 한 이후 혈액으로 알 수 있는 피처는 매우 많을 것이다. (의학적인 지식은 없어 상세 내용이 무엇이 있는지는 설명하지 못하는 점 양해바란다.)

하지만 병원에서는 이 많은 피처를 세부적으로 다 분석하여서 알려주는 것이 아니라 중요한 지표들을 추출해  요약해서 결과를 보여준다. 예시가 적절한지는 잘 모르겠지만 이런 느낌이다 라는 것을 이해해주길 바란다.

 

PCA

PCA는 principal Component Analysis 의 약자이다.

PCA는 원본데이터의 데이터를 저 차원의 공간으로 만들어 데이터를 축소하는 방법인데 만약 3차원 데이터가 있다고 하면 이것을 2차원의 공간으로 집어넣어서 데이터를 축소한다. 

위에 그림을 보면 3차원 안에 정보가 담겨있다. 하지만 데이터 분석을 할 때 3차원인 데이터를 분석하는 것은 생각보다 복잡하다. 그래서 밑에 그림처럼 3차원 안에 있는 정보를 2차원으로 만들어 버리는 것을 PCA 기법을 사용해서 한다.

 

PCA는 원본 데이터에서 가장 큰 데이터 변동성을 기반으로 첫번째 축을 만들고

두번째 축으로는 그 다음 변동성이 큰 두번째 축을 만드는데 첫번째 축의 직각이 되는 축이 된다.

처음에는 왜 직각인 축이 변동성이 큰 축인지 이해가 되지 않았는데 내 나름대로의 이해방식을 써보자면 제일 중요한 변화는 x의 따라 y 가 변하는 pca 1번 축이 가장 중요하다. 그 다음 중요한 것은 무엇일까? 바로 pca1번축 안에서 정보가 변화할 때 주변에 있는 점(정보)들이 얼마나 멀리 떨어져 있는지 알아야하기 때문에 pca2번축은 1번축에 직각한다. 라고 이해했다.

 

pca를 구하는 방법은

1. 원본 데이터의 공분산 행렬을 추출한다.

2. 추출된 공분산행렬은 대칭행렬이기 때문에 고유벡터와 고유값으로 분해가 된다. 고유벡터가 PCA의 축이 된다. 또한 입력데이터의 분산이 큰 방향을 나타낸다.

3. 원본 데이터를 고유 벡터로 변환한다.

 

참고-공분산이란?

분산은 한 변수의 데이터 변동을 나타내고 

공분산은 두 변수간의 변동을 의미한다. 공분산은 np.cov()로 구할 수 있는데 cov(x, y) >0 은 x가 증가할 떄 y 도 증가하고 cov(x, y)<0 은 x가 증가할 때 y는 감소한다.