문제 정의
데이터의 차원을 줄인다는 것은 정보를 무작정 버리는 일이 아니다. PCA(Principal Component Analysis)는 여러 방향 가운데 데이터가 가장 많이 퍼져 있는 방향을 먼저 선택한다. 이 방향으로 데이터를 사영했을 때 원래 데이터의 구조를 가장 많이 보존할 가능성이 높기 때문이다.
관측치 가 있고 평균 중심화를 마쳤다고 하자. 단위 벡터 에 대한 관측치의 사영은 다.
분산이 왜 중요한가
사영된 값 의 분산은 다음처럼 쓸 수 있다.
따라서 첫 번째 주성분을 구하는 문제는 분산을 최대화하는 방향을 찾는 문제다.
제약 조건이 없다면 의 크기만 키워 목적함수를 무한히 증가시킬 수 있으므로 단위 벡터 제약이 필요하다.
최적화 문제에서 고유값 문제로
라그랑주 승수 를 도입한다.
에 대해 미분하면 를 얻는다. 즉, 최적 방향은 공분산 행렬의 고유벡터이며 해당 방향의 분산은 고유값이다. 가장 큰 고유값에 대응하는 고유벡터가 첫 번째 주성분이 된다.
기하학적 해석
공분산 행렬은 데이터 구름의 타원체 모양을 결정한다. 고유벡터는 타원체의 축이고, 고유값은 각 축 방향으로 퍼진 정도다. PCA는 가장 긴 축부터 좌표축으로 삼는다.
| 개념 | PCA에서의 의미 |
|---|---|
| 고유벡터 | 새로운 좌표축의 방향 |
| 고유값 | 그 축이 설명하는 분산 |
| 설명 분산 비율 | 전체 분산 중 해당 축의 비중 |
Python으로 확인하기
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
X_scaled = StandardScaler().fit_transform(X)
pca = PCA(n_components=2)
X_transformed = pca.fit_transform(X_scaled)
print(pca.explained_variance_ratio_)
explained_variance_ratio_의 누적합을 보면 선택한 주성분이 전체 분산을 얼마나 설명하는지 확인할 수 있다.
언제 사용하면 안 되는가
PCA가 항상 좋은 전처리는 아니다.
- 분산이 큰 방향이 예측에 중요한 방향이라는 보장이 없을 때
- 변수의 의미와 해석 가능성이 중요한 문제일 때
- 데이터 구조가 강하게 비선형일 때
- 스케일 차이가 의미를 가지는데 무심코 표준화했을 때
정리
PCA의 핵심은 “차원을 줄인다”보다 “공분산 구조가 가장 잘 드러나는 직교 좌표계를 찾는다”에 가깝다. 최적화 문제와 고유값 문제의 연결을 이해하면 주성분 개수, 스케일링, 해석 가능성을 더 의식적으로 판단할 수 있다.1
Footnotes
-
표본 공분산 행렬의 분모를 으로 둘지 로 둘지는 고유벡터의 방향에는 영향을 주지 않는다. ↩