t-SNE を使って、手書き文字データ MNIST を分類してみました。
MNIST データセットはここから拝借しました。
github.com
MNIST の解説はこれが分かりやすいですね ↓
MNIST データを読みこんで、
% MNIST data load('mnist.mat') % data to be analyzed idx = 1:10000; X = double(testX(idx,:)); c = testY(idx);
t-SNE に放り込んで、ついでに k-means クラスタリングして、
% t-SNE Y = tsne(X,'NumPCAComponents',30); % k-means clustering k = 10; clu = kmeans(Y,k);
プロットしてみました。
subplot(121) scatter(Y(:,1),Y(:,2),5,c,'filled') colorbar colormap jet title('t-SNE on MNIST') subplot(122) scatter(Y(:,1),Y(:,2),5,clu-1,'filled') colorbar colormap jet title('k-means clustering')
ざっくり適当に放り込んだだけで、ほぼ完璧に分類できています (左図)。t-SNE スゴイ。
k-means でのクラスタリングも良い感じですが (右図)、ところどころ境界がおかしいですね。k-means はクラスタを球形にとってくるので、これは仕方ないのかもしれません。DBSCAN とかにすればもっと上手くいく、かもしれません。