TensorFlow2.0やKerasでt-SNE/UMAP/PCAの2D/3D散布図可視化まとめ(mnistサンプル)

なぜこんなに簡単に試せないのだろうか…と思い、自分のメモのためにサンプルコードをまとめておく.

3Dは以下のようにipython notebookでも触れるインタラクティブな3D表示です.

今回は、mnistのサンプル(TensorFlow2.0とKeras)で、t-SNEとUMAPとPCAを試し、3Dバージョンも載せたサンプル.

以下のように、3つのパートに分けています.
各パートから適宜切り取って組み合わせてください.

例えば、「データ読み込み共通部分」+「t-SNE」+「データプロット3D共通部分」の組み合わせ等.

全て一つのコードに入れたバージョンも末尾においときます.

mnistの生データの可視化

まずはデータの読み込み部分. 基本的に全ての箇所はKerasもtensorflowも共通

データ読み込み共通部分

データを読み込んで、float32のnumpy arrayに変換後、255.で割っておく.

その後(60000, 28, 28)と(10000, 28, 28)になっているデータを(60000, 784)と(10000, 784)にしておく.

データプロット2D共通部分

matplotlibのscatterを使って散布図. 非常に簡単.
2Dはx_train_transformed_2dを使用.
testかtrainかどちらかで良ければ、その対応するscatterを1行消すのみでOK.

データプロット3D共通部分

plotlyのexpressに含まれるscatter_3dを使用.
もしtrainまたはtestで良ければ、mergeせずにdf_trainかdf_testをそのままグラフに渡せば良い.

PCA部分

PCAで8次元にとりあえず落としている. そのうち上位2つまたは3つの次元を使って可視化. なので共通です.

t-SNE部分

2Dと3Dでそれぞれn_componentsを調整する必要あり.
TSNEは遅いので、x_trainやx_testは多すぎないように注意.

UMAP部分

こちらもt-SNE同様に2d,3d分けて行う.

一つのコードにしたバージョン

plot_wayで2Dまたは3Dを,
dim_reduction_wayでUMAP / PCA / tSNEをお選びください.

About the author

コメントを残す