NMFが学習する「パーツ」

Pythonで学ぶ教師なし学習

Benjamin Wilson

Director of Research at lateral.io

例: NMFが学習する「パーツ」

  • 単語出現頻度の配列(tf-idf)
  • 20,000件の科学論文(行)
  • 800単語(列)

記事の単語出現頻度配列

Pythonで学ぶ教師なし学習

NMFモデルを論文データに当てはめる

print(articles.shape)
(20000, 800)
from sklearn.decomposition import NMF
nmf = NMF(n_components=10)
nmf.fit(articles)
NMF(n_components=10)
print(nmf.components_.shape)
(10, 800)
Pythonで学ぶ教師なし学習

NMFの成分=トピック

nmf.components_

Pythonで学ぶ教師なし学習

NMFの成分=トピック

nmf.components_ の1行が選択され、各単語ごとにtfidfの高さを示す棒グラフが表示されている

Pythonで学ぶ教師なし学習

NMFの成分=トピック

ボックス内の上位単語と値: species 2.95, plant 1.05, plants 0.78, など

Pythonで学ぶ教師なし学習

NMFの成分=トピック

新しいボックスに、nmf.components_の別の行からの上位単語を表示:university 3.57、prof 1.19、college 0.88 など

Pythonで学ぶ教師なし学習

NMFの成分

  • ドキュメントの場合:
    • NMFの成分はトピックを表す
    • NMFはトピックを組み合わせて文章を再現する
  • 画像の場合、NMF成分は画像の一部

3本のストライプのあるボックス ≒ 0.98 × 1本ストライプのボックス + 0.91 × 別のストライプのボックス + 0.95 × 別のストライプのボックス

Pythonで学ぶ教師なし学習

グレースケール画像

  • 「グレースケール」画像 = 色なし、グレーの濃淡のみ
  • ピクセルの明るさを測定
  • 0から1の値で表現(0は黒)
  • 2次元配列に変換

白・黒・グレーの濃淡が異なる2×3のピクセル矩形

Pythonで学ぶ教師なし学習

グレースケール画像の例

  • 月の8x8グレースケール画像を配列で表現

ピクセル化された月のイラストと、0から1の数値を持つ同じ次元の数値配列

Pythonで学ぶ教師なし学習

1次元配列のグレースケール画像

  • 各成分を順番に並べる
  • 行ごと
  • 左上から右下へ

2×3ピクセルのボックスが数値の配列を指している

Pythonで学ぶ教師なし学習

1次元配列のグレースケール画像

  • 各成分を順番に並べる
  • 行ごと
  • 左上から右下へ

2行3列のボックスが、数字の入った2行3列の配列を指し、さらに1行6列の数字の配列を指している図

Pythonで学ぶ教師なし学習

画像セットの数値化

  • 同じサイズの画像セット
  • 2次元配列として表現できる
  • 各行は画像に対応
  • 各列はピクセルに対応
  • NMFが使用可能

nmf.components_の1行で表される2x3ピクセル画像

Pythonで学ぶ教師なし学習

サンプルの可視化

print(sample)
[ 0.   1.   0.5  1.   0.   1. ]
bitmap = sample.reshape((2, 3))
print(bitmap)
[[ 0.   1.   0.5]
 [ 1.   0.   1. ]]
from matplotlib import pyplot as plt
plt.imshow(bitmap, cmap='gray', interpolation='nearest')
plt.show()
Pythonで学ぶ教師なし学習

練習しましょう!

Pythonで学ぶ教師なし学習

Preparing Video For Download...