t-SNE.md
t-SNE 是一種常用的非線性降維技術,特別適合用於高維資料的視覺化,例如將資料從數百維壓縮到 2D 或 3D 空間以進行視覺分析。
1. 主要用途
高維資料的視覺化(常見於圖片、基因、NLP)
發現資料中的群集或隱含結構
搭配 PCA 作為預處理(加速與穩定)
2. 原理概念(簡化版)
在高維空間中,t-SNE 會衡量樣本間的機率相似度(近的點有較高機率被當成鄰居)
在低維空間中重新配置點,使其保有高維空間的局部鄰近關係
損失函數使用 Kullback-Leibler divergence 來衡量這種相似度的差異
使用梯度下降方式進行最佳化
3. 主要參數
參數
說明
perplexity
控制鄰近點數量(通常設為 5~50),類似於 kNN 的 k 值
n_iter
最大迭代次數(通常設為 1000~5000)
learning_rate
學習率(建議介於 10 到 1000 間)
n_components
降維後的維度(通常為 2 或 3)
4. 範例程式碼(使用 scikit-learn)
from sklearn.manifold import TSNE
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 載入資料
X, y = load_iris(return_X_y=True)
# 建立模型
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200, n_iter=1000)
X_embedded = tsne.fit_transform(X)
# 視覺化
plt.scatter(X_embedded[:, 0], X_embedded[:, 1], c=y)
plt.title("t-SNE Visualization of Iris Dataset")
plt.xlabel("Dimension 1")
plt.ylabel("Dimension 2")
plt.show()
5. 優缺點
優點:
適合複雜資料的視覺化
保留局部結構,比 PCA 更能凸顯群集
缺點:
不適合用於資料壓縮後進行機器學習建模
非常耗時,無法應對大量樣本(>10,000)
不具可解釋性(結果無法反推)
不保留全域結構(如距離比例)
6. 常見用途場景
圖像資料:MNIST 手寫數字視覺化
生物資訊:RNA-seq 或 scRNA-seq 資料群集視覺化
NLP:word embeddings 的分布觀察(如 Word2Vec)
Last updated