LoginSignup
7
5

More than 5 years have passed since last update.

tSNEでMNISTを軽やかに鮮やかにマッピングしていく

Last updated at Posted at 2019-02-10

はじめに:やりたいこと

今回やりたかったことは次の通りです.

二次元マッピング!可視化!!

というのも,学会への投稿が差し迫っており,実験が上手くいっていなあばばばっばばばばばばb

色々あって多次元情報の二次元マッピングに用事ができたので,やってみようかと思いまして.
この辺,あんまり詳しくないのでおかしなところはご指摘いただけるとありがたいです.

やったこと

  1. Random Projectionを試してみる:M次元の行列に,ランダムに生成したN次元の行列をあてて次元削減
    1. GaussianRandomProjection:ガウシアン分布に従ったコンポーネントからN次元行列を生成
    2. SparseRandomProjection:スパースなN次元行列を生成
  2. tSNEを試してみる:理論はまだ読んでません

実装

何はともあれ,調べてコピペしてみました.

環境

  • Google Colaboratory
  • Python3
  • ハードウェアアクセラレータ:GPU(意味ない)

ソースコード

ソースコードは次の通りで,Colaboratoryにそのまま張り付ければ動きます.

digit_visualization.py
#matplotlib inline
from sklearn import random_projection
from sklearn.manifold import TSNE
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

digits = datasets.load_digits()

X_TSNEprojected = TSNE(n_components=2, random_state=0).fit_transform(digits.data)
X_Gprojected    = random_projection.GaussianRandomProjection(n_components=2).fit_transform(digits.data)
X_Sprojected    = random_projection.SparseRandomProjection(n_components=2).fit_transform(digits.data)

plt.scatter(X_TSNEprojected[:,0], X_TSNEprojected[:,1], c=digits.target,alpha=0.5, cmap='rainbow')
plt.colorbar()
plt.show()
plt.scatter(X_Gprojected[:, 0], X_Gprojected[:, 1], c=digits.target, cmap='rainbow')
plt.colorbar()
plt.show()
plt.scatter(X_Sprojected[:, 0], X_Sprojected[:, 1], c=digits.target, cmap='rainbow')
plt.colorbar()
plt.show()

結果

実行結果です.

tSNE

鮮やかでとても見やすいです.
クラス毎に場所が結構きれいに分かれています.
alpha値を0.5に設定したので,すこしモヤモヤしていますね.

tSNE.png

GaussianRandomProjection

結構重なっています.

gaussian.png

SparseRandomProjection

Gaussian同様,結構重なっています.

sparse.png

おわりに:考察

今回のポイントは何より鮮やかに可視化できたところでしょう!
はじめはカラーコードとかわからなくて,
グレーの味気ない出力でした.こんな感じです.

gray.png

これはつまらないと思ってカラーコードとか調べてみました.
で,scatterの引数:cは色の種類を指定できるので,クラス数から配色してくれて,
cmapでカラーコード指定できると分かったのでやってみました.
また,alpha値(ドットの透かし度合い)を薄くして,
分布をわかりやすくしてみました(密集していると色濃くなる).
うん,研究に活きそうです.

お世話になった記事たち

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5