sklearn 错误 ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值

新手上路,请多包涵

我正在使用 sklearn 并且亲和力传播有问题。我建立了一个输入矩阵,但不断收到以下错误。

 ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

我跑了

np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True

我尝试使用

mat[np.isfinite(mat) == True] = 0

删除无限值,但这也不起作用。我该怎么做才能摆脱矩阵中的无限值,以便我可以使用亲和力传播算法?

我正在使用 anaconda 和 python 2.7.9。

原文由 Ethan Waldie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

这可能发生在 scikit 内部,这取决于你在做什么。我建议阅读您正在使用的功能的文档。您可能正在使用一个取决于例如您的矩阵是正定的并且不满足该标准的矩阵。

编辑:我怎么能错过:

 np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True

显然是错误的。正确的是:

 np.any(np.isnan(mat))

np.all(np.isfinite(mat))

您要检查是否有任何元素为 NaN,而不是 any 函数的返回值是否为数字…

原文由 Marcus Müller 发布,翻译遵循 CC BY-SA 4.0 许可协议

sklearnpandas 一起使用时,我收到了相同的错误消息。我的解决方案是在运行任何 sklearn 代码之前重置我的数据帧的索引 df

 df = df.reset_index()

当我删除 df 中的一些条目时,我多次遇到这个问题,例如

df = df[df.label=='desired_one']

原文由 Jun Wang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏