콘텐츠로 이동

차원 축소 (Dimensionality Reduction)

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


핵심 요약: 차원 축소(Dimensionality Reduction)는 100개의 특성(Feature)을 2~3개로 줄여도 핵심 정보를 보존하는 기법이다. PCA(Principal Component Analysis)는 분산(Variance)이 가장 큰 방향으로 투영하고, t-SNE와 UMAP은 고차원 데이터를 2D로 시각화(Visualization)하는 데 탁월하다.

핵심 용어 미리보기:

  • 주성분 (Principal Component): 데이터의 분산(Variance)을 최대로 설명하는 새로운 축. PCA의 결과물
  • 설명된 분산 비율 (Explained Variance Ratio): 각 주성분이 전체 분산 중 얼마를 설명하는지의 비율. 이 값들의 합이 95% 이상이면 충분
  • 고유값 (Eigenvalue): 각 주성분 방향의 분산 크기. 클수록 중요한 성분
  • 퍼플렉시티 (Perplexity): t-SNE에서 각 점이 고려하는 효과적인 이웃 수를 결정하는 파라미터

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

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

차원 축소의 역사는 117년에 걸친 기나긴 여정이다. 1901년 Karl Pearson이 PCA (Principal Component Analysis)의 개념을 처음 제안하면서 “고차원 데이터를 저차원으로 투영하여 핵심 구조를 드러낸다”는 아이디어가 탄생하였다. 이후 Fisher (1936)가 LDA를 제안하며 지도 학습 기반 차원 축소의 길을 열었고, 선형 방법의 한계를 극복하기 위한 비선형 방법이 오랫동안 연구되었다.

2008년, van der Maaten과 Hinton이 t-SNE를 발표하면서 고차원 데이터의 시각화에 혁명이 일어났다. 기존 방법으로는 보이지 않던 클러스터 구조가 2D 평면 위에 극적으로 드러났고, 생물정보학, 자연어 처리, 컴퓨터 비전 등 수많은 분야에서 탐색적 분석의 표준 도구가 되었다. 그러나 t-SNE의 느린 속도와 전역 구조 보존의 한계가 드러나자, 2018년 McInnes 등이 리만 기하학과 대수적 위상수학에 기반한 UMAP을 발표하여 속도, 확장성, 전역 구조 보존 측면에서 새로운 기준을 세웠다.

Pearson (1901) → Fisher LDA (1936) → Kernel PCA (1998) → t-SNE (2008) → UMAP (2018). 핵심 트렌드는 “선형 → 비선형”, “전역 → 지역 + 전역”, “느린 → 빠른”이다.


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

섹션 제목: “1. PCA (Principal Component Analysis, 주성분 분석)”

최대 분산 방향의 직교(orthogonal) 축을 찾는다. 직관적으로 비유하면, PCA는 3D 물체의 그림자 중 가장 많은 정보를 담는 각도를 찾는 것과 같다. 그림자(투영)가 물체의 형태를 최대한 잘 보여주는 조명 각도를 수학적으로 찾아내는 것이다.

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

학생 5명의 시험 점수가 3과목(수학, 물리, 화학)으로 이루어져 있다고 하자. PCA를 적용하면:

  1. 데이터 중심화: 각 과목에서 평균을 빼서 원점으로 이동
  2. 공분산 행렬(Covariance Matrix) 계산: 과목 간 상관관계 파악
  3. 고유값 분해(Eigenvalue Decomposition): 고유값(Eigenvalue) λ1=50\lambda_1 = 50, λ2=8\lambda_2 = 8, λ3=2\lambda_3 = 2

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

  • PC1: 50/(50+8+2)=83.3%50 / (50+8+2) = 83.3\%
  • PC2: 8/60=13.3%8 / 60 = 13.3\%
  • PC1 + PC2 누적: 96.7%96.7\%

3개 변수를 2개 주성분(Principal Component)으로 줄여도 분산의 96.7%가 보존된다. 나머지 3.3%는 노이즈(Noise)일 가능성이 높으므로 버려도 무방하다.

X=UΣVT\mathbf{X} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^T

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

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

섹션 제목: “설명된 분산 비율 (Explained Variance Ratio)”

EVRi=λijλj\text{EVR}_i = \frac{\lambda_i}{\sum_j \lambda_j}

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

가정한계
선형 관계비선형 구조를 포착하지 못함
분산 = 정보분산이 작지만 중요한 정보 놓칠 수 있음
비교 가능한 스케일반드시 스케일링 필요
  • Kernel PCA: 커널 트릭을 적용한 비선형 PCA
  • Incremental PCA: 대규모 데이터를 배치로 처리
  • Sparse PCA: 희소한 주성분 (해석 가능성 향상)
  • Robust PCA: 이상치에 강건한 PCA

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

섹션 제목: “2. t-SNE (t-distributed Stochastic Neighbor Embedding)”

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

  1. 고차원: 가우시안으로 쌍별 유사도 계산 pji=exp(xixj2/2σi2)kiexp(xixk2/2σi2)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. 대칭화: pij=pji+pij2np_{ij} = \frac{p_{j|i} + p_{i|j}}{2n}

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

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

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

  • 효과적인 이웃 수를 결정 (~5-50)
  • 가우시안의 대역폭 σi\sigma_i를 제어
  • 결과에 매우 민감: 항상 여러 값으로 시도해야 함
주의점설명
클러스터 크기 무의미같은 클러스터라도 크기가 다를 수 있음
클러스터 간 거리 무의미먼 클러스터가 실제로 가까울 수 있음
비결정론적매 실행마다 다른 결과
새 데이터에 적용 불가파라메트릭 매핑 없음
O(n2)O(n^2) 복잡도Barnes-Hut 근사로 O(nlogn)O(n\log n) 가능

3. UMAP (Uniform Manifold Approximation and Projection)

섹션 제목: “3. UMAP (Uniform Manifold Approximation and Projection)”

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

  1. 고차원에서 퍼지 단순 복합체(fuzzy simplicial complex) 구성 (가중 k-NN 그래프)
  2. 저차원에서 이 위상 구조를 최대한 보존하는 표현 탐색
  3. 고차원과 저차원 퍼지 집합 간의 교차 엔트로피 최적화
속성t-SNEUMAP
전역 구조보존 약함더 잘 보존
속도느림 (O(n2)O(n^2))빠름 (준이차)
새 데이터변환 불가transform() 가능
안정성실행마다 다름더 안정적
이론적 기반약함강함 (위상수학)
파라미터효과
n_neighbors작으면 지역, 크면 전역 구조 반영
min_dist작으면 조밀, 크면 분산된 클러스터
metric거리 메트릭 선택

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

섹션 제목: “4. LDA (Linear Discriminant Analysis, 선형 판별 분석)”

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

maxwwTSBwwTSWw\max_{\mathbf{w}} \frac{\mathbf{w}^T\mathbf{S}_B\mathbf{w}}{\mathbf{w}^T\mathbf{S}_W\mathbf{w}}

  • SB\mathbf{S}_B: 클래스 간 산포 행렬 (Between-class scatter)
  • SW\mathbf{S}_W: 클래스 내 산포 행렬 (Within-class scatter)

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

min(p,C1)\min(p, C-1)

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

  • 각 클래스가 가우시안 분포
  • 모든 클래스의 공분산 행렬이 동일
  • 클래스 간 선형 분리 가능
속성PCALDA
학습 유형비지도지도
최적화 대상최대 분산최대 클래스 분리
최대 성분 수min(n,p)\min(n, p)min(p,C1)\min(p, C-1)
가정선형가우시안 + 동일 공분산
역할차원 축소만차원 축소 + 분류기

PCA vs LDA 다이어그램

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

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

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

단일 세포 유전체학 (Single-Cell Genomics)에서 t-SNE의 혁신

섹션 제목: “단일 세포 유전체학 (Single-Cell Genomics)에서 t-SNE의 혁신”

단일 세포 RNA 시퀀싱(scRNA-seq) 데이터는 수만 개의 유전자 발현을 측정하여 세포 하나하나의 수만 차원의 프로파일을 생성한다. 2015년 이후 t-SNE와 UMAP이 이 분야에 적용되면서, 기존에는 구별할 수 없었던 숨겨진 세포 유형(hidden cell types)이 발견되기 시작하였다.

대표적인 사례로, 인간 면역 세포의 scRNA-seq 데이터에 t-SNE를 적용하자 기존에 동일한 유형으로 분류되던 T 세포 집단이 실제로는 기능적으로 구분되는 여러 하위 유형으로 나뉘는 것이 시각적으로 드러났다. 이는 면역학 연구의 패러다임을 바꾸었고, 암 면역 치료에서 특정 T 세포 하위 유형이 치료 반응을 예측하는 바이오마커로 활용되는 데 기여하였다.

현재 대부분의 scRNA-seq 분석 파이프라인(Scanpy, Seurat 등)에서는 PCA로 차원을 먼저 축소한 뒤(보통 50개 주성분), UMAP 또는 t-SNE로 2D 시각화하는 2단계 차원 축소가 표준 워크플로우로 자리 잡았다.


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

섹션 제목: “1. “t-SNE 플롯의 클러스터 간 거리가 의미 있다””
  • 아니다. t-SNE는 지역 구조만 보존한다. 클러스터 간 거리와 크기는 해석하면 안 된다.

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

섹션 제목: “2. “PCA 전에 스케일링이 필요 없다””
  • 분산 기반이므로 스케일이 큰 특성이 결과를 지배한다. 반드시 스케일링(보통 StandardScaler)해야 한다.

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

섹션 제목: “3. “PCA 성분 수는 많을수록 좋다””
  • 너무 많으면 노이즈까지 보존한다. scree plot으로 적정 수준(예: 95% 분산) 선택.

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

섹션 제목: “4. “LDA는 항상 PCA보다 낫다 (분류 목적)””
  • LDA는 가우시안 + 동일 공분산 가정이 필요. 이 가정이 맞지 않으면 PCA가 더 나을 수 있다.

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

섹션 제목: “5. “UMAP이 t-SNE를 완전히 대체한다””
  • 대부분의 경우 UMAP이 더 낫지만, 특정 데이터에서는 t-SNE가 더 좋은 지역 구조를 보여줄 수 있다. 둘 다 시도하는 것이 좋다.

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

  1. PCA vs LDA: 각각 언제 사용하는가?

    • PCA: 비지도, 전반적 분산 보존. LDA: 지도, 클래스 분리 최대화
  2. t-SNE 플롯에서 거리를 신뢰할 수 없는 이유는?

    • KL 발산 최소화는 지역 구조만 보존하도록 설계됨. 전역 거리는 왜곡됨
  3. PCA에서 성분 수를 어떻게 결정하는가?

    • 누적 설명 분산 비율 (95% 등) 또는 scree plot의 “팔꿈치” 지점
  4. PCA를 비선형 데이터에 사용할 수 있는가?

    • Kernel PCA를 사용하면 가능 (커널 트릭으로 고차원 매핑 후 PCA)
  5. PCA 전에 데이터를 스케일링하는 이유는?

    • 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-SNEt-분포 확률적 이웃 임베딩
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)