Menu
CoddyTech

パターンとしての成分

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 30/51。

PCA は何を見たのでしょうか?各成分は64個の重み(ピクセルごとに1つ)で、components_には成分ごとに1行が格納されています。

pca = PCA(n_components=4).fit(X)
print(pca.components_.shape)

これは (4, 64) を出力します。1 行を 8×8 に変形すると、画像になります。cmap="gray_r" は反転したグレースケールです。重みが大きい部分は暗く、負の部分は明るくなります。

ax.imshow(pca.components_[0].reshape(8, 8), cmap="gray_r")

数字の最初の4つの成分を8×8の画像で表示。重みがほぼゼロの部分は灰色、大きい部分は暗く、負の部分は明るい

成分1は、4と6にインクがある部分が暗いため、それらはマップの右側に配置されます。スキャン画像のインクが暗いピクセルに重なると、スコアは高くなります。

challenge icon

チャレンジ

中級

書道の先生は、人々が1つの数字を書くさまざまな方法を見たいと思っています。プログラムは数字を読み取り、スターターコードはそのスキャン画像をXに保持します。

  1. Xに対して、3つの成分でPCAを適合させます。
  2. 成分iをaxs[i]上に8×8の画像として描画し、cmap="gray_r"を使って、タイトルをComponent 1からComponent 3にします。
  3. グラフを表示します。

2の場合は、このように描画されます。その後、Coddyが各パネルを説明します。

手書きの2を表す8×8の成分画像が3つあり、タイトルはComponent 1、Component 2、Component 3で、それぞれに濃淡のある線が描かれている

自分で試してみよう

import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA

# 入力から読み取る1桁の数字の各スキャン: 1行あたり64ピクセル
d = int(input())
digits = load_digits()
X = digits.data[digits.target == d]

# 以下の行は変更しないでください
fig, axs = plt.subplots(1, 3)

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ