如何处理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中的缺失值的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 Python 中应该缺失的缺失值(不应插入 NaN)?
在scikit learn中,如何处理数值和标称值混合的数据?