我使用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。


当前回答

这里没有一个答案对我有用。这是有效的。

Test_y = np.nan_to_num(Test_y)

它将无穷大值替换为高有限值,将nan值替换为数字

其他回答

dataset = dataset.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

这对我很有效

我想为numpy提出一个适合我的解决方案。这条线

from numpy import inf
inputArray[inputArray == inf] = np.finfo(np.float64).max

将numpy数组的所有无限值替换为最大的float64数。

我有错误后,试图选择一个子集的行:

df = df.reindex(index=my_index)

结果是my_index包含df中不包含的值。索引,所以reindex函数插入一些新行,并用nan填充它们。

泡芙! !在我的情况下,问题是关于NaN值…

您可以使用此函数列出具有NaN的列

your_data.isnull().sum()

然后你可以在数据集文件中填充这些NAN值。

下面是如何“将NaN替换为零,将无穷大替换为大的有限数”的代码。

your_data[:] = np.nan_to_num(your_data)

从numpy.nan_to_num

如果您正在运行一个估计器,可能是您的学习率太高了。我意外地将错误的数组传递给了网格搜索,最终训练的学习率为500,我可以看到这导致了训练过程中的问题。

基本上,不仅你的输入必须全部有效,中间数据也必须有效。