python - plu - Factorización de matriz no negativa en Sklearn
metodo de crout (1)
Afortunadamente puedes mirar a través del código fuente:
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/decomposition/nmf.py
fit_transform()
comienza en la línea 460, y en la línea 530 muestra que H
se une a los components_
y W
se devuelve desde la función.
Entonces no deberías tener que ejecutar esto dos veces, solo debes cambiar:
nmf_model.fit(A);
H = nmf_model.components_.T;
a
W = nmf_model.fit_transform(A);
H = nmf_model.components_;
Estoy aplicando la factorización de matriz no negativa (NMF) en una matriz grande. Esencialmente, el método NMF hace lo siguiente: dada una matriz m por n A, el NMF se descompone en A = WH, donde W es m por d y H es d por n. El método ProjectedGradientNMF se implementa en el paquete Sklearn de Python. Me gustaría que el algoritmo arrojara tanto W como H. Pero parece que solo devuelve H, no W. La aplicación del algoritmo nuevamente a AT (la transposición) podría darme W. Sin embargo, me gustaría evitar calcularlo dos veces ya que matriz ix muy grande.
Si pudieras decirme cómo obtener simultáneamente W y H, ¡eso sería genial! A continuación está mi código:
from sklearn.decomposition import ProjectedGradientNMF
import numpy
A = numpy.random.uniform(size = [40, 30])
nmf_model = ProjectedGradientNMF(n_components = 5, init=''random'', random_state=0)
nmf_model.fit(A)
H = nmf_model.components_.T