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で学ぶ教師なし学習

グレースケール画像の例

  • 月の8×8グレースケール画像(配列で表現)

 

月のピクセル画と、0〜1の数値を持つ同次元の配列を指す矢印

Pythonで学ぶ教師なし学習

平坦化配列としてのグレースケール画像

  • 要素を列挙
  • 行ごと
  • 左から右、上から下

2×3ピクセルのボックスが配列の数値を指す図

Pythonで学ぶ教師なし学習

平坦化配列としてのグレースケール画像

  • 要素を列挙
  • 行ごと
  • 左から右、上から下

2×3ピクセルのボックス → 2×3配列 → 1×6配列の数値に矢印

Pythonで学ぶ教師なし学習

画像集合の符号化

  • 同一サイズの画像集合
  • 2次元配列で符号化
  • 各行が画像
  • 各列がピクセル
  • …NMFを適用可能!

2×3ピクセル画像を表す nmf.components_ の1行

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...