【问题标题】:Nonnegative matrix factorization in SklearnSklearn中的非负矩阵分解
【发布时间】:2014-09-04 12:32:05
【问题描述】:

我正在对一个大矩阵应用非负矩阵分解 (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

【问题讨论】:

  • 能否再次将该算法应用于 A.T(转置)真的给出 W 吗?我无法验证它。

标签: python matrix machine-learning scikit-learn


【解决方案1】:

幸好你可以看一下源码:
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_;

【讨论】:

  • 太棒了。我认为 sklearn 应该清楚地指出这一点。它过于关注特征提取。
猜你喜欢
  • 2021-02-24
  • 2017-04-07
  • 1970-01-01
  • 2012-05-02
  • 2013-05-10
  • 2017-09-06
  • 1970-01-01
  • 2015-06-21
  • 2015-10-11
相关资源
最近更新 更多