まとめ
- t-SNE (t-distributed Stochastic Neighbor Embedding) สร้างการกระจายความน่าจะเป็นของเพื่อนบ้านในมิติสูงและพยายามรักษาในมิติที่ต่ำกว่า
- ใช้ Student-t distribution ใน space ปลายทางเพื่อลด crowding problem
- เหมาะกับ visualization และ exploration ไม่ใช่การลดมิติสำหรับโมเดล downstream
- พารามิเตอร์สำคัญ:
perplexity,learning_rate,n_iter
แนวคิด #
- คำนวณความน่าจะเป็น \(P_{ij}\) ที่จุด \(i\) เลือกเพื่อนบ้าน \(j\) ตาม Gaussian kernel
- สุ่มพิกัดในมิติที่ต่ำกว่าแล้วคำนวณ \(Q_{ij}\) จาก Student-t
- ปรับพิกัดเพื่อให้ KL-divergence ระหว่าง \(P\) และ \(Q\) ต่ำสุด
ตัวอย่าง Python #
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import load_digits
from sklearn.manifold import TSNE
digits = load_digits()
X, y = digits.data, digits.target
tsne = TSNE(
n_components=2,
perplexity=30,
learning_rate=200,
n_iter=1000,
random_state=42,
)
X_emb = tsne.fit_transform(X)
plt.figure(figsize=(8, 6))
plt.scatter(X_emb[:, 0], X_emb[:, 1], c=y, cmap="tab10", s=8)
plt.title("t-SNE ของชุดข้อมูลตัวเลข")
plt.xticks([])
plt.yticks([])
plt.tight_layout()
plt.show()
เคล็ดลับ #
- ปรับ
perplexity(ขึ้นอยู่กับ density ของข้อมูล; 5-50 เป็นช่วงที่นิยม) - เพิ่ม
n_iterหากยังไม่ลู่เข้า และปรับlearning_rateให้เหมาะ - ใช้ PCA ลดมิติลงก่อน t-SNE เพื่อเร่งเวลา
- อย่าใช้ t-SNE เพื่อเปรียบเทียบระยะทาง absolute ระหว่างคลัสเตอร์
เอกสารอ้างอิง #
- Maaten, L., & Hinton, G. (2008). Visualizing Data using t-SNE. Journal of Machine Learning Research.
- scikit-learn developers. (2024). TSNE. https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html