NMFは画像をパーツに分解する
ここまで学んだNMFの知識を使って、digitsデータセットを分解してみましょう。今回も、数字の画像は2次元配列samplesとして与えられています。さらに今回は、1次元配列でエンコードされた画像を表示できる関数show_as_image()も用意されています。
def show_as_image(sample):
bitmap = sample.reshape((13, 8))
plt.figure()
plt.imshow(bitmap, cmap='gray', interpolation='nearest')
plt.colorbar()
plt.show()
作業が終わったら、プロットをじっくり見て、NMFが数字をどのように成分の和として表現しているかを確認してみましょう。
この演習はコースの一部です
Pythonで学ぶ教師なし学習
演習の手順
sklearn.decompositionからNMFをインポートしてください。- 成分数
7を指定して、modelという名前のNMFインスタンスを作成してください(7はLEDディスプレイのセル数です)。 modelの.fit_transform()メソッドをsamplesに適用し、結果をfeaturesに代入してください。- モデルの各成分(
model.components_からアクセス)に対して、ループの中でshow_as_image()関数を適用してください。 featuresの行0をdigit_featuresに代入してください。digit_featuresを出力してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import NMF
____
# Create an NMF model: model
model = ____
# Apply fit_transform to samples: features
features = ____
# Call show_as_image on each component
for component in model.components_:
____
# Select the 0th row of features: digit_features
digit_features = ____
# Print digit_features
print(digit_features)