5

我想使用python scikit-learn将NMF应用于我的数据集。我的数据集包含0个值和缺失值。但scikit-learn不允许在数据矩阵中使用NaN值。有些帖子说用零代替缺失的值。如何处理python scikit中的缺失值NMF

我的问题是:

  • 如果我替换缺失值以零,怎么能算法告诉缺失值和真正的零个值?

  • 有没有其他的NMF实现可以处理缺失值?

  • 或者如果有其他矩阵分解算法可以做缺失值预测吗?

+0

零替换缺失值的(或列均值,或行均值或...)不被分类已知的。它会将这些数字视为其他可能没有问题的数字(我们总是假设这些方法存在低秩模型)。 /总的来说,我会说,与找到没有缺失值的矩阵的低秩因子分解相比,缺失值预测是一个更难的问题(需要更强的假设)。作为替代方案:为一些常见的nmf问题编写一个基于SGD的优化器(并且只能从已知值中抽样) – sascha

+1

谢谢,当应用SGD是解决方案时,似乎忽略了缺失值。 –

+0

面对同样的问题。您是否编写了自己的SGD实施?如果是,它如何表现?到目前为止,我还没有能够实现类似于NMF的任何事情。 – silentser

回答

1

SGD将在这里完成这项工作,但scikit-learn没有可用于此任务的工作。编写你自己的将会完成这项工作,但由于不能直接平行矩阵分解SGD,所以将会变慢,因为真的是。 检查分布式SGD算法描述here。这不是很难实现,它显着加快了速度。

+0

好点,谢谢:) –