簡體   English   中英

ValueError:使用 sklearn IterativeImputer 時,輸入包含 NaN、無窮大或對於 dtype('float64') 來說太大的值

[英]ValueError: Input contains NaN, infinity or a value too large for dtype('float64'), when using sklearn IterativeImputer

我在包含缺失值的小 (42* 7) 歸一化(均值 = 0,方差 = 1)numpy 數據上使用IterativeImputerfrom 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').

如果我更改IterativeImputermax_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_valuemax_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM