圧縮して再構築
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 31/51。
スキャンの成分スコアはレシピです。平均スキャンから始め、各パターンにそのスコアを掛けたものを加えます。inverse_transformは、このレシピをたどって64ピクセルに戻します。
pca = PCA(n_components=10).fit(X)
codes = pca.transform(X) # スキャンごとに10個の数値
rebuilt = pca.inverse_transform(codes) # 再び64ピクセルここに、使用する数値を増やしながら再構成した3つのスキャンがあります:
平均的な数字の周辺をぼかす数字はわずかで、コンポーネントを追加するたびに細部が復元されます。64個ではなく20個の数字でも、すでにはっきり読み取れます。
チャレンジ
中級スマートペンは各数字を k 個のPCA数値として無線送信し、プログラムが読み取ります。何が失われるでしょうか?
Xに対してk個の成分でPCAを適合させます。すべてのスキャンを圧縮し、rebuiltに再構築します。- 以下の行を出力します。誤差は
Xとの差の絶対値の平均です。 - 最新のスキャン
X[-1]をaxs[0]に、その再構築画像をaxs[1]に、どちらもgray_rで描画します。表示します。
7 の場合:
Sent: 7 numbers per scan instead of 64
Average pixel error: 1.739そして、これを描画します。次にCoddyが各パネルについて説明します:
自分で試してみよう
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# 64ピクセルのスキャンが1,797件あり、ペンによる最新のスキャンは最後の行にある
digits = load_digits()
X = digits.data
k = int(input())
# 以下の行は変更しないでください
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ