t-SNE

Basic

t-SNE | เครื่องมือยอดนิยมในการสำรวจข้อมูลมิติสูง

Created: Last updated: Read time: 1 min
まとめ
  • t-SNE (t-distributed Stochastic Neighbor Embedding) สร้างการกระจายความน่าจะเป็นของเพื่อนบ้านในมิติสูงและพยายามรักษาในมิติที่ต่ำกว่า
  • ใช้ Student-t distribution ใน space ปลายทางเพื่อลด crowding problem
  • เหมาะกับ visualization และ exploration ไม่ใช่การลดมิติสำหรับโมเดล downstream
  • พารามิเตอร์สำคัญ: perplexity, learning_rate, n_iter

แนวคิด #

  1. คำนวณความน่าจะเป็น \(P_{ij}\) ที่จุด \(i\) เลือกเพื่อนบ้าน \(j\) ตาม Gaussian kernel
  2. สุ่มพิกัดในมิติที่ต่ำกว่าแล้วคำนวณ \(Q_{ij}\) จาก Student-t
  3. ปรับพิกัดเพื่อให้ 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()

t-SNE กับข้อมูลตัวเลข

เคล็ดลับ #

  • ปรับ 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