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

2024-04-29 14:13:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

然而,似乎目前scikit-learn不支持nan和{}值,因为我得到了ValueError: Array contains NaN or infinity。在

这有什么概念上的原因吗?有些方法似乎特别适合inf,例如非度量MDS。其他一些inf语言的实现也能处理这些缺失的值。在

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

更新:

我挖掘了sklearn.manifold.MDS._smacof_single()的代码,找到了一段代码和一条注释,上面写着"similarities with 0 are considered as missing values"。这是一种未记录的指定缺失值的方法吗?这对所有的流形函数都有效吗?在


Tags: 方法代码距离情况阈值sklearnscikitnan
1条回答
网友
1楼 · 发布于 2024-04-29 14:13:19

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

关于你的问题 用高值替换inf将确定您的低维表示。这是否有效,更确切地说是一个概念性的问题,只有知道inf值的来源才能回答这个问题。inf条目是否意味着“这些数据彼此之间的距离很小”用高值替换是有意义的(就像在您的例子中)。如果这是一个关于差异性的缺失知识,我不建议用inf代替。如果没有其他解决方案(如非度量MDS或矩阵补全),那么我宁愿建议在这种情况下用可测量距离的中位数来代替(checkoutImputation)。在

看看我的answer2017年的一个类似问题。在

相关问题 更多 >