[ML] PCA (Principal Component Analysis, 주성분 분석)

Yeong·2025년 4월 21일

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 = PCA(n_components=2)

# 학습 + 변환
X_pca = pca.fit_transform(X)

print(X_pca.shape)  # (샘플 수, 2)
  • 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 줄일 때, 시각화할 때, 노이즈 제거할 때 매우 유용하다.
profile
데이터 엔지니어 도전기 / 스터디 노트

0개의 댓글