PCA (Principal Component Analysis, 주성분 분석)
- 고차원 데이터를 → 낮은 차원으로 축소하면서, 최대한 정보(분산)을 보존하려는 기법.
- 한줄 요약하면, "데이터를 가장 잘 설명하는 방향으로 압축하는 기술."
왜 쓰나?
- 데이터 차원이 너무 높으면 ➔ 계산 복잡, 오버피팅 위험 커짐
- 비슷한 정보끼리 묶어 ➔ 축소(압축) 시키기
- 시각화(2D로 줄이기)할 때도 필수고, 모델 성능 개선할 때도 쓰임.
PCA가 하는 일 (비유)
"3D 물체를 평면에 그림자로 찍는다고 생각해보자."
- 데이터를 "가장 잘 퍼져 있는 방향"으로 눌러 찍어서(투영), 그렇게 새 좌표축(주성분)을 만든다.
- 이 축들은 원래 축이 아니라, 데이터가 가장 잘 퍼지는 방향을 따라간다.
PCA 과정 (step by step)
1. 데이터 스케일링 (표준화)
- PCA는 거리 기반이라, feature scale이 다르면 안됨
2. 공분산 행렬 계산
- 각 feature 간 "서로 얼마나 함께 변하는지" 계산
3. 고유값, 고유벡터 계산
4. 주성분(Principal Components) 선택
- 고유값이 큰 순서대로 → 정보 많이 담은 방향 선택
5. 데이터를 새 좌표계로 변환(투영)
공식 용어 정리
| 용어 | 뜻 |
|---|
| 주성분(Principal Component) | 데이터가 가장 잘 퍼진 새로운 방향 |
| 고유값(Eigenvalue) | 주성분이 담고 있는 데이터 분산량 |
| 고유벡터(Eigenvector) | 주성분의 방향 |
이미지로 설명하면:
(원래 좌표축)
↑ y
|
|
|
|________→ x
(새로 찾은 주성분 방향)
↗ PC1
- 기존 x,y 축 말고
- PC1, PC2라는 "새 축"으로 데이터를 다시 표현하는 것
sklearn PCA 사용법
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(X_pca.shape)
n_components=2 => 2차원으로 줄이겠다
PCA 사용시 주의점
| 주의사항 | 이유 |
|---|
| 데이터 표준화 먼저 해야 함 | 스케일 차이로 방향 왜곡될 수 있음 |
| 해석이 직관적이지 않을 수 있음 | 주성분은 원래 feature 의미랑 다를 수 있음 |
| 차원을 줄이면 정보 손실 있을 수 있음 | 그래서 얼마나 설명하는지(분산 비율) 꼭 체크해야 함 |
PCA와 설명 분산 비율(explained variance ratio)
- 차원을 줄이면 당연히 정보 손실이 있을 수 있다.
- 그래서 PCA가 각 주성분이 전체 데이터를 얼마나 잘 설명하는지 비율을 보여준다.
print(pca.explained_variance_ratio_)
예를 들어:
- PC1이 70% 설명
- PC2가 20% 설명
- 그러면 PC1 + PC2로 전체 90%를 커버할 수 있다는 뜻.
요약
"PCA는, 고차원 데이터를
가장 잘 퍼진 방향으로 눌러서,
저차원으로 정보를 압축하는 기술이다."
🍬 참고
- PCA는 비지도학습(unsupervised) 기법이다. (y값 안 씀)
- 지도학습 전에 feature 줄일 때, 시각화할 때, 노이즈 제거할 때 매우 유용하다.