Sklearn中的非负矩阵分解



我正在对一个大矩阵应用非负矩阵分解(NMF)。本质上,NMF方法做以下事情:给定一个m × n的矩阵A, NMF分解成A = WH,其中W是m × d, H是d × n。ProjectedGradientNMF方法是在Python包Sklearn中实现的。我希望算法同时返回W和H,但似乎它只返回H,而不是W。将算法再次应用于at(转置)可以得到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

幸运的是,您可以查看源代码:
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;

W = nmf_model.fit_transform(A);
H = nmf_model.components_;

相关内容

  • 没有找到相关文章

最新更新