我使用IterativeImputer
(from sklearn.impute import IterativeImputer
)处理一个小的(42* 7)规范化(mean=0,方差= 1) numpy数据,其中包括缺失的值。当我对此数据激活IterativeImputer命令fit
时,会收到以下警告(多次):
RuntimeWarning: overflow encountered in square eigen_vals_ = S ** 2
RuntimeWarning: invalid value encountered in true_divide
gamma_ = np.sum((alpha_ * eigen_vals_) /
RuntimeWarning: overflow encountered in matmul
ret = a @ b
最后,我得到了以下错误:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
如果我将max_iter
值(从4000更改为100),则不会出现警告和错误,但这不是一个好的解决方案。
这些警告和错误的原因是什么,以及如何修复?
数据的代码和PrintScreen附后如下:
import numpy as np
import pandas as pd
x= pd.read_csv("small datasets/check_31_7.csv", header= None)
z= x.to_numpy()
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from numpy import isnan
miss_mean_imputer = IterativeImputer(missing_values=np.nan, max_iter= 4000)
miss_mean_imputer = miss_mean_imputer.fit(z)
imputed_data = miss_mean_imputer.transform(z)
print("")
数据(第41行没有出现在图片中):
发布于 2022-08-03 04:59:38
IterativeImputer根据回归模型填充缺失的值。我假设,由于您正在进行大量的迭代并得到溢出错误,所以在每次迭代之后,丢失的值都在增长,直到达到无穷大为止。
一种解决方案是在每次迭代后设置一个min或最大值,至少停止警告和错误,从而完成一些后处理。这只是通过提供一个min_value
和max_value
参数来完成,如下所示:
miss_mean_imputer = IterativeImputer(missing_values=np.nan, max_iter= 4000, min_value=-3, max_value=3)
https://stackoverflow.com/questions/73185027
复制相似问题