Fatoração de matriz não negativa (NMF)

Unsupervised Learning em Python

Benjamin Wilson

Director of Research at lateral.io

Fatoração de matriz não negativa

  • NMF = "non-negative matrix factorization" (fatoração de matriz não negativa)
  • Técnica de redução de dimensionalidade
  • Modelos NMF são interpretáveis (ao contrário do PCA)
  • Fácil de interpretar = fácil de explicar!
  • Porém, todas as features devem ser não negativas (>= 0)
Unsupervised Learning em Python

Partes interpretáveis

  • NMF expressa documentos como combinações de tópicos (ou "temas")

 

Caixa de texto: A DataCamp é a principal líder em Educação em Ciência de Dados, oferecendo treinamento por habilidades, inovando tecnicamente... aproximadamente igual a 0,6 vezes caixa com palavras program, r, python, function, method, mais 0,5 vezes caixa com palavras data, analysis, cluster, statistics, mean, mais 0,7 vezes caixa com palavras teaching, learn, lesson, lessons, course

Unsupervised Learning em Python

Partes interpretáveis

  • NMF expressa imagens como combinações de padrões

 

caixa com 3 listras aproximadamente igual a 0,98 vezes caixa com uma listra mais 0,91 vezes caixa com outra listra mais 0,95 vezes caixa com outra listra

Unsupervised Learning em Python

Usando NMF no scikit-learn

  • Segue o padrão fit() / transform()
  • É preciso definir o número de componentes, ex.: NMF(n_components=2)
  • Funciona com arrays NumPy e com csr_matrix
Unsupervised Learning em Python

Exemplo de array de frequências

  • Array de frequência de palavras, 4 palavras, muitos documentos
  • Mede presença de palavras em cada documento com "tf-idf"
    • "tf" = frequência da palavra no documento
    • "idf" reduz a influência de palavras muito frequentes

Array de frequência de palavras

Unsupervised Learning em Python

Exemplo de uso do NMF

  • samples é o array de frequências de palavras
from sklearn.decomposition import NMF

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

Componentes do NMF

  • NMF tem componentes
  • ... assim como PCA tem componentes principais
  • Dimensão dos componentes = dimensão de samples
  • Entradas são não negativas
print(model.components_)
[[ 0.01  0.    2.13  0.54]
 [ 0.99  1.47  0.    0.5 ]]
Unsupervised Learning em Python

Features do NMF

  • Valores das features do NMF são não negativos
  • Dá para reconstruir os samples
  • ... combinando features com os componentes
print(nmf_features)
[[ 0.    0.2 ]
 [ 0.19  0.  ]
  ...
 [ 0.15  0.12]]
Unsupervised Learning em Python

Reconstrução de um sample

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

Componentes do NMF multiplicados pelo valor da feature e somados

Unsupervised Learning em Python

Reconstrução do sample

  • Multiplique componentes pelos valores das features e some
  • Também pode ser escrito como produto de matrizes
  • Isso é a "Fatoração de Matrizes" no "NMF"
Unsupervised Learning em Python

NMF só serve para dados não negativos

  • Frequência de palavras em cada documento
  • Imagens como arrays
  • Espectrogramas de áudio
  • Históricos de compras em e-commerce
  • ... e muito mais!
Unsupervised Learning em Python

Vamos praticar!

Unsupervised Learning em Python

Preparing Video For Download...