콘텐츠로 이동

차원 축소 (Dimensionality Reduction)

난이도: 중급~고급
선수 지식: 선형대수 (고유값 분해, SVD), 확률/통계 기초
관련 문서: k-NN | 클러스터링 | 선형 모델 | SVM


개요

차원 축소(Dimensionality Reduction)는 데이터의 특성(차원) 수를 줄이면서 가능한 한 많은 정보를 보존하는 기법이다. 다음과 같은 목적으로 사용된다:

  • 시각화: 고차원 데이터를 2D/3D로 표현
  • 차원의 저주 완화: 고차원에서 모델 성능 저하 방지
  • 노이즈 제거: 불필요한 변동 제거
  • 전처리: 후속 모델의 성능/속도 개선
  • 특성 추출: 의미 있는 잠재 변수 발견

핵심 개념

1. PCA (Principal Component Analysis, 주성분 분석)

목표

최대 분산 방향의 직교(orthogonal) 축을 찾는다.

알고리즘

  1. 데이터 중심화 (평균 빼기)
  2. 공분산 행렬 계산: \(\mathbf{C} = \frac{1}{n-1}\mathbf{X}^T\mathbf{X}\)
  3. 고유값 분해: \(\mathbf{C}\mathbf{v}_i = \lambda_i\mathbf{v}_i\)
  4. 고유값 크기 순으로 상위 \(k\)개 고유벡터 선택
  5. 투영: \(\mathbf{Z} = \mathbf{X}\mathbf{V}_k\)

SVD와의 관계

\[\mathbf{X} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^T\]

PCA의 주성분은 \(\mathbf{V}\)의 열이며, 분산은 \(\frac{\sigma_i^2}{n-1}\)이다. 실제 구현에서는 SVD를 직접 사용한다 (공분산 행렬을 명시적으로 계산하지 않아도 됨).

설명된 분산 비율 (Explained Variance Ratio)

\[\text{EVR}_i = \frac{\lambda_i}{\sum_j \lambda_j}\]

누적 EVR 그래프(scree plot)에서 원하는 임계값(예: 95%)에 해당하는 \(k\) 선택.

가정과 한계

가정 한계
선형 관계 비선형 구조를 포착하지 못함
분산 = 정보 분산이 작지만 중요한 정보 놓칠 수 있음
비교 가능한 스케일 반드시 스케일링 필요

변형

  • Kernel PCA: 커널 트릭을 적용한 비선형 PCA
  • Incremental PCA: 대규모 데이터를 배치로 처리
  • Sparse PCA: 희소한 주성분 (해석 가능성 향상)
  • Robust PCA: 이상치에 강건한 PCA

2. t-SNE (t-distributed Stochastic Neighbor Embedding)

목표

고차원의 지역 이웃 구조(local neighborhood structure)를 저차원에서 보존하여 시각화한다.

알고리즘

  1. 고차원: 가우시안으로 쌍별 유사도 계산 $\(p_{j|i} = \frac{\exp(-\|x_i-x_j\|^2/2\sigma_i^2)}{\sum_{k\neq i}\exp(-\|x_i-x_k\|^2/2\sigma_i^2)}\)$

  2. 대칭화: \(p_{ij} = \frac{p_{j|i} + p_{i|j}}{2n}\)

  3. 저차원: Student t-분포(자유도 1)로 유사도 계산 $\(q_{ij} = \frac{(1+\|y_i-y_j\|^2)^{-1}}{\sum_{k\neq l}(1+\|y_k-y_l\|^2)^{-1}}\)$

  4. KL 발산 최소화: \(KL(P\|Q) = \sum_{i \neq j} p_{ij}\log\frac{p_{ij}}{q_{ij}}\)

왜 t-분포인가?

고차원의 거리를 저차원에 표현하면 군집 문제(crowding problem)가 발생한다. t-분포의 무거운 꼬리(heavy tail)가 이 문제를 완화: 멀리 있는 점들이 저차원에서 더 멀리 배치될 수 있다.

Perplexity (혼란도)

  • 효과적인 이웃 수를 결정 (~5-50)
  • 가우시안의 대역폭 \(\sigma_i\)를 제어
  • 결과에 매우 민감: 항상 여러 값으로 시도해야 함

핵심 주의사항

주의점 설명
클러스터 크기 무의미 같은 클러스터라도 크기가 다를 수 있음
클러스터 간 거리 무의미 먼 클러스터가 실제로 가까울 수 있음
비결정론적 매 실행마다 다른 결과
새 데이터에 적용 불가 파라메트릭 매핑 없음
\(O(n^2)\) 복잡도 Barnes-Hut 근사로 \(O(n\log n)\) 가능

3. UMAP (Uniform Manifold Approximation and Projection)

이론적 기반

리만 기하학(Riemannian geometry)과 대수적 위상수학(algebraic topology)에 기반한다.

알고리즘 (간략화)

  1. 고차원에서 퍼지 단순 복합체(fuzzy simplicial complex) 구성 (가중 k-NN 그래프)
  2. 저차원에서 이 위상 구조를 최대한 보존하는 표현 탐색
  3. 고차원과 저차원 퍼지 집합 간의 교차 엔트로피 최적화

t-SNE와의 비교

속성 t-SNE UMAP
전역 구조 보존 약함 더 잘 보존
속도 느림 (\(O(n^2)\)) 빠름 (준이차)
새 데이터 변환 불가 transform() 가능
안정성 실행마다 다름 더 안정적
이론적 기반 약함 강함 (위상수학)

핵심 파라미터

파라미터 효과
n_neighbors 작으면 지역, 크면 전역 구조 반영
min_dist 작으면 조밀, 크면 분산된 클러스터
metric 거리 메트릭 선택

4. LDA (Linear Discriminant Analysis, 선형 판별 분석)

목표 (지도 학습)

클래스 간 분산 / 클래스 내 분산을 최대화하는 방향을 찾는다.

Fisher 기준

\[\max_{\mathbf{w}} \frac{\mathbf{w}^T\mathbf{S}_B\mathbf{w}}{\mathbf{w}^T\mathbf{S}_W\mathbf{w}}\]
  • \(\mathbf{S}_B\): 클래스 간 산포 행렬 (Between-class scatter)
  • \(\mathbf{S}_W\): 클래스 내 산포 행렬 (Within-class scatter)

일반화 고유값 문제: \(\mathbf{S}_W^{-1}\mathbf{S}_B\mathbf{w} = \lambda\mathbf{w}\)

최대 성분 수

\[\min(p, C-1)\]

\(C\)는 클래스 수이므로, 이진 분류에서는 최대 1개 성분만 가능.

가정

  • 각 클래스가 가우시안 분포
  • 모든 클래스의 공분산 행렬이 동일
  • 클래스 간 선형 분리 가능

PCA vs LDA

속성 PCA LDA
학습 유형 비지도 지도
최적화 대상 최대 분산 최대 클래스 분리
최대 성분 수 \(\min(n, p)\) \(\min(p, C-1)\)
가정 선형 가우시안 + 동일 공분산
역할 차원 축소만 차원 축소 + 분류기
graph LR
    subgraph "PCA: 최대 분산"
        A1[전체 데이터의 분산이<br/>가장 큰 방향 탐색]
    end
    subgraph "LDA: 최대 클래스 분리"
        A2[클래스를 가장 잘<br/>구분하는 방향 탐색]
    end

5. 기타 방법 (간략 소개)

방법 핵심 아이디어 주요 사용처
ICA (독립 성분 분석) 통계적으로 독립인 성분 탐색 신호 분리
Factor Analysis 관측 변수 = 잠재 인자 + 잡음 사회과학
NMF (비음수 행렬 분해) \(\mathbf{X} \approx \mathbf{W}\mathbf{H}\), \(W,H \ge 0\) 해석 가능한 부분 기반 표현
Autoencoder 인코더-디코더 신경망 비선형 차원 축소
Random Projection Johnson-Lindenstrauss 보조정리 빠른 근사 축소

상세 비교표

방법 지도 학습 선형 보존 대상 확장성 새 데이터
PCA 아니오 전역 분산 매우 좋음 가능 (투영)
t-SNE 아니오 아니오 지역 구조 나쁨 (\(O(n^2)\)) 불가
UMAP 아니오/반지도 아니오 지역 + 일부 전역 좋음 가능
LDA 클래스 분리 좋음 가능

언제 사용하는가

상황 추천 방법
전처리 / 노이즈 제거 PCA
탐색적 시각화 (2D/3D) t-SNE, UMAP
분류 성능 향상 + 차원 축소 LDA
대규모 데이터 시각화 UMAP
빠른 차원 축소가 필요 PCA, Random Projection
비선형 구조 탐색 UMAP, Kernel PCA

흔한 오해와 함정

1. "t-SNE 플롯의 클러스터 간 거리가 의미 있다"

  • 아니다. t-SNE는 지역 구조만 보존한다. 클러스터 간 거리와 크기는 해석하면 안 된다.

2. "PCA 전에 스케일링이 필요 없다"

  • 분산 기반이므로 스케일이 큰 특성이 결과를 지배한다. 반드시 스케일링(보통 StandardScaler)해야 한다.

3. "PCA 성분 수는 많을수록 좋다"

  • 너무 많으면 노이즈까지 보존한다. scree plot으로 적정 수준(예: 95% 분산) 선택.

4. "LDA는 항상 PCA보다 낫다 (분류 목적)"

  • LDA는 가우시안 + 동일 공분산 가정이 필요. 이 가정이 맞지 않으면 PCA가 더 나을 수 있다.

5. "UMAP이 t-SNE를 완전히 대체한다"

  • 대부분의 경우 UMAP이 더 낫지만, 특정 데이터에서는 t-SNE가 더 좋은 지역 구조를 보여줄 수 있다. 둘 다 시도하는 것이 좋다.

다른 주제와의 연결

  • k-NN: 차원의 저주 완화를 위한 전처리
  • 클러스터링: 시각화 및 전처리
  • 선형 모델: PCA로 다중공선성 해결, Ridge 회귀와의 연결
  • SVM: Kernel PCA와 SVM 커널의 관계

자주 묻는 면접 질문

  1. PCA vs LDA: 각각 언제 사용하는가?
  2. PCA: 비지도, 전반적 분산 보존. LDA: 지도, 클래스 분리 최대화

  3. t-SNE 플롯에서 거리를 신뢰할 수 없는 이유는?

  4. KL 발산 최소화는 지역 구조만 보존하도록 설계됨. 전역 거리는 왜곡됨

  5. PCA에서 성분 수를 어떻게 결정하는가?

  6. 누적 설명 분산 비율 (95% 등) 또는 scree plot의 "팔꿈치" 지점

  7. PCA를 비선형 데이터에 사용할 수 있는가?

  8. Kernel PCA를 사용하면 가능 (커널 트릭으로 고차원 매핑 후 PCA)

  9. PCA 전에 데이터를 스케일링하는 이유는?

  10. PCA가 분산을 최대화하므로, 스케일이 큰 특성이 과도한 영향을 미침

코드 예시

from sklearn.decomposition import PCA, KernelPCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler
import umap

# PCA (반드시 스케일링 후)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

pca = PCA(n_components=0.95)  # 95% 분산 유지
X_pca = pca.fit_transform(X_scaled)
print(f"선택된 성분 수: {pca.n_components_}")
print(f"설명 분산: {pca.explained_variance_ratio_}")

# LDA (지도 학습)
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)  # 레이블 필요

# t-SNE (시각화)
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# UMAP (시각화 + 변환 가능)
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1, random_state=42)
X_umap = reducer.fit_transform(X_scaled)
X_new_umap = reducer.transform(X_new)  # 새 데이터 변환 가능

# Kernel PCA
kpca = KernelPCA(n_components=50, kernel='rbf', gamma=0.01)
X_kpca = kpca.fit_transform(X_scaled)

용어 정리

영어 한국어
Dimensionality Reduction 차원 축소
Principal Component Analysis (PCA) 주성분 분석
Eigenvalue / Eigenvector 고유값 / 고유벡터
Explained Variance Ratio 설명된 분산 비율
Scree Plot 스크리 플롯
t-SNE t-분포 확률적 이웃 임베딩
Perplexity 혼란도 (퍼플렉시티)
UMAP 균일 매니폴드 근사 투영
Linear Discriminant Analysis (LDA) 선형 판별 분석
Scatter Matrix 산포 행렬

참고 자료

  • Jolliffe (2002) - Principal Component Analysis
  • van der Maaten & Hinton (2008) - "Visualizing Data using t-SNE"
  • McInnes, Healy, Melville (2018) - "UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction"
  • Fisher (1936) - "The Use of Multiple Measurements in Taxonomic Problems" (LDA)
  • Wattenberg, Viegas, Johnson (2016) - "How to Use t-SNE Effectively" (distill.pub)