【问题标题】:NaN/inf values in scikit-learn manifold learning functionsscikit-learn 流形学习函数中的 NaN/inf 值
【发布时间】:2013-07-05 23:06:42
【问题描述】:

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

但是,目前scikit-learn 似乎不支持sklearn.manifold 中赋予流形学习函数的距离矩阵中的naninf 值,因为我得到了ValueError: Array contains NaN or infinity

这有概念上的原因吗?有些方法似乎特别适合inf,例如非公制 MDS。我也知道这些方法在其他语言中的一些实现能够处理缺失/inf 值。

我考虑过将“远”值设置为一个非常大的数字,而不是使用inf,但我不确定这将如何影响结果。

更新:

我挖掘了sklearn.manifold.MDS._smacof_single()的代码,发现了一段代码和一条评论说"similarities with 0 are considered as missing values"。这是指定缺失值的未记录方式吗?这适用于所有多种功能吗?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

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

    关于你的问题 用高值替换 inf 肯定会塑造你的低维表示。这是否有效,而是一个概念性问题,只有知道 inf 值的来源才能回答。 inf 条目是否意味着像“这些数据彼此相距很远”之类的东西,用高值替换是有意义的(就像你的情况一样)。如果它相当缺少关于差异的知识,我不建议用 inf 替换。如果没有其他解决方案(如非度量 MDS 或矩阵完成),那么我宁愿建议在这种情况下用可测量距离的中位数替换(结帐Imputation)。

    查看我的 answer 以了解 2017 年的类似问题。

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2014-04-23
      • 2016-06-18
      • 2013-01-29
      • 2018-04-23
      • 2020-11-15
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多