INDEX
t-SNEによる高次元データの可視化
t-SNE(t-Distributed Stochastic Neighbor Embedding)は、高次元データを2次元や3次元へ変換し、データの構造やグループ分けの傾向を視覚的に理解しやすくするための次元削減手法です。特に、画像データや文章データのような高次元データの可視化で広く利用されています。
t-SNEの仕組みを図で理解する

t-SNEとは?
t-SNEは、高次元空間で近い位置にあるデータ同士が、低次元空間でも近く配置されるように変換するアルゴリズムです。
例えば、数百~数千個の特徴量を持つデータでも、2次元の散布図として表現できるため、データの分布やクラスター構造を直感的に把握できます。
PCAが全体の分散を重視するのに対し、t-SNEはデータ同士の「近さ」を重視する点が特徴です。
t-SNEの基本的な考え方
t-SNEは次の流れで処理を行います。
- 高次元空間でデータ同士の近さを計算する
- 近いデータほど高い確率で関連付ける
- 低次元空間へ配置する
- 高次元空間の近さをできるだけ維持するように位置を調整する
- クラスター構造を視覚的に表現する
その結果、似たデータは近くに集まり、異なるデータは離れて配置されます。
Pythonによるt-SNEの実装
Pythonでは、scikit-learnのTSNEクラスを利用することで簡単に実装できます。
from sklearn.datasets import load_iris
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
iris = load_iris()
X = iris.data
y = iris.target
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
plt.show()
この例では、アヤメ(Iris)データセットを2次元へ変換し、データの分布を可視化しています。
主要なパラメータ
t-SNEではいくつかの重要なパラメータがあります。
| パラメータ | 説明 |
|---|---|
n_components |
埋め込む次元数(通常は2または3) |
perplexity |
近傍をどの程度重視するかを決める |
learning_rate |
最適化時の学習率 |
max_iter |
反復回数 |
perplexityとは?
perplexityは、データを見る際の「近所の広さ」のような役割を持ちます。
- 小さい値:細かな局所構造を重視
- 大きい値:全体構造を重視
一般的には5〜50程度の範囲で試しながら調整します。
t-SNEの特徴
| 特徴 | 内容 |
|---|---|
| 局所構造の保持 | 近いデータ同士を近く配置するのが得意 |
| 非線形データに強い | PCAでは表現しにくい構造も可視化できる |
| 可視化向き | 高次元データの理解に適している |
| 計算量が多い | 大量データでは処理時間が長くなる |
PCAとの違い
| 項目 | t-SNE | PCA |
|---|---|---|
| 目的 | 可視化 | 次元削減 |
| 手法 | 非線形 | 線形 |
| 局所構造 | 保持しやすい | 保持しにくい |
| 処理速度 | 比較的遅い | 高速 |
t-SNEの活用例
- 画像認識: 画像特徴量の分布を可視化する
- 自然言語処理: 単語ベクトルや文章ベクトルを可視化する
- クラスタリング結果の確認: クラスターの分離状況を確認する
- 異常検知: 外れたデータの発見に利用する
- バイオインフォマティクス: 遺伝子データや細胞データの可視化
t-SNEを利用する際の注意点
- 軸に意味はない: 横軸や縦軸そのものに意味はありません。
- 毎回結果が変わることがある: 乱数によって配置が多少変化します。
- 距離の解釈に注意: 離れたクラスター間の距離は必ずしも元データの距離を表しません。
- 大規模データは時間がかかる: 数万件以上では計算コストが大きくなります。
まとめ
t-SNEは、高次元データを人間が理解しやすい2次元や3次元へ変換するための強力な可視化手法です。
特にデータ同士の類似性やクラスター構造を視覚的に把握する用途に優れており、画像認識や自然言語処理をはじめとする幅広い分野で活用されています。