次元削減 scikit-learn

次元削減

次元削減の例題として、手書き数字の画像データセットであるMNISTを使用して、PCAを用いた次元削減を行う例を示します。

まず、Scikit-learnのデータセットモジュールからMNISTデータセットを読み込みます。

1
2
3
4
5
6
from sklearn.datasets import fetch_openml

# MNISTデータセットの読み込み
mnist = fetch_openml('mnist_784', version=1)
X = mnist.data
y = mnist.target

次に、読み込んだデータを正規化します。

1
2
3
4
5
from sklearn.preprocessing import MinMaxScaler

# 特徴量の正規化
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)

データを正規化した後、PCAを使用して次元削減を行います。

1
2
3
4
5
from sklearn.decomposition import PCA

# PCAのインスタンスを作成し、次元削減を実行
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X_normalized)

最後に、次元削減されたデータを可視化します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt

# 可視化のためにデータを分割
x = X_reduced[:, 0]
y = X_reduced[:, 1]

# グラフのプロット
plt.scatter(x, y, c=y, cmap='viridis', alpha=0.5)
plt.colorbar(label='Digit')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('MNIST Dataset - PCA')

plt.show()

このコードを実行すると、次元削減されたデータを2次元平面上にプロットした散布図が表示されます。

各データポイントは手書き数字を表し、色によって異なる数字が示されます。

[実行結果]

この例では、MNISTデータセットを使用してPCAを適用し、高次元の手書き数字のデータを2次元に削減しました。

削減されたデータを散布図としてプロットすることで、異なる数字のパターンやクラスタを視覚化することができます。