2次元マップのための t-SNE

Pythonで学ぶ教師なし学習

Benjamin Wilson

Director of Research at lateral.io

2次元マップのための t-SNE

  • t-SNE = 「t-distributed stochastic neighbor embedding」
  • サンプルを2次元(または3次元)に写像
  • 近傍関係を概ね保存
  • データ調査に有用
Pythonで学ぶ教師なし学習

Iris データでの t-SNE

  • Iris データは4測定値で、サンプルは4次元
  • t-SNE は2次元に写像
  • 種類は教えられていない
  • それでも種は概ね分離

Iris データに t-SNE を適用した散布図

Pythonで学ぶ教師なし学習

t-SNE 散布図の読み方

  • 「versicolor」と「virginica」は判別が難しい
  • k-means の慣性プロットと一致:2または3クラスタの主張が可能

Iris データに t-SNE を適用した散布図

Pythonで学ぶ教師なし学習

sklearn での t-SNE

  • 2次元 NumPy 配列 samples
print(samples)
[[ 5.   3.3  1.4  0.2]
 [ 5.   3.5  1.3  0.3]
 [ 4.9  2.4  3.3  1. ]
 [ 6.3  2.8  5.1  1.5]
 ...
 [ 4.9  3.1  1.5  0.1]]
  • 種ラベルを 0/1/2 で与えるリスト species
print(species)
[0, 0, 1, 2, ..., 0]
Pythonで学ぶ教師なし学習

sklearn での t-SNE

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
model = TSNE(learning_rate=100)

transformed = model.fit_transform(samples) xs = transformed[:,0] ys = transformed[:,1] plt.scatter(xs, ys, c=species) plt.show()

Iris データに t-SNE を適用した散布図

Pythonで学ぶ教師なし学習

t-SNE は fit_transform() のみ

  • fit_transform() メソッドのみ
  • モデルを適合しつつ同時に変換
  • fit()transform() は別々には存在しない
  • 新しいデータを既存マップに追加できない
  • 毎回最初からやり直し
Pythonで学ぶ教師なし学習

t-SNE の学習率

  • データに合う学習率を選ぶ
  • 不適切だと点が密集
  • 50〜200 を試す
Pythonで学ぶ教師なし学習

毎回異なる

  • t-SNE の特徴は毎回変わる
  • ピエモンテ産ワイン、3回走らせると散布図も3通り
  • ただし:品種(=色)の相対位置関係は一貫

 

ワインデータに t-SNE を3回適用した3つの散布図

Pythonで学ぶ教師なし学習

練習してみましょう!

Pythonで学ぶ教師なし学習

Preparing Video For Download...