t-SNE

Basic

t-SNE | Visualisasi struktur berdimensi tinggi

Dibuat: Pembaruan terakhir: Waktu baca: 1 menit

t-SNE memetakan data berdimensi tinggi ke 2D/3D sambil menjaga tetangga lokal, sehingga pola (misalnya digit) gampang diamati.


1. Intuisi #

  • Hitung probabilitas kesamaan (P_{ij}) di ruang asli dengan kernel Gaussian (diatur oleh perplexity).
  • Definisikan (Q_{ij}) di ruang rendah memakai distribusi t-Student berekor panjang.
  • Minimalkan (\mathrm{KL}(P \parallel Q)) menggunakan gradien.
  • Ekor panjang mencegah titik menumpuk di pusat.

2. Contoh Python #

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

X, y = load_digits(return_X_y=True)
X = StandardScaler().fit_transform(X)

model = TSNE(n_components=2, perplexity=30, learning_rate=200, random_state=0)
emb = model.fit_transform(X)

plt.figure(figsize=(8, 6))
plt.scatter(emb[:, 0], emb[:, 1], c=y, cmap="tab10", s=15)
plt.colorbar(label="digit")
plt.title("Embedding t-SNE untuk digit tulisan tangan")
plt.tight_layout()
plt.show()

Contoh t-SNE


3. Parameter utama #

  • perplexity: jumlah tetangga efektif (sekitar 5–50).
  • learning_rate: pilih nilai 100–1000; terlalu kecil lambat, terlalu besar tidak stabil.
  • n_iter: minimal 1000 iterasi plus fase early_exaggeration.

4. Tips #

  • Standarkan fitur dan buang duplikasi.
  • Untuk dataset besar gunakan Barnes–Hut atau implementasi cepat seperti openTSNE/FIt-SNE.
  • Jarak pada hasil bersifat kualitatif: hanya tetangga lokal yang terjaga.

5. Catatan #

  • t-SNE cocok untuk eksplorasi visual, bukan transformasi yang bisa dievaluasi ulang pada data baru.
  • Coba beberapa seed/perplexity untuk memastikan pola stabil.
  • Pertimbangkan UMAP bila memerlukan kecepatan atau embedding yang bisa diaplikasikan ke sampel baru.