本ページは t-SNE(t-Distributed Stochastic Neighbor Embedding)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。
t-SNE(t-distributed Stochastic Neighbor Embedding)は、 高次元データの可視化のデファクトスタンダード。 単細胞 RNA-seq、 単語埋め込み、 画像特徴量など、 「数百〜数千次元のデータを 2 次元で見たい」場面で活躍。 ただし「クラスタ間の距離」を素朴に解釈すると誤るので、 使い方の注意が多い手法でもあります。
t-SNE の発想:
結果として:近い点は近く、 遠い点は遠く配置される。 ただし「2 つのクラスタの間の距離」は 意味なし(perplexity 等で歪む)。
用途:単語ベクトル(Word2Vec)の可視化、 細胞種の発見、 画像特徴量のクラスタ確認、 異常検知の探索。 ML パイプラインの 探索ツールとして強力。
perplexity の効果(同じデータでも見え方が変わる):
| perplexity | 見え方 | 注意 |
|---|---|---|
| 5 | 局所構造重視、 細かいクラスタ | 大域構造は壊れる |
| 30(既定) | バランス | 標準的 |
| 50 | 大域構造重視、 大まかなクラスタ | 細部消える |
| 100+ | ほぼ単一クラスタに | サンプル数次第 |
複数の perplexity で実行し、 ロバストな構造を確認するのが推奨。
最小コードで動かしてみる例:
1 2 3 4 5 6 7 8 9 10 11 12 | from sklearn.manifold import TSNE from sklearn.datasets import load_digits import matplotlib.pyplot as plt digits = load_digits() # 64次元 → 2次元へ tsne = TSNE(n_components=2, perplexity=30, random_state=0) emb = tsne.fit_transform(digits.data) plt.scatter(emb[:, 0], emb[:, 1], c=digits.target, cmap='tab10', s=10) plt.title('t-SNE 可視化(MNIST 数字)') plt.colorbar() plt.show() |