05 Non_Negative Matrix Factorization Movies


In [1]:
from __future__ import print_function
from time import time
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.decomposition import NMF, LatentDirichletAllocation
from sklearn.datasets import fetch_20newsgroups
import numpy as np

In [2]:
#n_samples = 2000
#n_features = 1000
n_top_words = 2

In [3]:
data_samples = ["Llegar tiempo las citas y reunionuna fase autodisciplina y evidencia respeto si mismo. puntualidad cumplido persona cortés paga sus asociados",
                "puntualidad alma negocios",
                "difícil mostrarte confiable cuando gente tiene esperarte",
                "Mejor tres horas demasiado pronto minuto demasiado tarde",
               "puntualidad educación reyes",
               "preparación y puntualidad son dos las cualidadmás importantun líder",
               "Mejor nunca tarde",
               "Nunca hubiese podido hacer todo lo he hecho sin hábitos puntualidad, orden diligencia, sin determinación concentrarmea tarea mismo tiempo",
               "falta puntualidad falta virtud"]
n_components = round(len(data_samples)/2)

In [4]:
# Use tf-idf features for NMF.
print("Extracting tf-idf features for NMF...")
tfidf_vectorizer = TfidfVectorizer(
#    max_df=0.95, min_df=2
#                                   ,max_features=n_features
                                  )
t0 = time()
tfidf = tfidf_vectorizer.fit_transform(data_samples)
tfidf_feature_names = tfidf_vectorizer.get_feature_names()
print(tfidf,tfidf_feature_names)
print("done in %0.3fs." % (time() - t0))


Extracting tf-idf features for NMF...
  (0, 29)	0.246853874521
  (0, 54)	0.208496712451
  (0, 28)	0.208496712451
  (0, 3)	0.246853874521
  (0, 46)	0.246853874521
  (0, 19)	0.246853874521
  (0, 2)	0.246853874521
  (0, 17)	0.246853874521
  (0, 45)	0.246853874521
  (0, 48)	0.246853874521
  (0, 34)	0.208496712451
  (0, 44)	0.128341994565
  (0, 9)	0.246853874521
  (0, 40)	0.246853874521
  (0, 6)	0.246853874521
  (0, 39)	0.246853874521
  (0, 51)	0.246853874521
  (0, 1)	0.246853874521
  (1, 44)	0.345053565606
  (1, 0)	0.663678399853
  (1, 36)	0.663678399853
  (2, 12)	0.377964473009
  (2, 35)	0.377964473009
  (2, 5)	0.377964473009
  (2, 8)	0.377964473009
  :	:
  (5, 31)	0.37840575439
  (6, 32)	0.57735026919
  (6, 52)	0.57735026919
  (6, 37)	0.57735026919
  (7, 54)	0.191708612846
  (7, 34)	0.191708612846
  (7, 44)	0.118007931438
  (7, 37)	0.191708612846
  (7, 25)	0.22697726647
  (7, 41)	0.22697726647
  (7, 21)	0.22697726647
  (7, 56)	0.22697726647
  (7, 30)	0.22697726647
  (7, 22)	0.22697726647
  (7, 23)	0.22697726647
  (7, 49)	0.45395453294
  (7, 26)	0.22697726647
  (7, 38)	0.22697726647
  (7, 13)	0.22697726647
  (7, 11)	0.22697726647
  (7, 4)	0.22697726647
  (7, 53)	0.22697726647
  (8, 44)	0.226470098785
  (8, 18)	0.871188289341
  (8, 58)	0.435594144671 ['alma', 'asociados', 'autodisciplina', 'citas', 'concentrarmea', 'confiable', 'cortés', 'cualidadmás', 'cuando', 'cumplido', 'demasiado', 'determinación', 'difícil', 'diligencia', 'dos', 'educación', 'esperarte', 'evidencia', 'falta', 'fase', 'gente', 'hacer', 'he', 'hecho', 'horas', 'hubiese', 'hábitos', 'importantun', 'las', 'llegar', 'lo', 'líder', 'mejor', 'minuto', 'mismo', 'mostrarte', 'negocios', 'nunca', 'orden', 'paga', 'persona', 'podido', 'preparación', 'pronto', 'puntualidad', 'respeto', 'reunionuna', 'reyes', 'si', 'sin', 'son', 'sus', 'tarde', 'tarea', 'tiempo', 'tiene', 'todo', 'tres', 'virtud']
done in 0.009s.

In [5]:
# Fit the NMF model
t0 = time()
nmf = NMF(n_components=n_components, random_state=1,alpha=.1, l1_ratio=.5).fit(tfidf)
print("done in %0.3fs." % (time() - t0))
tfidf_feature_names = tfidf_vectorizer.get_feature_names()


done in 0.015s.

In [6]:
def print_top_words(model, feature_names, n_top_words):
    for topic_idx, topic in enumerate(model.components_):
        message = "Topic #%d: " % topic_idx
        message += " ".join([feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]])
        print(message)
    print()

In [7]:
print("\nTopics in NMF model (Frobenius norm):")
print_top_words(nmf, tfidf_feature_names, n_top_words)


Topics in NMF model (Frobenius norm):
Topic #0: tarde mejor
Topic #1: puntualidad alma
Topic #2: llegar cumplido
Topic #3: esperarte cuando


In [8]:
enumerate(nmf.components_)


Out[8]:
<enumerate at 0x7f6ed8668dc8>

In [ ]: