❗ 차원 축소(PCA, t-SNE, UMAP)를 통해 고차원 데이터를 효율적으로 시각화·분석하고, 노이즈를 제거함으로써 핵심 패턴을 발견할 수 있습니다!
고차원 데이터란?
어떤 문제가 생길까?
차원 축소의 장점
❗ 쉬운 예시!
엑셀에서 2~3개의 컬럼만 있어도 차트를 그리기 쉽지만, 100개의 컬럼이 있다면 한눈에 파악하기가 어려운 것을 떠올리면 이해가 쉽습니다.
선형 차원 축소
비선형 차원 축소

https://pt.slideshare.net/hihijungho/pca-principal-component-analysis
핵심 아이디어
주성분(Principal Component)
설명 분산(Explained Variance) 비율
장점
단점

고차원 공간에서 ‘서로 가까운 데이터 포인트는 가까이, 먼 데이터 포인트는 멀리’ 배치하려고 하는 비선형 차원 축소 기법.
동작 원리
장점
단점

https://medium.com/mcd-unison/umap-an-alternative-dimensionality-reduction-technique-7a5e77e80982
t-SNE와 유사하게 고차원 데이터의 구조를 2D/3D로 매핑하는 비선형 차원 축소 기법. ‘근접 그래프(nearest neighbor graph)’와 ‘Riemannian manifold’ 이론에 기반한다.
장점
단점
💡(Tip)
t-SNE와 UMAP 모두 시각화 목적에서 많이 쓰이며, 비슷한 방식으로 “서로 비슷한 포인트끼리 가까이 두는” 방식입니다. 데이터를 2D로 프로젝트 해서 한눈에 군집 패턴을 볼 수 있다는 점이 가장 큰 장점입니다.
import numpy as np
import matplotlib.pyplot as plt
# 1. 데이터 로드 (Iris 예시)
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data # (150, 4) 형태: 꽃받침, 꽃잎 길이·너비
y = iris.target # (150,) : 품종 라벨(0, 1, 2)
# 2. PCA
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 3. t-SNE
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X)
# 4. UMAP
# (umap-learn 설치 필요할 수 있습니다 : pip install umap-learn)
from umap import UMAP
umap = UMAP(n_components=2, n_neighbors=15, random_state=42)
X_umap = umap.fit_transform(X)
# 5. 시각화 (PCA, t-SNE, UMAP 결과 비교)
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=y)
axes[0].set_title("PCA (2D)")
axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
axes[1].set_title("t-SNE (2D)")
axes[2].scatter(X_umap[:, 0], X_umap[:, 1], c=y)
axes[2].set_title("UMAP (2D)")
plt.tight_layout()
plt.show()
load_iris()를 통해 꽃받침/꽃잎 길이·너비 특성이 들어있는 4차원 데이터를 불러옵니다.y는 품종 레이블(0, 1, 2)입니다.PCA(n_components=2)로 2차원 주성분으로 투영합니다.TSNE(n_components=2)로 고차원 데이터의 지역적 이웃 구조를 보존하며 2차원으로 매핑합니다.UMAP(n_components=2, n_neighbors=15)로 비선형 매니폴드를 “펴는” 방식의 차원 축소를 수행합니다.c=y로 각 품종 클래스(0, 1, 2)를 색으로 구분합니다.
1️⃣ 데이터 전처리
: 스케일링(표준화, 정규화), 이상치 제거 등을 먼저 수행해야 합니다.
2️⃣ 하이퍼파라미터 튜닝
3️⃣ 결과 해석
: PCA는 주성분 방향이 어떤 피처 조합과 관련이 있는지 해석 가능.
: t-SNE/UMAP 결과는 시각화를 통해 군집 형태나 분포를 확인하되, 지나친 해석은 지양(거리 자체의 절대적 의미는 왜곡될 수 있음).
4️⃣ 성능 측정 및 검증
: 최종 목적(군집 분석, 노이즈 제거, 시각화 등)에 따라 적절한 지표를 사용해 성능을 평가할 수 있음. (차원 축소만의 별도 지표는 없음)
Wine 데이터셋을 사이킷런에서 불러오세요.
PCA를 사용해 데이터 차원을 2차원으로 축소하세요.
t-SNE를 사용해 동일한 데이터를 2차원으로 축소하세요.
UMAP을 사용해 역시 2차원으로 축소하세요.
축소 결과(PCA, t-SNE, UMAP)를 모두 시각화하여, 원본 와인 품종 레이블에 따라 색을 다르게 표시하고 비교해보세요.
[코드스니펫] 차원 축소 실습 사전 코드
```python
import numpy as np
import matplotlib.pyplot as plt
# 1. Wine 데이터셋 불러오기
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target # 3가지 와인 품종(0, 1, 2)
```
import numpy as np
import matplotlib.pyplot as plt
# 1. Wine 데이터셋 불러오기
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target # 3가지 와인 품종(0, 1, 2)

1️⃣ 고차원 데이터 → 시각화와 연산 복잡도 측면에서 어려움 → 차원 축소가 필요한 이유.
2️⃣ PCA: 선형 차원 축소로 계산이 빠르고 해석이 직관적.
3️⃣ t-SNE, UMAP: 비선형 구조를 잘 반영하여 2D/3D 시각화에 매우 효과적.
Q1: PCA와 t-SNE(또는 UMAP)의 가장 큰 차이는 무엇인가요?
A1: PCA는 선형 변환을 이용해 분산이 가장 큰 축을 찾는 방식으로 차원을 줄이는 반면, t-SNE와 UMAP은 비선형 방식으로 근접한 데이터들을 가깝게 배치해 2D/3D 시각화에 더욱 적합합니다.
Q2: 차원 축소 시, 몇 개의 차원(주성분)을 선택해야 하나요?
A2: ‘설명 분산 비율(Explained Variance Ratio)’을 확인하여 원하는 수준(예: 80% 이상)을 만족하도록 주성분 수를 결정하거나, 업무 목적에 맞춰 시각적으로 해석 가능한 범위를 기준으로 선택합니다.
Q3: t-SNE나 UMAP의 시각화 결과에서 군집끼리 떨어져 보이는데, 이를 그대로 분류 기준으로 삼아도 될까요?
A3: t-SNE나 UMAP은 ‘가까운 점끼리 가깝게 보이도록’ 하는 목적을 갖지만, 거리 자체가 왜곡될 수 있으므로 군집의 상대적 분포를 참고하되, 정확한 분류나 임계값 설정은 추가적인 지표나 모델을 통해 검증해야 합니다.
Q4: PCA 결과에서 각 주성분이 무엇을 의미하는지 어떻게 해석하나요?
A4: PCA 변환 후 components_(주성분 벡터)를 살펴보면, 각 피처가 주성분에 기여하는 정도(가중치)를 알 수 있습니다. 이를 통해 해당 주성분이 어떤 피처들의 조합으로 형성되었는지, 즉 어떤 물리적 의미나 현상의 특징을 반영하는지 파악할 수 있습니다.
Q5: 차원 축소로 인해 데이터의 일부 정보가 손실되지 않나요?
A5: 네, 차원 축소는 원본 데이터의 변동을 100% 반영하지 못하고 일부 정보가 희생됩니다. 하지만 주성분(또는 임베딩)이 중요한 변동을 대부분 설명하도록 설계되어 있으므로, 핵심 패턴 분석에 유리하며, 노이즈를 제거하는 이점도 있습니다.