Isomapによる次元削減

Isomapとは?

Isomapは、多次元スケーリング(MDS)に基づいた非線形次元削減の手法の一つです。この手法は、高次元データセットの構造を低次元で表現するために使用されます。IsomapはPCA(主成分分析)やt-SNE(t-distributed Stochastic Neighbor Embedding)のような次元削減技術と同じカテゴリーに属する手法です。

この記事では、Isomapを用いたデータの視覚化を行ってみます。
環境はGoogle Corabです。

データセット

データセットは下記を利用します。Isomapは非線形次元削減手法であるため、データが非線形関係に基づいて構成されている場合に適しています。

今回はMNISTデータセットを利用しました。手書き数字(0から9まで)が含まれるデータセットで、各画像は28x28ピクセルのグレースケール画像です。このデータセットは多様体学習に頻繁に使用され、数字の異なる形や筆圧の変化が多様体の構造を形成します。

from sklearn.datasets import fetch_openml

mnist = fetch_openml('mnist_784', version=1)
X = mnist.data
y = mnist.target

Isomapの適用

それではIsomapを適用していきます。
Isomapはscikit-learnに実装されているため、そちらを利用します。

import matplotlib.pyplot as plt
from sklearn.manifold import Isomap
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

subset_size = int(len(X_scaled) * 0.5)

isomap = Isomap(n_neighbors=5, n_components=2)
X_isomap = isomap.fit_transform(X_scaled[:subset_size])

plt.figure(figsize=(10, 8))
plt.scatter(X_isomap[:, 0], X_isomap[:, 1], c=y[:subset_size].astype(int), cmap='tab10', s=50, alpha=0.6)
plt.colorbar()
plt.title('Isomap on MNIST')
plt.xlabel('Component 1')
plt.ylabel('Component 2')
plt.grid(True)
plt.show()