Неотрицательная матричная факторизация в Sklearn
Я применяю неотрицательную матричную факторизацию (NMF) на большой матрице. По существу, метод NMF делает следующее: Учитывая матрицу M по n, NMF разлагается на A = WH, где W-m по d и H-d по n. Метод ProjectedGradientNMF реализован в пакете Python Sklearn. Я хотел бы, чтобы алгоритм возвращал как W, так и H. Но кажется, что он возвращает только H, а не W. применение алгоритма снова к A. T (транспонирование) может дать мне W. однако я хотел бы избежать его вычисления дважды со времен матрицы ix очень большой.
Если бы вы могли сказать мне, как одновременно получить W и H, это было бы здорово! Ниже приведен мой код:
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
1 ответов
К счастью, вы можете посмотреть через источник code:
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/decomposition/nmf.py
fit_transform()
начинается в строке 460, а в строке 530 показывает, что H
привязывается к components_
и W
возвращается из функции.
поэтому вам не нужно запускать это дважды, вы должны просто изменить:
nmf_model.fit(A);
H = nmf_model.components_.T;
to
W = nmf_model.fit_transform(A);
H = nmf_model.components_;