我正在使用sklearn,并且亲和力传播存在问题。我建立了一个输入矩阵,但不断收到以下错误。ValueError: Input contains NaN, infinity or a value too large for dtype('float64').我跑了np.isnan(mat.any()) #and gets Falsenp.isfinite(mat.all()) #and gets True我尝试使用mat[np.isfinite(mat) == True] = 0删除无限值,但这也不起作用。我该怎么做才能摆脱矩阵中的无限值,以便可以使用亲和力传播算法?我正在使用anaconda和python 2.7.9。
3 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
这可能会在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函数的返回值是否为数字...
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
将sklearn与pandas一起使用时,出现相同的错误消息。我的解决方案是df在运行任何sklearn代码之前重置数据帧的索引:
df = df.reset_index()
当我删除自己的某些条目时,我多次遇到此问题df,例如
df = df[df.label=='desired_one']
添加回答
举报
0/150
提交
取消