PCA의 핵심 알고리즘 구조
PCA는 원본 데이터를 상호 상관이 없는 새로운 좌표계로 변환하는 직교 선형 변환이다. 이 변환의 기초가 되는 수학적 기반은 공분산 행렬의 고유벡터와 고유값이다. 알고리즘은 ①데이터 중심화 ②공분산 행렬 계산 ③고유값 분해 또는 특이값 분해(SVD) ④주성분 선택 및 데이터 투영의 네 단계로 구성된다.
고유값 분해(EVD) vs 특이값 분해(SVD): 구현 선택 기준
고유값 분해 방식은 중심화된 데이터 행렬에서 공분산 행렬(Cv = A_c^T × A_c)을 명시적으로 계산한 후 그 고유벡터와 고유값을 구한다. 이 방식은 특성 수가 적을 때 효율적이지만, 공분산 행렬 계산 단계에서 메모리 집약적이며 수치 안정성이 낮을 수 있다. SVD 방식은 데이터 행렬 자체를 직접 분해하므로 고유값 분해보다 수치적으로 안정적이며, 메모리 효율도 우월하다. scikit-learn 구현은 SVD를 기본 방식으로 채택하며, svd_solver 파라미터로 'full', 'auto', 'randomized'를 지원한다.
실무 적용 시 주의점
첫째, 데이터 스케일링이 필수다. 표준화 없이 실행하면 분산이 큰 특성에 우선순위가 쏠린다. 둘째, 설명 분산 비율(explained_variance_ratio_)을 검토하여 몇 개 주성분을 유지할지 결정해야 한다. 셋째, 대규모 데이터셋에서는 randomized SVD로 계산 복잡도를 O(n²·k)로 줄일 수 있다. 넷째, 특성 수가 표본 수보다 많은 경우 SVD를 직접 사용하고, 희소 데이터는 TruncatedSVD를 고려해야 한다.