更新日から1年以上経過しています。情報が古い可能性がございます。
データを何であれ可視化したいと言う要望はよくあるもので。
僕も何か適当なデータを、
適当に分類して可視化してみようかと思ったわけです。
ではやっていきましょう。
PythonでPCAとt-SNEをプロットしてみます。
今回はgithubにnotebookを公開してみたので、
コードは必要最低限で済ませます。
2次元プロットするターゲットはMNISTデータセットです。
PCAの2次元プロット
pca = PCA(n_components=2)
reduced = pca.fit_transform(train.reshape(-1, 28 * 28))
for i in range(10):
num = reduced[test == i]
plt.scatter(num[:, 0], num[:, 1], s=5, label=f'{i}')
plt.legend()
plt.show()
結果の画像を見てみましょう。
なんだか左側から放射線状にぶしゃっとした様な感じになりました。
t-SNEの2次元プロット
tsne = TSNE(learning_rate=100.0)
reduced = tsne.fit_transform(train.reshape(-1, 28 * 28))
for i in range(10):
num = reduced[test == i]
plt.scatter(num[:, 0], num[:, 1], s=5, label=f'{i}')
plt.legend()
plt.show()
こちらも画像を見てみましょう。
なんだかまとまりが出来てますね。
なかなか良い感じです。
これらのnotebookはこちらに公開しております。
https://github.com/Lucky-Mano/MNIST_Classification_plot/blob/master/notebook/PCA_%26_t-SNE.ipynb
書いてないコードはノートブックを見てください。
AutoEncoderを用いた次元圧縮
今回の最後。
AutoEncoderを用いて2次元まで次元圧縮を行い、
その結果をプロットしてみたら分類ができる!
と言うやつですね。
コードが長いのでgithubで
https://github.com/Lucky-Mano/MNIST_Classification_plot/tree/master/Source
そのままダウンロードして、main.pyを実行してください。
足らないパッケージがあれば、適宜入れる感じで。
処理が終わるとこんな画像が表示されます。
なかなか面白いですね。
え?面白くないって?
面白いでしょう?(威圧
と言う訳で、2次元プロットを幾つかやってみました。
以上。