Nezáporná maticová faktorizace (NMF)

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Nezáporná maticová faktorizace

  • NMF = „non-negative matrix factorization"
  • Technika redukce dimenzionality
  • Modely NMF jsou interpretovatelné (na rozdíl od PCA)
  • Snadná interpretace = snadné vysvětlení!
  • Všechny příznaky vzorků musí být nezáporné (>= 0)
Unsupervised Learning in Python

Interpretovatelné části

  • NMF vyjadřuje dokumenty jako kombinace témat

 

Textové pole: DataCamp is the first and foremost leader in Data Science Education offering skill-based training, pioneering technical innovation... ≈ 0,6× textové pole se slovy program, r, python, function, method, plus 0,5× textové pole se slovy data, analysis, cluster, statistics, mean, plus 0,7× textové pole se slovy teaching, learn, lesson, lessons, course

Unsupervised Learning in Python

Interpretovatelné části

  • NMF vyjadřuje obrázky jako kombinace vzorů

 

Pole se 3 pruhy ≈ 0,98× pole s jedním pruhem + 0,91× pole s jiným pruhem + 0,95× pole s dalším pruhem

Unsupervised Learning in Python

Použití NMF ze scikit-learn

  • Používá vzor fit() / transform()
  • Je nutné zadat počet komponent, např. NMF(n_components=2)
  • Pracuje s poli NumPy i s csr_matrix
Unsupervised Learning in Python

Příklad pole četností slov

  • Pole četností slov, 4 slova, mnoho dokumentů
  • Přítomnost slov v dokumentech měřena pomocí „tf-idf"
    • „tf" = četnost slova v dokumentu
    • „idf" snižuje vliv častých slov

Pole četností slov

Unsupervised Learning in Python

Příklad použití NMF

  • samples je pole četností slov
from sklearn.decomposition import NMF

model = NMF(n_components=2)
model.fit(samples)
NMF(n_components=2)
nmf_features = model.transform(samples)
Unsupervised Learning in Python

Komponenty NMF

  • NMF má komponenty
  • ... stejně jako PCA má hlavní komponenty
  • Dimenze komponent = dimenze vzorků
  • Hodnoty jsou nezáporné
print(model.components_)
[[ 0.01  0.    2.13  0.54]
 [ 0.99  1.47  0.    0.5 ]]
Unsupervised Learning in Python

Příznaky NMF

  • Hodnoty příznaků NMF jsou nezáporné
  • Lze je použít k rekonstrukci vzorků
  • ... kombinací hodnot příznaků s komponentami
print(nmf_features)
[[ 0.    0.2 ]
 [ 0.19  0.  ]
  ...
 [ 0.15  0.12]]
Unsupervised Learning in Python

Rekonstrukce vzorku

print(samples[i,:])
[ 0.12  0.18  0.32  0.14]
print(nmf_features[i,:])
[ 0.15  0.12]

Komponenty NMF vynásobené hodnotami příznaků a sečtené

Unsupervised Learning in Python

Rekonstrukce vzorku

  • Komponenty vynásobte hodnotami příznaků a sečtěte
  • Lze vyjádřit také jako součin matic
  • To je „Matrix Factorization" v „NMF"
Unsupervised Learning in Python

NMF pracuje pouze s nezápornými daty

  • Četnosti slov v dokumentech
  • Obrázky zakódované jako pole
  • Audio spektrogramy
  • Historie nákupů na e-commerce platformách
  • ... a mnoho dalšího!
Unsupervised Learning in Python

Pojďme si procvičit!

Unsupervised Learning in Python

Preparing Video For Download...