t-SNE 란?
t-SNE (t-Distributed Stochastic Neighbor Embedding)
- 고차원 데이터를 저차원으로 변환하여 시각화하는 차원 축소 기법
- 데이터 포인트 간의 유사성을 보존하면서, 고차원 데이터를 2차원 또는 3차원 공간으로 변환
- 데이터의 구조와 패턴을 시각적으로 이해할 수 있다
주요 개념
1. 고차원 공간에서의 데이터 관계 유지:
- 데이터 포인트 간의 유사도를 고차원 공간과 저차원 공간 모두에서 확률로 정의하고,
이를 최대한 일치시키도록 저차원 임베딩을 생성
2. 확률적 유사도 정의:
- 고차원 공간 : 각 데이터 포인트 i 와 j 사이의 유사도를 조건부 확률 p 로 정의
- 저차원 공간 :
- 여기서 t-분포를 사용하여 거리 계산의 민감도를 줄입니다.
3. 목적 함수 :
- 두 확률 분포 P 와 Q 간의 Kullback-Leibler 발산(KL Divergence)을 최소화 합니다.
작동 원리
- 고차원 데이터에서 유사도 계산:
- 데이터 포인트 간의 조건부 확률을 계산하여 고차원 공간에서의 관계를 정의합니다.
- 저차원 공간 초기화:
- 일반적으로 무작위로 저차원 임베딩을 초기화합니다.
- 저차원 임베딩 업데이트:
- 유사도 분포 P와 의 차이를 줄이기 위해 저차원 임베딩을 점진적으로 최적화합니다.
- 최적화 종료:
- KL 발산이 충분히 작아지거나 정해진 반복 횟수에 도달하면 종료합니다.
장점
- 시각화 용이성:
- 고차원 데이터의 패턴과 군집을 2D 또는 3D로 효과적으로 시각화.
- 비선형 데이터 처리:
- 데이터의 비선형 구조를 잘 포착하여 복잡한 관계를 표현.
- 지역 구조 보존:
- 데이터의 지역적 관계(가까운 이웃)를 잘 유지.
단점
- 해석 어려움:
- 저차원 공간에서의 위치는 고차원 공간에서의 정확한 거리 관계를 반영하지 않음.
- 전역적 구조(Global Structure)가 왜곡될 수 있음.
- 비용이 높음:
- 계산 복잡도가 높아 대규모 데이터셋에서는 느리게 동작.
- 결과 재현 어려움:
- 초기화와 하이퍼파라미터에 따라 결과가 달라질 수 있음.
주요 하이퍼파라미터
- perplexity:
- 데이터 포인트가 고려하는 이웃의 수를 결정하는 하이퍼파라미터.
- 일반적으로 5에서 50 사이의 값을 사용.
- learning_rate:
- 임베딩을 학습하는 속도. 값이 너무 작으면 수렴이 느려지고, 너무 크면 최적화가 불안정해질 수 있음.
- n_iter:
- 최적화를 반복하는 횟수.
예시
- 데이터 로드
from sklearn.datasets import fetch_openml
import pandas as pd
# MNIST 데이터셋 불러오기
mnist = fetch_openml('mnist_784', version=1)
# 데이터와 레이블 분리
X = mnist.data
y = mnist.target
# 데이터 프레임의 첫 5행 출력
print(X.head())
print(y.head())
- 데이터 표준화
from sklearn.preprocessing import StandardScaler
# 데이터 표준화
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
- t-SNE 수행
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import seaborn as sns
# t-SNE 모델 생성
tsne = TSNE(n_components=2, random_state=42)
# t-SNE 학습 및 변환
X_tsne = tsne.fit_transform(X_scaled)
# 변환된 데이터의 크기 확인
print(X_tsne.shape)
- t-SNE 결과 시각화
# 2차원 시각화
plt.figure(figsize=(10, 7))
sns.scatterplot(x=X_tsne[:, 0], y=X_tsne[:, 1], hue=y, palette='viridis', legend=None)
plt.title('t-SNE of MNIST Dataset (2D)')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.show()
'AI > ML' 카테고리의 다른 글
[ML] 앙상블 학습 - 배깅, 부스팅, 스태킹 (0) | 2024.12.29 |
---|---|
[ML] 비지도학습 - 차원축소 (LDA) (2) | 2024.12.29 |
[ML] 비지도학습 - 차원축소 (PCA) (0) | 2024.12.29 |
[ML] 비지도학습 - 군집화모델 (DBSCAN) (0) | 2024.12.29 |
[ML] 비지도학습 - 군집화모델 (계층적 군집화) (0) | 2024.12.29 |