はじめに:やりたいこと
今回やりたかったことは次の通りです.
二次元マッピング!可視化!!
というのも,学会への投稿が差し迫っており,実験が上手くいっていなあばばばっばばばばばばb
色々あって多次元情報の二次元マッピングに用事ができたので,やってみようかと思いまして.
この辺,あんまり詳しくないのでおかしなところはご指摘いただけるとありがたいです.
やったこと
- Random Projectionを試してみる:M次元の行列に,ランダムに生成したN次元の行列をあてて次元削減
- GaussianRandomProjection:ガウシアン分布に従ったコンポーネントからN次元行列を生成
- SparseRandomProjection:スパースなN次元行列を生成
- tSNEを試してみる:理論はまだ読んでません
実装
何はともあれ,調べてコピペしてみました.
環境
- Google Colaboratory
- Python3
- ハードウェアアクセラレータ:GPU(意味ない)
ソースコード
ソースコードは次の通りで,Colaboratoryにそのまま張り付ければ動きます.
#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に設定したので,すこしモヤモヤしていますね.
GaussianRandomProjection
結構重なっています.
SparseRandomProjection
Gaussian同様,結構重なっています.
おわりに:考察
今回のポイントは何より鮮やかに可視化できたところでしょう!
はじめはカラーコードとかわからなくて,
グレーの味気ない出力でした.こんな感じです.
これはつまらないと思ってカラーコードとか調べてみました.
で,scatterの引数:cは色の種類を指定できるので,クラス数から配色してくれて,
cmapでカラーコード指定できると分かったのでやってみました.
また,alpha値(ドットの透かし度合い)を薄くして,
分布をわかりやすくしてみました(密集していると色濃くなる).
うん,研究に活きそうです.
お世話になった記事たち
-
高次元データの次元削減および2次元プロット手法
スタートラインはこの記事.コードも参考にさせていただきました. -
scikit-learnでt-SNE散布図を描いてみる
sklearnのt-SNEメソッドの使い方,手書き数字データセットの読込はこの記事から. -
【Python】matplotlibによるグラフ描画時のColormapのカスタマイズ
この記事を読んでカラーマップの指定に気付いた. -
matplotlib で散布図 (Scatter plot) を描く
scatterのリファレンス代わりに. -
matplotlibの2次元マップで色を指定する
この記事を読んでやっとmatplotlibのcolorのリファレンスに.笑 -
color example code: colormaps_reference.py
matplotlibのカラーコードのリファレンス.6個のカラーブロックがありますが,今回は一番下のブロックのrainbowを採用.