PCAで次元を縮小しよう
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 44/51。
64ピクセルは、数字に必要な数を上回っています。PCAでは、コンポーネント数ではなく、分散の割合を目標にできます:
n_components=0.9 は、90%を保持する最小限の成分数を保ちます:
pca = PCA(n_components=0.9)
X_small = pca.fit_transform(X)
print(pca.n_components_, X_small.shape)これは 21 (1797, 21) と出力します。数値の3分の1で、画像の大部分です。
ここではスケーラーを使いません。すべてのピクセルが、インクの濃さを表す0から16までの同じ単位を共有します。スケーリングすると、ほとんど何もない端のピクセルが拡大され、完全な特徴量になってしまいます。
チャレンジ
中級スキャンデータを縮小しましょう。プログラムは、0.8のように、保持する分散の割合を読み取ります。
- 生のピクセルデータでその割合を保つためにPCAが必要とする成分数を出力し、次にスケーリング済みピクセルデータの場合も出力します。
- 必要な成分数が少ない方を選び、その名前と縮小後のデータの形状を出力します。
0.6の場合:
Raw pixels: 7 components
Scaled pixels: 11 components
Keep: raw pixels, shape (1797, 7)ここから先は、プロジェクトでは分散の80%を保持します。
自分で試してみよう
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# Look at the Digits より:64 ピクセルのスキャン画像 1,797 枚、インクの濃さは 0 から 16
digits = load_digits()
X = digits.data
y = digits.target
# 保持する分散の割合(例:0.8)
share = float(input())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ