이번 포스팅에서는 주성분 분석(PCA)에 대해 알아보도록 하겠습니다. 주성분 분석은 차원 축소 방법 중에 가장 많이 사용되는 기법입니다. 그만큼 필수적으로 알아야 할 알고리즘 입니다.
PCA(주성분 분석, Principal Component Analysis)
PCA는 여러 변수 간 존재하는 상관관계를 이용해 이를 대표하는 주성분을 추출합니다. 이렇게 말하니 좀 어렵게 느껴지는데요. 단순하게 모든 변수 특성을 합쳐 몇개로 압축한다고 이해하면 좋습니다. 이 압축을 통해 주성분을 추출하는데 이것이 핵심입니다. 이렇게 압축해 추출된 주성분으로 차원을 축소하는 기법입니다.
고차원에서 저차원으로 차원을 축소하는데 가장 큰 아이디어는 데이터의 정보를 그대로 유지해보자는 것이었습니다. 결국 저차원으로 축소하되 대표하는 축을 만드는 작업입니다. 방법은 "변수들끼리 멀리 떨어진 정도에 대한 정보는 유지하자"는 것입니다. 즉 분산은 그대로 유지한 상태에서 차원을 축소하여 정보손실을 최소화했습니다.
그렇기 때문에 주성분 분석을 통해 다중공선성 문제를 해결에 활용하기도 합니다. PCA는 선형적(leaner)으로 상관관계가 없는 독립된 변수들을 찾는 기법이기 때문에 다중공선성 문제는 발생하지 않습니다.
PCA의 한계점
- 데이터 분포가 가우시안(정규분포)이 아니거나 다중 가우시안 자료에 대해서는 적용이 어렵습니다.
- 분류 및 예측 문제에 대해서 데이터 범주를 고려하지 않기 때문에 범주간 구분이 잘 되도록 변환해주는 방식은 아닙니다. 단지 차원에 뿌려진 무수한 점들의 분산만을 고려합니다.
결론적으로 PCA를 통해 차원 축소를 한다고 정확도가 증가한다는 보장은 없습니다. 이러한 한계점을 보완한 대안 모델로 커널 PCA, LLE(Locally Linear Embedding) 등이 등장했습니다.
PCA 동작 원리
- 학습 데이터셋에서 분산(변동성)이 최대인 축(PC1)을 찾습니다.
- PC1과 수직이면서 분산이 최대인 축(PC2)을 찾습니다.
- 첫 번째 축과 두 번째 축에 직교하고 분산을 최대한 보존하는 세 번째 축을 찾습니다.
- 1~3의 방법으로 차원수만큼 찾습니다.
결론적으로 내가 분석할려고 하는 데이터들의 분산을 가장 잘표현하는 축(차원)을 주성분이라고 합니다. 이런 방식으로 데이터에서 주성분을 추출하였습니다. 이는 고차원에서 주성분(저차원)으로 공간으로 투영(Projection)하는 작업을 한 것입니다.
Explained Variance Ratio
Explained Variance Ratio는 분산을 얼마나 보존하는가를 나타내는 지표입니다. 각각의 주성분 벡터가 이루는 축에 투영(projection)한 결과의 분산의 비율을 말합니다.
예를 들어, PC1 84.2%, PC2 14.6 이면 2개가 98.8% 분산 표현한다고 볼 수 있습니다. 그러면 이 지표는 무엇에 쓰는 것일까요? 정답은 내가 추출한 주성분이 원 데이터의 특성을 얼마나 가지고 있는지를 알수 있습니다. 그래서 주성분의 수를 선택할 때 사용됩니다.
주성분 수의 선택방법
- 방법 1 : Elbow point(엘보우 포인트)에 해당하는 주성분 수 선택
- 방법 2 : 일정 수준 이상의 분산비를 보전하는 최소의 주성분 수(70%이상, Elbow point가 완만해서 보이지 않을 경우 사용)
주성분 수를 선택하고 나면, 주성분이 각각 어떤 특성들이 반영되었는지 로딩벡터를 통해 알 수 있습니다. 로딩 벡터를 통해 주성분을 분석에 대해서는 링크를 참고하시기 바랍니다.
활용 분야
PCA는 얼굴 인식 분야에서 가장 보편 적으로 사용합니다. 얼굴 이미지 데이터는 픽셀 값의 차원이 높을 수 있으며, 이로 인해 계산 비용이 높아질 수 있습니다. PCA를 사용하여 데이터의 주요 주성분만 선택하여 차원을 줄이면, 데이터의 크기를 축소하고 계산 효율성을 향상시킵니다.
또한, PCA를 사용하면 노이즈를 제거하는 효과도 얻을 수 있습니다. 그래서 얼굴 이미지 데이터에서 중요한 패턴을 찾는 데 사용합니다. 주성분은 데이터의 분산을 최대화하도록 정렬되며 얼굴의 주요 특징을 나타낼 수 있습니다.
왜 차원 축소를 하는지에 대한 내용은 아래를 참고하시기 바랍니다.
'데이터 분석' 카테고리의 다른 글
차원 축소 - 특잇값 분해(SVD) 및 PCA 관계 (0) | 2023.10.11 |
---|---|
차원 축소 - t-SNE의 특징 및 PCA와 차이점 (1) | 2023.10.11 |
차원축소 - 투영과 매니폴드(manifold) 학습은 어떻게 다른가? (0) | 2023.10.10 |
[머신러닝] Feature Selection 방법 - Filter, Wrapper, Embedded (0) | 2023.10.06 |
[머신러닝] 차원 축소(Dimensionality Reduction) 이유 및 방법 (0) | 2023.10.06 |