Niet-negatieve matrixfactorisatie (NMF)

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Niet-negatieve matrixfactorisatie

  • NMF = "non-negative matrix factorization"
  • Techniek voor dimensiereductie
  • NMF-modellen zijn interpreteerbaar (in tegenstelling tot PCA)
  • Makkelijk te interpreteren = makkelijk uit te leggen!
  • Wel moeten alle samplefeatures niet-negatief zijn (>= 0)
Unsupervised Learning in Python

Interpreteerbare delen

  • NMF stelt documenten voor als combinaties van topics (of "thema's")

 

Tekstvak: DataCamp is de eerste en belangrijkste leider in Data Science Education met skill-based training, baanbrekende technische innovatie... ongeveer gelijk aan teken 0,6 keer tekstvak met woorden program, r, python, function en method, plus 0,5 keer tekstvak met woorden data, analysis, cluster, statistics, mean plus 0,7 keer tekstvak met woorden teaching, learn, lesson, lessons en course

Unsupervised Learning in Python

Interpreteerbare delen

  • NMF stelt beelden voor als combinaties van patronen

 

vak met 3 strepen ongeveer gelijk aan 0,98 keer vak met één streep plus 0,91 keer vak met een andere streep plus 0,95 keer vak met een andere streep

Unsupervised Learning in Python

scikit-learn NMF gebruiken

  • Volgt het fit() / transform()-patroon
  • Geef aantal componenten op, bijv. NMF(n_components=2)
  • Werkt met NumPy-arrays en met csr_matrix
Unsupervised Learning in Python

Voorbeeld woordfrequentie-array

  • Woordfrequentie-array, 4 woorden, veel documenten
  • Meet aanwezigheid van woorden per document met "tf-idf"
    • "tf" = frequentie van woord in document
    • "idf" vermindert invloed van frequente woorden

Woordfrequentie-array

Unsupervised Learning in Python

Voorbeeldgebruik van NMF

  • samples is de woordfrequentie-array
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

NMF-componenten

  • NMF heeft componenten
  • ... net als PCA hoofdcomponenten heeft
  • Dimensie van componenten = dimensie van samples
  • Waarden zijn niet-negatief
print(model.components_)
[[ 0.01  0.    2.13  0.54]
 [ 0.99  1.47  0.    0.5 ]]
Unsupervised Learning in Python

NMF-features

  • NMF-featurewaarden zijn niet-negatief
  • Kun je gebruiken om samples te reconstrueren
  • ... combineer featurewaarden met componenten
print(nmf_features)
[[ 0.    0.2 ]
 [ 0.19  0.  ]
  ...
 [ 0.15  0.12]]
Unsupervised Learning in Python

Reconstructie van een sample

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

Componenten van NMF vermenigvuldigd met featurewaarde en opgeteld

Unsupervised Learning in Python

Sample-reconstructie

  • Vermenigvuldig componenten met featurewaarden en tel op
  • Kan ook als product van matrices worden geschreven
  • Dit is de "Matrix Factorization" in "NMF"
Unsupervised Learning in Python

NMF werkt alleen met niet-negatieve data

  • Woordfrequenties per document
  • Afbeeldingen als arrays
  • Audiospectrogrammen
  • Aankoopgeschiedenis op e-commerce-sites
  • ... en veel meer!
Unsupervised Learning in Python

Laten we oefenen!

Unsupervised Learning in Python

Preparing Video For Download...