Table of Contents

ML

t-SNE(t-Distributed Stochastic Neighbor Embedding)

꼬꼬마코더 2024. 6. 2. 14:15
728x90

t-SNE(t-Distributed Stochastic Neighbor Embedding)은 고차원 데이터의 시각화를 위해 사용되는 차원 축소 기법입니다. 특히 데이터의 복잡한 구조와 클러스터를 저차원(주로 2차원 또는 3차원)으로 시각화하는 데 매우 효과적입니다.

t-SNE의 주요 개념

  1. 지역적 구조 보존:
    • t-SNE는 고차원 데이터의 지역적 구조를 저차원 공간에서도 보존하려고 합니다. 즉, 고차원 공간에서 가까운 데이터 포인트들이 저차원 공간에서도 가깝게 유지되도록 합니다.
  2. 확률 분포:
    • 고차원 공간에서 데이터 포인트 쌍 간의 유사도를 확률 분포로 변환합니다. 저차원 공간에서도 동일한 방식으로 확률 분포를 생성하여 두 분포 간의 차이를 최소화하는 방식으로 차원을 축소합니다.
  3. 쿨백-라이블러 발산 (KL Divergence):
    • 고차원과 저차원 분포 간의 차이를 측정하기 위해 쿨백-라이블러 발산을 사용합니다. 이 차이를 최소화하는 방향으로 저차원 임베딩을 최적화합니다.

t-SNE의 장점

  1. 비선형 구조 캡처:
    • t-SNE는 비선형 구조를 잘 캡처할 수 있어 복잡한 데이터의 패턴과 클러스터를 효과적으로 시각화할 수 있습니다.
  2. 직관적 시각화:
    • 고차원 데이터의 클러스터링 구조를 2차원 또는 3차원으로 직관적으로 시각화할 수 있어 데이터의 잠재적 구조를 쉽게 파악할 수 있습니다.

t-SNE의 단점

  1. 시간 복잡도:
    • t-SNE는 계산 비용이 매우 높기 때문에 대규모 데이터셋에서는 실행 시간이 길어질 수 있습니다.
  2. 해석의 어려움:
    • 저차원 공간에서의 거리는 원래의 고차원 공간에서의 실제 거리를 정확히 반영하지 않습니다. 이는 저차원 시각화 결과를 해석하는 데 어려움을 줄 수 있습니다.
  3. 파라미터 민감성:
    • t-SNE는 여러 하이퍼파라미터(예: 퍼플렉서티, 학습률 등)에 민감하며, 이러한 파라미터 값을 잘못 설정하면 결과가 크게 달라질 수 있습니다.

t-SNE 적용 예제

다음은 Python의 scikit-learn 라이브러리를 사용하여 t-SNE를 적용하는 예제입니다. 여기서는 Iris 데이터셋을 사용하여 시각화를 수행합니다.

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

# 데이터 로드
iris = load_iris()
X = iris.data
y = iris.target

# 데이터 표준화
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

# t-SNE 적용
tsne = TSNE(n_components=2, random_state=0)
X_tsne = tsne.fit_transform(X_std)

# t-SNE 결과 시각화 (2D)
plt.figure(figsize=(8, 6))
for label, color, marker in zip(np.unique(y), ['r', 'g', 'b'], ['o', '^', 's']):
    plt.scatter(X_tsne[y == label, 0], X_tsne[y == label, 1], label=iris.target_names[label], color=color, marker=marker, edgecolor='k')
plt.xlabel('첫 번째 t-SNE 주성분')
plt.ylabel('두 번째 t-SNE 주성분')
plt.legend()
plt.title('t-SNE를 사용한 Iris 데이터셋의 2D 시각화')
plt.show()

t-SNE의 주요 파라미터

  1. n_components:
    • 차원 축소 후의 목표 차원 수를 지정합니다. 보통 2차원 또는 3차원으로 설정합니다.
  2. perplexity:
    • 데이터의 지역적 구조를 얼마나 고려할지를 결정하는 파라미터입니다. 일반적으로 5에서 50 사이의 값을 사용합니다.
  3. learning_rate:
    • 최적화 과정에서 학습률을 설정합니다. 보통 10에서 1000 사이의 값을 사용하며, 기본값은 200입니다.
  4. n_iter:
    • 최적화를 수행할 최대 반복 횟수를 설정합니다. 기본값은 1000입니다.

결론

t-SNE는 고차원 데이터의 복잡한 구조를 저차원으로 효과적으로 시각화할 수 있는 강력한 도구입니다. 데이터의 클러스터링 패턴을 시각적으로 확인하고, 데이터의 숨겨진 구조를 파악하는 데 유용합니다. 그러나 계산 비용과 파라미터 설정에 주의해야 하며, 다른 차원 축소 기법과 함께 사용하여 최적의 결과를 도출하는 것이 좋습니다.