我使用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。
如果您碰巧使用“kc_house_data.csv”数据集(一些评论者和许多数据科学新手似乎使用这个数据集,因为它出现在许多流行的课程材料中),则该数据是错误的,并且是错误的真正来源。
为了解决这个问题,从2022年开始:
删除csv文件中的最后一行(空)
有两行包含一个空数据值"x,x,,x,x" -要修复它,不要删除逗号,而是添加一个随机整数值,如2000,因此它看起来像"x,x,2000,x,x"
不要忘记在项目中保存和重新加载。
所有其他答案都是有帮助和正确的,但在这种情况下不是:
如果你使用kc_house_data.csv,你需要修复文件中的数据,没有其他帮助,空数据字段将随机转移其他数据,并产生难以追踪到源的奇怪错误!
这是我的函数(基于此)来清除数据集的nan, Inf和缺失的单元格(用于倾斜的数据集):
import pandas as pd
import numpy as np
def clean_dataset(df):
assert isinstance(df, pd.DataFrame), "df needs to be a pd.DataFrame"
df.dropna(inplace=True)
indices_to_keep = ~df.isin([np.nan, np.inf, -np.inf]).any(axis=1)
return df[indices_to_keep].astype(np.float64)