차원 축소 (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 물체의 그림자 중 가장 많은 정보를 담는 각도를 찾는 것과 같다. 그림자(투영)가 물체의 형태를 최대한 잘 보여주는 조명 각도를 수학적으로 찾아내는 것이다.
알고리즘
섹션 제목: “알고리즘”- 데이터 중심화 (평균 빼기)
- 공분산 행렬 계산:
- 고유값 분해:
- 고유값 크기 순으로 상위 개 고유벡터 선택
- 투영:
숫자로 이해하기
섹션 제목: “숫자로 이해하기”학생 5명의 시험 점수가 3과목(수학, 물리, 화학)으로 이루어져 있다고 하자. PCA를 적용하면:
- 데이터 중심화: 각 과목에서 평균을 빼서 원점으로 이동
- 공분산 행렬(Covariance Matrix) 계산: 과목 간 상관관계 파악
- 고유값 분해(Eigenvalue Decomposition): 고유값(Eigenvalue) , ,
설명된 분산 비율(Explained Variance Ratio):
- PC1:
- PC2:
- PC1 + PC2 누적:
3개 변수를 2개 주성분(Principal Component)으로 줄여도 분산의 96.7%가 보존된다. 나머지 3.3%는 노이즈(Noise)일 가능성이 높으므로 버려도 무방하다.
SVD와의 관계
섹션 제목: “SVD와의 관계”
PCA의 주성분은 의 열이며, 분산은 이다. 실제 구현에서는 SVD를 직접 사용한다 (공분산 행렬을 명시적으로 계산하지 않아도 됨).
설명된 분산 비율 (Explained Variance Ratio)
섹션 제목: “설명된 분산 비율 (Explained Variance Ratio)”
누적 EVR 그래프(scree plot)에서 원하는 임계값(예: 95%)에 해당하는 선택.
가정과 한계
섹션 제목: “가정과 한계”| 가정 | 한계 |
|---|---|
| 선형 관계 | 비선형 구조를 포착하지 못함 |
| 분산 = 정보 | 분산이 작지만 중요한 정보 놓칠 수 있음 |
| 비교 가능한 스케일 | 반드시 스케일링 필요 |
- 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)를 저차원에서 보존하여 시각화한다.
알고리즘
섹션 제목: “알고리즘”-
고차원: 가우시안으로 쌍별 유사도 계산
-
대칭화:
-
저차원: Student t-분포(자유도 1)로 유사도 계산
-
KL 발산 최소화:
왜 t-분포인가?
섹션 제목: “왜 t-분포인가?”고차원의 거리를 저차원에 표현하면 군집 문제(crowding problem)가 발생한다. t-분포의 무거운 꼬리(heavy tail)가 이 문제를 완화: 멀리 있는 점들이 저차원에서 더 멀리 배치될 수 있다.
Perplexity (혼란도)
섹션 제목: “Perplexity (혼란도)”- 효과적인 이웃 수를 결정 (~5-50)
- 가우시안의 대역폭 를 제어
- 결과에 매우 민감: 항상 여러 값으로 시도해야 함
핵심 주의사항
섹션 제목: “핵심 주의사항”| 주의점 | 설명 |
|---|---|
| 클러스터 크기 무의미 | 같은 클러스터라도 크기가 다를 수 있음 |
| 클러스터 간 거리 무의미 | 먼 클러스터가 실제로 가까울 수 있음 |
| 비결정론적 | 매 실행마다 다른 결과 |
| 새 데이터에 적용 불가 | 파라메트릭 매핑 없음 |
| 복잡도 | Barnes-Hut 근사로 가능 |
3. UMAP (Uniform Manifold Approximation and Projection)
섹션 제목: “3. UMAP (Uniform Manifold Approximation and Projection)”이론적 기반
섹션 제목: “이론적 기반”리만 기하학(Riemannian geometry)과 대수적 위상수학(algebraic topology)에 기반한다.
알고리즘 (간략화)
섹션 제목: “알고리즘 (간략화)”- 고차원에서 퍼지 단순 복합체(fuzzy simplicial complex) 구성 (가중 k-NN 그래프)
- 저차원에서 이 위상 구조를 최대한 보존하는 표현 탐색
- 고차원과 저차원 퍼지 집합 간의 교차 엔트로피 최적화
t-SNE와의 비교
섹션 제목: “t-SNE와의 비교”| 속성 | t-SNE | UMAP |
|---|---|---|
| 전역 구조 | 보존 약함 | 더 잘 보존 |
| 속도 | 느림 () | 빠름 (준이차) |
| 새 데이터 | 변환 불가 | transform() 가능 |
| 안정성 | 실행마다 다름 | 더 안정적 |
| 이론적 기반 | 약함 | 강함 (위상수학) |
핵심 파라미터
섹션 제목: “핵심 파라미터”| 파라미터 | 효과 |
|---|---|
n_neighbors | 작으면 지역, 크면 전역 구조 반영 |
min_dist | 작으면 조밀, 크면 분산된 클러스터 |
metric | 거리 메트릭 선택 |
4. LDA (Linear Discriminant Analysis, 선형 판별 분석)
섹션 제목: “4. LDA (Linear Discriminant Analysis, 선형 판별 분석)”목표 (지도 학습)
섹션 제목: “목표 (지도 학습)”클래스 간 분산 / 클래스 내 분산을 최대화하는 방향을 찾는다.
Fisher 기준
섹션 제목: “Fisher 기준”
- : 클래스 간 산포 행렬 (Between-class scatter)
- : 클래스 내 산포 행렬 (Within-class scatter)
일반화 고유값 문제:
최대 성분 수
섹션 제목: “최대 성분 수”
는 클래스 수이므로, 이진 분류에서는 최대 1개 성분만 가능.
- 각 클래스가 가우시안 분포
- 모든 클래스의 공분산 행렬이 동일
- 클래스 간 선형 분리 가능
PCA vs LDA
섹션 제목: “PCA vs LDA”| 속성 | PCA | LDA |
|---|---|---|
| 학습 유형 | 비지도 | 지도 |
| 최적화 대상 | 최대 분산 | 최대 클래스 분리 |
| 최대 성분 수 | ||
| 가정 | 선형 | 가우시안 + 동일 공분산 |
| 역할 | 차원 축소만 | 차원 축소 + 분류기 |
5. 기타 방법 (간략 소개)
섹션 제목: “5. 기타 방법 (간략 소개)”| 방법 | 핵심 아이디어 | 주요 사용처 |
|---|---|---|
| ICA (독립 성분 분석) | 통계적으로 독립인 성분 탐색 | 신호 분리 |
| Factor Analysis | 관측 변수 = 잠재 인자 + 잡음 | 사회과학 |
| NMF (비음수 행렬 분해) | , | 해석 가능한 부분 기반 표현 |
| Autoencoder | 인코더-디코더 신경망 | 비선형 차원 축소 |
| Random Projection | Johnson-Lindenstrauss 보조정리 | 빠른 근사 축소 |
상세 비교표
섹션 제목: “상세 비교표”| 방법 | 지도 학습 | 선형 | 보존 대상 | 확장성 | 새 데이터 |
|---|---|---|---|---|---|
| PCA | 아니오 | 예 | 전역 분산 | 매우 좋음 | 가능 (투영) |
| t-SNE | 아니오 | 아니오 | 지역 구조 | 나쁨 () | 불가 |
| 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 커널의 관계
자주 묻는 면접 질문
섹션 제목: “자주 묻는 면접 질문”-
PCA vs LDA: 각각 언제 사용하는가?
- PCA: 비지도, 전반적 분산 보존. LDA: 지도, 클래스 분리 최대화
-
t-SNE 플롯에서 거리를 신뢰할 수 없는 이유는?
- KL 발산 최소화는 지역 구조만 보존하도록 설계됨. 전역 거리는 왜곡됨
-
PCA에서 성분 수를 어떻게 결정하는가?
- 누적 설명 분산 비율 (95% 등) 또는 scree plot의 “팔꿈치” 지점
-
PCA를 비선형 데이터에 사용할 수 있는가?
- Kernel PCA를 사용하면 가능 (커널 트릭으로 고차원 매핑 후 PCA)
-
PCA 전에 데이터를 스케일링하는 이유는?
- PCA가 분산을 최대화하므로, 스케일이 큰 특성이 과도한 영향을 미침
코드 예시
섹션 제목: “코드 예시”from sklearn.decomposition import PCA, KernelPCAfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysisfrom sklearn.manifold import TSNEfrom sklearn.preprocessing import StandardScalerimport 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 PCAkpca = 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)