Sklearn中的非负矩阵分解

2024-04-20 16:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个大矩阵上应用非负矩阵分解(NMF)。本质上,NMF方法执行以下操作:给定m乘n矩阵A,NMF分解为A=W H,其中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

Tags: 方法代码importnumpy算法modelcomponents矩阵
1条回答
网友
1楼 · 发布于 2024-04-20 16:22:20

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

相关问题 更多 >