scikit中的NaN / inf值 - 学习流形学习函数

时间:2013-07-08 14:49:05

标签: python scikit-learn

我有一个流形学习/非线性维数减少问题,我知道物体之间的距离达到某个阈值,除此之外,我只知道距离是“远”。此外,在某些情况下,某些距离可能会丢失。我正在尝试使用sklearn.manifold来执行查找1d表示的任务。一个自然的表示方式是将inf和缺失的距离表示为“远”距离nan

但是,目前scikit-learn似乎不支持nan中给出多种学习函数的距离矩阵中的infsklearn.manifold值,因为我得{{1} }}

这有概念上的原因吗?某些方法似乎特别适合ValueError: Array contains NaN or infinity,例如非度量MDS。另外我知道在其他语言中这些方法的一些实现能够处理缺失/ inf值。

我没有使用inf而是考虑将“远”值设置为非常大的值,但我不确定这会对结果产生什么影响。

更新

我挖掘了inf的代码,发现了一段代码和评论sklearn.manifold.MDS._smacof_single()。这是一种未记录的方法来指定缺失值吗?这是否适用于所有多种功能?

1 个答案:

答案 0 :(得分:0)

简短回答:正如您所提到的,非度量MDS能够处理不完全相异矩阵。您是对的:使用MDS(metric=False)时,将值设置为零将被解释为缺失值。它不适用于非基于非度量MDS的其他流程学习过程,但可能有类似的(未记录的)方法可用。

关于你的问题 用高值替换inf将确保您的低维表示。这是否有效是一个概念性的问题,人们只能回答知道inf值的来源。 inf-entries是否意味着“这些数据彼此之间的距离很远”,高价值的替换是有意义的(就像你的情况一样)。如果它缺乏关于不相似性的知识,我不建议用inf替换。如果没有其他解决方案(如非度量MDS或矩阵完成),那么我宁愿建议在这种情况下用可测量距离的中位数替换(结账Imputation)。

从2017年查看我的answer类似问题。