머신러닝 기초 - 데이터 시각화를 위한 t-SNE
🔎 개요 및 소개
고차원 데이터(high-dimensional data)는 분석과 시각화가 어렵기 때문에, 차원 축소(Dimensionality Reduction) 기법이 자주 사용된다. 특히 t-SNE(t-Distributed Stochastic Neighbor Embedding)는 데이터의 복잡한 구조를 저차원 공간(2D 또는 3D)으로 변환해 시각적으로 표현하는 강력한 도구다.
t-SNE는 특히 군집(cluster)이나 패턴을 탐색하는 데 유용하며, 비선형 구조를 보존하는 특징이 있다. 이번 글에서는 t-SNE의 개념과 원리를 설명하고, 실제 데이터를 활용한 파이썬 예제를 통해 t-SNE가 데이터 시각화에 어떻게 활용될 수 있는지 알아본다.
📊 t-SNE의 기본 원리 및 작동 방식
t-SNE는 데이터의 고차원 관계를 보존하면서 저차원 공간으로 변환하는 비선형 차원 축소(Non-linear Dimensionality Reduction) 알고리즘이다. 주요 원리는 다음과 같다.
- 유사도 확률 계산 (Pairwise Similarity Probabilities):
고차원 공간에서 각 데이터 포인트 간의 거리를 확률로 변환하여 유사도를 측정한다. 가까운 데이터 포인트는 높은 확률을 갖고, 먼 데이터 포인트는 낮은 확률을 갖는다. - 저차원 공간으로의 매핑 (Low-Dimensional Mapping):
저차원 공간에서도 데이터 간 유사도를 유지하는 방식으로 배치한다. - Kullback-Leibler Divergence 최소화:
고차원과 저차원의 확률 분포 차이를 최소화하여, 데이터가 원래의 구조를 최대한 유지할 수 있도록 최적화한다.
t-SNE는 특히 클러스터 분석과 데이터 패턴 시각화에 유용하지만, 해석이 쉽지 않고, 실행 시간이 길며, 초기에 설정하는 하이퍼파라미터(Perplexity, Learning Rate 등)에 따라 결과가 달라질 수 있다는 단점이 있다.
💻 파이썬 코드 예시: t-SNE를 활용한 데이터 시각화
아래 코드는 사이킷런(scikit-learn)과 matplotlib을 사용하여 t-SNE를 실행하고, 아이리스(Iris) 데이터셋을 2D로 시각화하는 예제다.
# 필요한 라이브러리 불러오기
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler
# 아이리스 데이터셋 로드
data = load_iris()
X = data.data # 피처 데이터 (4차원)
y = data.target # 타깃 변수
# 데이터 표준화 (t-SNE는 거리 기반 알고리즘이므로 스케일 조정이 중요)
X_scaled = StandardScaler().fit_transform(X)
# t-SNE 적용 (n_components=2 → 2차원으로 축소)
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)
# 시각화
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='viridis', alpha=0.7)
plt.colorbar(scatter, label="타깃 변수 (Target)")
plt.xlabel("t-SNE 차원 1")
plt.ylabel("t-SNE 차원 2")
plt.title("t-SNE를 활용한 아이리스 데이터 시각화")
plt.show()
이 코드는 아이리스 데이터셋(4차원)을 t-SNE로 변환하여 2차원 공간에서 시각화하는 예제다. perplexity(혼란도)와 learning rate(학습률)를 적절히 설정하면 군집이 더욱 명확하게 나타날 수 있다.
📈 t-SNE 활용의 장점과 고려 사항
✅ 장점
- 비선형 구조 보존: PCA처럼 직선적 축을 찾는 방식이 아니라, 데이터의 복잡한 구조를 유지하며 차원 축소가 가능하다.
- 고차원 데이터의 시각화 최적화: 군집(cluster)과 패턴을 명확하게 드러낼 수 있어 데이터 탐색에 유용하다.
- PCA보다 직관적인 시각화 가능: PCA는 선형 변환만 가능하지만, t-SNE는 비선형 관계도 반영하기 때문에 클러스터링 성향이 더 명확하게 보인다.
❗ 단점
- 계산 비용이 큼: 모든 데이터 포인트 간의 관계를 계산해야 하므로, 데이터 크기가 클수록 연산 시간이 오래 걸린다.
- 하이퍼파라미터 설정이 중요: Perplexity, Learning Rate 값이 적절하지 않으면 결과가 불안정할 수 있다.
- 데이터의 상대적 거리 해석이 어려움: t-SNE는 상대적인 구조만 유지하므로, 거리 값 자체가 의미가 있는 것은 아니다.
🔍 초보자를 위한 실습 포인트 및 예시
t-SNE는 데이터 탐색과 시각화에서 강력한 도구이므로, 다음과 같은 실습을 추천한다.
- Perplexity 값 변화 실험
- perplexity(혼란도)는 군집 크기와 관련 있으며, 일반적으로 5~50 사이 값을 사용한다.
- 작은 perplexity 값 → 작은 클러스터가 강조됨
- 큰 perplexity 값 → 더 넓은 패턴이 유지됨
- 고차원 데이터셋 실험
- 손글씨 숫자 데이터(MNIST)처럼 784차원의 데이터를 2D로 변환하여, 숫자별 군집이 어떻게 형성되는지 확인해본다.
- PCA vs t-SNE 비교
- PCA와 t-SNE를 같은 데이터셋에 적용해보고, 차원 축소 결과를 비교하여 어떤 차이가 있는지 분석해본다.
위와 같은 실습을 통해 t-SNE가 데이터 시각화에서 어떤 장점을 제공하는지 체험할 수 있다.
📚 중요 용어 정리
이 블로그에서 다룬 주요 개념들을 간단히 정리하면 다음과 같다.
- 차원 축소 (Dimensionality Reduction): 고차원 데이터를 저차원으로 변환하여 분석과 시각화를 용이하게 하는 기법.
- t-SNE (t-Distributed Stochastic Neighbor Embedding): 데이터 간 유사성을 유지하면서 저차원으로 매핑하는 비선형 차원 축소 알고리즘.
- Perplexity (혼란도): t-SNE의 주요 하이퍼파라미터 중 하나로, 군집 크기를 조정하는 역할을 한다.
- PCA (Principal Component Analysis, 주성분 분석): 선형 변환을 이용해 데이터를 저차원으로 축소하는 방법으로, t-SNE와 함께 자주 비교되는 기법.
🧪 실제 프로젝트에서의 t-SNE 활용
t-SNE는 특히 고차원 데이터 탐색과 군집 분석에서 효과적인 도구다. 예를 들어,
- 이미지 데이터(MNIST, CIFAR-10)의 시각화 및 분류 성능 분석
- 유전체 데이터 분석에서 유전자 발현 패턴 탐색
- 자연어 처리(NLP)에서 문서 또는 단어 임베딩(Word Embedding) 시각화
하지만 t-SNE는 연산량이 많고 해석이 어렵기 때문에, PCA와 같은 선형 기법과 병행하여 사용하는 것이 효과적이다. 또한, 최근에는 UMAP(Uniform Manifold Approximation and Projection) 같은 대체 기법도 많이 활용되고 있어 다양한 방법을 실험해보는 것이 중요하다.
🔍 마무리 및 요약
t-SNE는 데이터의 구조를 직관적으로 이해하는 데 강력한 도구다. 특히 고차원 데이터에서 패턴을 탐색하고 군집 구조를 확인하는 데 유용하다. 초보자는 위의 파이썬 예제를 실행해보면서, Perplexity 등 하이퍼파라미터 조정을 실험하며 결과 변화를 분석해보는 것이 좋다.
#데이터시각화 #차원축소 #tSNE #머신러닝기초