[英]sklearn error ValueError: Input contains NaN, infinity or a value too large for dtype('float64')
[英]ValueError: Input contains NaN, infinity or a value too large for dtype('float64'), when using sklearn IterativeImputer
我在包含缺失值的小 (42* 7) 歸一化(均值 = 0,方差 = 1)numpy 數據上使用IterativeImputer
( from sklearn.impute import IterativeImputer
)。 當我激活fit
此數據的 IterativeImputer 命令時,我收到以下警告(很多次):
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').
如果我更改IterativeImputer
的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 行未出現在圖片中):
抱歉,我沒有足夠的代表發表評論。
IterativeImputer 基於回歸 model 填充缺失值。 我假設由於您正在進行大量迭代並遇到溢出錯誤,因此您丟失的值在每次迭代后都會增長,直到達到無窮大。
一種解決方案可能是通過在每次迭代后設置最小值或最大值來進行一些后處理,至少以停止警告和錯誤。 這只需提供min_value
和max_value
參數即可:
miss_mean_imputer = IterativeImputer(missing_values=np.nan, max_iter= 4000, min_value=-3, max_value=3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.