Factorisation de matrices non négatives (NMF)

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Factorisation de matrices non négatives

  • NMF = « non-negative matrix factorization »
  • Technique de réduction de dimension
  • Les modèles NMF sont interprétables (contrairement à la PCA)
  • Facile à interpréter, donc facile à expliquer !
  • Mais toutes les caractéristiques doivent être non négatives (>= 0)
Unsupervised Learning in Python

Parties interprétables

  • NMF représente les documents comme des combinaisons de sujets (ou « thèmes »)

 

Zone de texte : DataCamp est le chef de file en formation en science des données, offrant une formation axée sur les compétences, une innovation technique de pointe… signe environ égal 0,6 fois zone de texte avec les mots program, r, python, function et method, plus 0,5 fois zone de texte avec les mots data, analysis, cluster, statistics, mean plus 0,7 fois zone de texte avec les mots teaching, learn, lesson, lessons et course

Unsupervised Learning in Python

Parties interprétables

  • NMF décompose les images en combinaisons de motifs

 

boîte avec 3 bandes environ égal 0,98 fois boîte avec une bande plus 0,91 fois boîte avec une autre bande plus 0,95 fois boîte avec une autre bande

Unsupervised Learning in Python

Utiliser NMF avec scikit-learn

  • Suit le modèle fit() / transform()
  • Il faut préciser le nombre de composantes, p. ex. NMF(n_components=2)
  • Fonctionne avec les tableaux NumPy et avec csr_matrix
Unsupervised Learning in Python

Exemple de tableau de fréquences de mots

  • Tableau de fréquences de mots, 4 mots, plusieurs documents
  • Mesurer la présence des mots par « tf-idf »
    • « tf » = fréquence d'un mot dans le document
    • « idf » réduit l'influence des mots fréquents

Tableau de fréquences de mots

Unsupervised Learning in Python

Exemple d'utilisation de NMF

  • samples est le tableau de fréquences de mots
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

Composantes NMF

  • NMF a des composantes
  • … tout comme la PCA a des composantes principales
  • Dimension des composantes = dimension des échantillons
  • Les valeurs sont non négatives
print(model.components_)
[[ 0.01  0.    2.13  0.54]
 [ 0.99  1.47  0.    0.5 ]]
Unsupervised Learning in Python

Caractéristiques NMF

  • Les valeurs de caractéristiques NMF sont non négatives
  • Permettent de reconstruire les échantillons
  • … en combinant valeurs de caractéristiques et composantes
print(nmf_features)
[[ 0.    0.2 ]
 [ 0.19  0.  ]
  ...
 [ 0.15  0.12]]
Unsupervised Learning in Python

Reconstruction d'un échantillon

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

Composantes de NMF multipliées par la valeur des caractéristiques puis additionnées

Unsupervised Learning in Python

Reconstruction d'un échantillon

  • Multiplier les composantes par les valeurs de caractéristiques, puis additionner
  • S'exprime aussi comme un produit de matrices
  • C'est la « Matrix Factorization » dans « NMF »
Unsupervised Learning in Python

NMF s'applique uniquement à des données non négatives

  • Fréquences de mots par document
  • Images encodées en tableaux
  • Spectrogrammes audio
  • Historiques d'achats sur des sites de commerce en ligne
  • … et bien d'autres !
Unsupervised Learning in Python

Passons à la pratique !

Unsupervised Learning in Python

Preparing Video For Download...