Невід'ємна факторизація матриць (NMF)

Наглядове навчання в Python

Benjamin Wilson

Director of Research at lateral.io

Невід'ємна факторизація матриць

  • NMF = "non-negative matrix factorization"
  • Метод зменшення розмірності
  • Моделі NMF інтерпретовані (на відміну від PCA)
  • Легко тлумачити — легко пояснювати!
  • Але всі ознаки зразків мають бути невід'ємними (>= 0)
Наглядове навчання в Python

Інтерпретовані частини

  • NMF подає документи як комбінації тем (або «топіків»)

 

Текстове поле: DataCamp is the first and foremost leader in Data Science Education offering skill-based training, pioneering technical innovation... approximately equals sign 0.6 times text box with words program, r, python, function, and method, plus 0.5 times text box with words data, analysis, cluster, statistics, mean plus 0.7 times text box with words teaching, learn, lesson, lessons, and course

Наглядове навчання в Python

Інтерпретовані частини

  • NMF подає зображення як комбінації патернів

 

box with 3 stripes approximately equals 0.98 times box with one stripe plus 0.91 times box with a different stripe plus 0.95 times box with a different stripe

Наглядове навчання в Python

Використання NMF у scikit-learn

  • Слідує шаблону fit() / transform()
  • Потрібно задати кількість компонент, напр. NMF(n_components=2)
  • Працює з масивами NumPy та з csr_matrix
Наглядове навчання в Python

Приклад масиву частот слів

  • Масив частот слів, 4 слова, багато документів
  • Виміряйте наявність слів у документі за допомогою «tf-idf»
    • «tf» = частота слова в документі
    • «idf» зменшує вплив частих слів

Масив частот слів

Наглядове навчання в Python

Приклад використання NMF

  • samples — це масив частот слів
from sklearn.decomposition import NMF

model = NMF(n_components=2)
model.fit(samples)
NMF(n_components=2)
nmf_features = model.transform(samples)
Наглядове навчання в Python

Компоненти NMF

  • У NMF є компоненти
  • ... так само як у PCA — головні компоненти
  • Розмірність компонент = розмірність зразків
  • Значення невід'ємні
print(model.components_)
[[ 0.01  0.    2.13  0.54]
 [ 0.99  1.47  0.    0.5 ]]
Наглядове навчання в Python

Ознаки NMF

  • Значення ознак у NMF невід'ємні
  • Можна відновити зразки
  • ... комбінуючи значення ознак з компонентами
print(nmf_features)
[[ 0.    0.2 ]
 [ 0.19  0.  ]
  ...
 [ 0.15  0.12]]
Наглядове навчання в Python

Реконструкція зразка

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

Компоненти NMF, помножені на значення ознак і підсумовані

Наглядове навчання в Python

Реконструкція зразка

  • Помножте компоненти на значення ознак і підсумуйте
  • Також можна подати як добуток матриць
  • Це та сама "Matrix Factorization" у «NMF»
Наглядове навчання в Python

NMF працює лише з невід'ємними даними

  • Частоти слів у кожному документі
  • Зображення, закодовані як масиви
  • Аудіоспектрограми
  • Історії покупок на сайтах e-commerce
  • ... та багато іншого!
Наглядове навчання в Python

Давайте потренуємось!

Наглядове навчання в Python

Preparing Video For Download...