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で学ぶ教師なし学習

アヤメデータセットでのt-SNE

  • アヤメデータセットは4つの測定値があり、サンプルは4次元
  • t-SNEはサンプルを2次元空間にマッピング
  • t-SNEは、異なる品種があることは一切知らない
  • それでもきちんと品種別に分かれている

アヤメデータセットに対してt-SNEを実行した散布図

Pythonで学ぶ教師なし学習

t-SNE散布図の読み方

  • 「versicolor」と「virginica」は区別しにくい
  • K平均法のSSEと一致:2つのクラスタも3つのクラスタも考えられる

アヤメデータセットに対してt-SNEを実行した散布図

Pythonで学ぶ教師なし学習

scikit-learnを使ったt-SNE

  • NumPy2次元配列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で学ぶ教師なし学習

scikit-learnを使った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()

アヤメデータセットに対してt-SNEを実行した散布図

Pythonで学ぶ教師なし学習

t-SNEには「fit_transform()」しかない

  • fit_transform()メソッドのみ
  • モデルのフィットとデータ変換を同時に行う
  • fit()transform()メソッドはない
  • 新しいサンプルを追加することはできない
  • 毎回最初からやり直す必要がある
Pythonで学ぶ教師なし学習

t-SNEの学習率

  • データセットの学習率を選択
  • 間違った選択:点が一箇所に固まって見える
  • 50〜200の値を試す
Pythonで学ぶ教師なし学習

結果は毎回異なる

  • t-SNEの特徴量は実行するたびに異なる
  • ピエモンテワインデータ:3回実行すると3種類の散布図が出る
  • ただし: ワインの品種(=色分け)の位置関係は同じ

ワインデータセットに対して3回実行したt-SNEの散布図3つ

Pythonで学ぶ教師なし学習

練習しましょう!

Pythonで学ぶ教師なし学習

Preparing Video For Download...