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()
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 faseearly_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.