t-SNE: 데이터 시각화를 위한 강력한 차원 축소 알고리즘과 Python 구현

Posted by

데이터 과학과 머신러닝에서 고차원 데이터는 매우 일반적이다. 하지만 고차원 데이터를 분석하고 시각화하는 것은 쉽지 않다. 이를 해결하기 위해 t-SNE(t-Distributed Stochastic Neighbor Embedding) 알고리즘은 데이터를 저차원으로 축소하여 시각적으로 이해하기 쉽도록 만들어준다. 이번 포스트에서는 t-SNE가 무엇인지, 작동 원리, 그리고 Python으로 구현하는 방법에 대해 알아보도록 하자.


t-SNE(t-distributed stochastic neighbor embedding)란?

t-SNE는 데이터의 고차원 공간에서 저차원 공간(주로 2D 또는 3D)으로 투영하여 데이터의 패턴을 시각적으로 탐색할 수 있게 해주는 비선형 차원 축소 알고리즘이다. 주로 데이터의 클러스터링 구조를 시각화하는 데 사용된다. 즉, 고차원 데이터를 2, 3차원으로 줄여 가시화 하는데 유용하며 비슷한 데이터는 근접한 2, 3차원의 지점으로, 다른 데이터는 멀리 떨어진 지점으로 맵핑한다.

19세기 문학에 사용된 단의 t-SNE 시각화(Source: Wikipedia)

t-SNE의 주요 목적

  • 데이터 시각화: 데이터의 구조와 클러스터링 패턴을 쉽게 파악할 수 있다.
  • 비선형 관계 유지: 데이터 포인트 간의 비선형 관계를 유지하며, 고차원 데이터의 구조적 정보를 저차원에 보존한다.

t-SNE의 작동 원리

  1. 고차원 공간의 거리 계산: 고차원 데이터 포인트 간의 유사성을 확률로 계산하여 각 포인트가 다른 포인트와 가까울 확률을 구한다.
  2. 저차원 공간의 거리 계산: 저차원에서 각 포인트가 다른 포인트와 가까울 확률을 초기화한다.
  3. Kullback-Leibler 발산 최소화: 고차원과 저차원 공간 간의 분포 차이를 최소화하도록 저차원 공간의 포인트를 반복적으로 업데이트한다.
  4. 최적화: 데이터 포인트 간의 관계가 저차원에서 고차원과 최대한 비슷하게 보이도록 조정된다.

Python 코드 구현

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.datasets import load_iris

# 데이터 로드
iris = load_iris()
X = iris.data  # 특징 데이터
y = iris.target  # 클래스 레이블

# t-SNE 모델 적용
tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X)

# 결과 시각화
fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(121, projection='3d')
sc = ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap='viridis', edgecolor='k')
ax.set_title('Original Data (3D Visualization)')
ax.set_xlabel('Feature 1')
ax.set_ylabel('Feature 2')
ax.set_zlabel('Feature 3')

ax2 = fig.add_subplot(122)
scatter = ax2.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='viridis', edgecolor='k')
ax2.set_title('t-SNE Result (2D Projection)')
ax2.set_xlabel('t-SNE Component 1')
ax2.set_ylabel('t-SNE Component 2')

plt.tight_layout()
plt.show()

결과

코드 해설

  • TSNE(n_components=2): t-SNE를 사용하여 데이터를 2차원으로 축소한다. n_components는 출력 차원의 수를 지정한다.
  • fit_transform: t-SNE 모델을 학습하고 데이터를 변환한다.

t-SNE의 장단점

장점:

  • 비선형 구조 시각화: 데이터의 비선형 관계를 잘 보존한다.
  • 클러스터링 구조 파악: 데이터의 군집을 시각적으로 쉽게 이해할 수 있다.

단점:

  • 시간 복잡도: 데이터 포인트가 많아질수록 계산 비용이 크게 증가한다.
  • 결과의 불안정성: 결과가 초기 설정 및 하이퍼파라미터에 따라 다를 수 있다.

t-SNE의 하이퍼파라미터 튜닝

  • perplexity: 주변 포인트의 고려 범위를 나타내며, 일반적으로 5에서 50 사이의 값을 사용한다.
  • learning_rate: 학습 속도에 영향을 미치며, 10에서 1000 사이의 값으로 조정할 수 있다.
  • n_iter: 알고리즘이 반복할 횟수로, 기본값은 1000이며 더 큰 값으로 설정하여 결과를 세밀하게 조정할 수 있다.

결론

t-SNE는 데이터의 비선형 관계를 시각화하는 데 강력한 도구로, 고차원 데이터의 구조를 파악할 때 유용하다. 그러나 계산 비용과 결과의 불안정성을 고려하여 적절히 사용해야 한다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다