首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scikit-学习稀疏矩阵的非负矩阵分解(NMF)

Scikit-学习稀疏矩阵的非负矩阵分解(NMF)
EN

Stack Overflow用户
提问于 2017-02-21 10:09:08
回答 2查看 1.6K关注 0票数 2

我正在使用Scikit-learn的非负矩阵分解( NMF )在一个稀疏矩阵上执行NMF,其中零个条目是缺失的数据。我想知道Scikit-learn的NMF实现是否将零条目视为0或缺少数据。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-08-01 06:39:52

在您的数据矩阵中,缺失值可以是0,但是对于非常稀疏的矩阵,您通常会存储一个COO矩阵,其中每一行都以CSR格式存储,而不是存储一堆零。

如果您正在使用NMF进行推荐,那么您将通过找到W和H来分解您的数据矩阵X,使得W.H在所有三个矩阵都为非负的条件下近似等于X。当你重建这个矩阵时,一些缺失值(你应该存储零的地方)可能变成非零值,而另一些可能保持为零。此时,在重构的矩阵中,这些值就是您的预测。

所以回答你的问题,他们是0或在NMF模型中缺少数据?一旦拟合,NMF模型将包含您的预测值,因此我将它们算作零。这是一种预测数据中缺失值的方法。

票数 1
EN

Stack Overflow用户

发布于 2020-02-21 21:43:42

NMF将它们计算为零。我用下面的代码解决了这个问题:

代码语言:javascript
复制
from scipy import sparse
from sklearn.decomposition import NMF
import numpy as np

mat = np.array([[1,1,1],
                [1,1,0],
                [1,0,0]], 'float32')

ix = np.nonzero(mat)
sparse_mat = sparse.csc_matrix((mat[ix], ix))
print('training matrix:')
print(sparse_mat.toarray())

model = NMF(n_components=1).fit(sparse_mat)
reconstructed = model.inverse_transform(model.transform(sparse_mat))
print('reconstructed:')
print(reconstructed)

结果是:

代码语言:javascript
复制
training matrix:
[[1. 1. 1.]
 [1. 1. 0.]
 [1. 0. 0.]]
reconstructed:
[[1.22 0.98 0.54]
 [0.98 0.78 0.44]
 [0.54 0.44 0.24]]

请注意,所有的非零元素都是1,因此可以通过忽略其他元素来实现完美的重构,因此考虑到此输出,情况并非如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42357450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档