Nicht-negative Matrixfaktorisierung (NMF)

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Nicht-negative Matrixfaktorisierung

  • NMF = Nicht-negative Matrixfaktorisierung
  • Technik zur Dimensionsreduktion
  • NMF-Modelle sind leicht zu verstehen (anders als PCA).
  • Einfach zu verstehen heißt einfach zu erklären!
  • Allerdings müssen alle Probenmerkmale nicht negativ sein (>= 0).
Unsupervised Learning in Python

Interpretierbare Bestandteile

  • NMF stellt Dokumente als Kombinationen von Themen dar.

 

Textfeld: DataCamp ist der führende Anbieter von Datenwissenschaftsausbildung, der kompetenzbasierte Schulungen und bahnbrechende technische Innovationen anbietet... ungefähr gleich 0,6-mal Textfeld mit den Wörtern Programm, r, Python, Funktion und Methode plus 0,5-mal Textfeld mit den Wörtern Daten, Analyse, Cluster, Statistik, Mittelwert plus 0,7-mal Textfeld mit den Wörtern Lehren, Lernen, Lektion, Lektionen und Kurs.

Unsupervised Learning in Python

Interpretierbare Bestandteile

  • NMF stellt Bilder als Kombinationen von Mustern dar.

 

Die Box mit drei Streifen ist ungefähr 0,98 mal so groß wie die Box mit einem Streifen plus 0,91 mal so groß wie die Box mit einem anderen Streifen plus 0,95 mal so groß wie die Box mit einem anderen Streifen.

Unsupervised Learning in Python

Verwendung von scikit-learn NMF

  • Folgt dem Muster fit() und transform()
  • Die Anzahl der Komponenten muss angeben werden, z. B. NMF(n_components=2)
  • Funktioniert mit NumPy-Arrays und mit csr_matrix
Unsupervised Learning in Python

Beispiel für ein Worthäufigkeit-Array

  • Worthäufigkeit-Array, vier Wörter, viele Dokumente
  • Zählung der Wörter pro Dokument, mittels tf-idf
    • „tf“ = term frequency (Häufigkeit des Wortes im Dokument)
    • „idf“ reduziert den Einfluss häufiger Wörter

Wortfrequenz-Array

Unsupervised Learning in Python

Beispiel für die Verwendung von NMF

  • samples: Worthäufigkeit-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-Komponenten

  • NMF hat Komponenten
  • ... genauso wie PCA Hauptkomponenten hat
  • Dimension der Komponenten = Dimension der Proben
  • Die Einträge sind nicht negativ.
print(model.components_)
[[ 0.01  0.    2.13  0.54]
 [ 0.99  1.47  0.    0.5 ]]
Unsupervised Learning in Python

NMF-Merkmale

  • Die NMF-Merkmalswerte sind nicht negativ.
  • Kann zum Rekonstruieren der Proben verwendet werden.
  • ... kombiniert Merkmalswerte mit Komponenten
print(nmf_features)
[[ 0.    0.2 ]
 [ 0.19  0.  ]
  ...
 [ 0.15  0.12]]
Unsupervised Learning in Python

Rekonstruktion einer Probe

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

Komponenten von NMF, mal Feature-Wert und dann addiert

Unsupervised Learning in Python

Porbenrekonstruktion

  • Multiplikation der Komponenten mit den Merkmalswerten, anschließende Summenbildung.
  • Kann auch als Produkt von Matrizen ausgedrückt werden.
  • Daher stammt die Matrix-Faktorisierung in NMF.
Unsupervised Learning in Python

NMF funktioniert nur mit nicht-negativen Daten.

  • Wie oft kommt ein Wort in jedem Dokument vor?
  • Als Arrays repräsentierte Bilder
  • Audiospektrogramme
  • Kaufhistorien auf E-Commerce-Seiten
  • ... und noch viel mehr!
Unsupervised Learning in Python

Lass uns üben!

Unsupervised Learning in Python

Preparing Video For Download...