如何处理python scikit NMF中的缺失值

Posted

技术标签:

【中文标题】如何处理python scikit NMF中的缺失值【英文标题】:How to deal with missing values in python scikit NMF 【发布时间】:2017-01-15 00:12:33 【问题描述】:

我正在尝试使用 python scikit-learn 在我的数据集上应用 NMF。我的数据集包含 0 个值和缺失值。但是 scikit-learn 不允许在数据矩阵中使用 NaN 值。一些帖子说用零替换缺失值。

我的问题是:

如果我用零替换缺失值,算法如何分辨缺失值和真正的零值?

还有其他 NMF 实现可以处理缺失值吗?

或者有没有其他的矩阵分解算法可以做缺失值预测?

【问题讨论】:

分类器不知道用零(或列均值、行均值或...)替换缺失值。它将这些数字视为任何其他可能没问题的数字(我们总是假设这些方法存在低秩模型)。 / 一般来说,我会说,与找到没有缺失值的矩阵的低秩分解相比,缺失值预测是一个更难的问题(需要更强的假设)。作为替代方案:为一些常见的 nmf 问题编写基于 SGD 的优化器(并且您可以仅从已知值中采样) 谢谢,解决方案是应用 SGD 时似乎忽略缺失值。 面临同样的问题。您是否编写了自己的 SGD 实现?如果是,它的表现如何?到目前为止,我还没有实现任何类似于 NMF 的性能。 @silentser 是的,我已经尝试过自己的 SGD 实现。与 sklearn 实现相比,它具有相似的性能,但要慢得多。 【参考方案1】:

在 scikit-learn github 中有一个关于此的线程和一个可用的版本接缝,但尚未提交到主代码。

https://github.com/scikit-learn/scikit-learn/pull/8474

【讨论】:

请添加更多信息。链接过期。【参考方案2】:

SGD 将在这里完成这项工作,但 scikit-learn 没有可用于该任务的。编写自己的可以完成这项工作,但会真的很慢,因为不能直接并行化矩阵分解 SGD。 检查 分布式 SGD 算法描述 here。实施起来并不难,而且大大加快了速度。

【讨论】:

链接似乎已损坏。这个和你原来的一样吗? citeseerx.ist.psu.edu/viewdoc/…

以上是关于如何处理python scikit NMF中的缺失值的主要内容,如果未能解决你的问题,请参考以下文章

Scikit-Learn:如何处理不可排序的类型错误?

如何处理 Python 中应该缺失的缺失值(不应插入 NaN)?

python 相当于 R 的 NA 是啥?

在scikit learn中,如何处理数值和标称值混合的数据?

如何处理 Matlab 中 Kruskal-Wallis 测试中的缺失值?

使用 seaborn 绘图时如何处理缺失值?