scikit-learn报”ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64’). “的原因以及解决办法

yizhihongxing

问题原因

该报错常常是由于数据存在缺失值 (NaN) 或者数据超出了 float64 数据类型的范围 (如出现了过大或过小的值) 导致的。scikit-learn 中很多算法都要求输入的数据不含缺失值,因此需要对缺失值进行处理。

解决方法

检查数据中是否存在缺失值 (NaN)。

可以使用 pandas 库中的 .isnull() 或 .notnull() 函数:

import pandas as pd

data = pd.read_csv("data.csv")
print(data.isnull().sum()) # 统计每一列的缺失值数量

如果输出结果中存在不为 0 的数,则说明数据中存在缺失值。可以考虑删除含有缺失值的行或者使用合适的填充方法来处理缺失值。

对可能会导致数据溢出的数据进行预处理,去除过大或过小的值。

可以使用 numpy 库中的 .seterr() 函数:

import numpy as np

np.seterr(all='ignore') # 忽略所有错误

或者使用数据的上下界进行截断缩放:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0, 1)) # 设置数据范围为0-1
scaled_data = scaler.fit_transform(data) # 对数据进行缩放

对发生错误的数据直接进行删除处理。

删除缺失值、nan、inf 或 large 的行:

import numpy as np

data = data[~np.isnan(data).any(axis=1)] # 删除含有 nan 的行
data = data[~np.isinf(data).any(axis=1)] # 删除含有 inf 的行
data = data[np.abs(data) < large].reshape(-1,1) # 删除过大或过小的行

使用 KNN 或者均值、中位数等方法进行填充。

使用 impute 模块中的 SimpleImputer() 函数来填充缺失值:

from sklearn.impute import SimpleImputer

filler = SimpleImputer(strategy="mean") # 求出每列的平均值,并使用其进行填充
data = filler.fit_transform(data)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:scikit-learn报”ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64’). “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月19日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部