我正在使用Scikit-learn的非负矩阵分解( NMF )在一个稀疏矩阵上执行NMF,其中零个条目是缺失的数据。我想知道Scikit-learn的NMF实现是否将零条目视为0或缺少数据。
谢谢!
发布于 2017-08-01 06:39:52
在您的数据矩阵中,缺失值可以是0,但是对于非常稀疏的矩阵,您通常会存储一个COO矩阵,其中每一行都以CSR格式存储,而不是存储一堆零。
如果您正在使用NMF进行推荐,那么您将通过找到W和H来分解您的数据矩阵X,使得W.H在所有三个矩阵都为非负的条件下近似等于X。当你重建这个矩阵时,一些缺失值(你应该存储零的地方)可能变成非零值,而另一些可能保持为零。此时,在重构的矩阵中,这些值就是您的预测。
所以回答你的问题,他们是0或在NMF模型中缺少数据?一旦拟合,NMF模型将包含您的预测值,因此我将它们算作零。这是一种预测数据中缺失值的方法。
发布于 2020-02-21 21:43:42
NMF将它们计算为零。我用下面的代码解决了这个问题:
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)结果是:
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,因此可以通过忽略其他元素来实现完美的重构,因此考虑到此输出,情况并非如此。
https://stackoverflow.com/questions/42357450
复制相似问题