ValueError: 输入包含NaN、无穷大或对于dtype(‘float64’)来说过大的值。如何处理此错误?

在数据集中,我首先使用均值策略的Imputer类替换了所有缺失值,但它在数据集中替换成了较大的值,导致了这个错误。有什么解决方案,或者我怎样才能将值四舍五入到小数点后两位。因为数据集包含浮点数,将它们四舍五入到小数点后两位或三位对我来说是可行的。

代码:


回答:

X_train.replace([np.inf, -np.inf], np.nan, inplace=True)

使用上述代码

然后用以下代码替换空值:

X_train.fillna(999, inplace=True)

或者

X_train.fillna(X_train.mean(), inplace=True)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

ValueError:输入包含NaN、无穷大或对于dtype(‘float64’)来说过大的值,即使isnan和isinf为假且dtype=float64

我的代码是用来分析来自kaggle的PUBG数据集并构建模型。我已经提取了所有特征并使用sklearn中的StandardScaler对它们进行了标准化处理。

//SnippetX=standardized_datay=training_features_outputX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.30,random_state=42)print(standardized_data.shape,training_features_output.shape)

[Output]: (4446966, 16) (4446966,)

print(np.all(np.isinf(standardized_data)))print(np.all(np.isinf(training_features_output)))print(np.all(np.isnan(standardized_data)))print(np.all(np.isnan(training_features_output)))

[Output]:
False
False
False
False

print(X.dtype)print(y.dtype)

[Output]:
dtype(‘float64’)
dtype(‘float64’)

model=LinearRegression()model.fit(X_train,y_train)y_train_pred=model.predict(X_train)y_test_pred=model.predict(X_test)print('Train r2_accuracy:',r2_score(y_train,y_train_pred))print('Test r2_accuracy:',r2_score(y_test,y_test_pred))

ValueError: 输入包含NaN、无穷大或对于dtype(‘float64’)来说过大的值。

错误图片
完整代码

从上面的输出可以看出,数据集中没有nan无穷大值,并且数据类型是float64。但为什么会出现这个错误,我该如何解决它?
我在stackoverflow上查看了其他相关问题,都是因为有nan或其他问题导致的,而我不知道我的代码哪里出了问题。


回答:

你的检查点是不正确的,因为你使用np.all()检查所有数据是否为inf

print(np.all(np.isinf(standardized_data)))...

相反,应该使用np.any()

证明

a = [np.inf, 0, 1]np.all(np.isinf(a))#Falsenp.any(np.isinf(a))#True

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

ValueError: 输入包含NaN、无穷大或对于dtype(‘float64’)来说过大的值,而这是在预处理数据时发生的

我有两个CSV文件(训练集测试集)。由于在一些列中可以看到NaN值(status, hedge_value, indicator_code, portfolio_id, desk_id, office_id)。

我开始处理时,先用对应列的某个巨大值替换NaN值。然后我进行LabelEncoding以去除文本数据并将其转换为数值数据。现在,当我尝试对分类数据进行OneHotEncoding时,我遇到了错误。我尝试逐一将输入传递给OneHotEncoding构造函数,但对于每一列我都得到了相同的错误。

基本上,我的最终目标是预测回报值,但我因为数据预处理部分的这个问题而卡住了。我该如何解决这个问题呢?

我使用Python3.6,结合PandasSklearn进行数据处理。

代码

import pandas as pdimport matplotlib.pyplot as pltimport numpy as nptest_data = pd.read_csv('test.csv')train_data = pd.read_csv('train.csv')# 替换NaN值train_data['status']=train_data['status'].fillna(2.0)train_data['hedge_value']=train_data['hedge_value'].fillna(2.0)train_data['indicator_code']=train_data['indicator_code'].fillna(2.0)train_data['portfolio_id']=train_data['portfolio_id'].fillna('PF99999999')train_data['desk_id']=train_data['desk_id'].fillna('DSK99999999')train_data['office_id']=train_data['office_id'].fillna('OFF99999999')x_train = train_data.iloc[:, :-1].valuesy_train = train_data.iloc[:, 17].values# =============================================================================# from sklearn.preprocessing import Imputer# imputer = Imputer(missing_values="NaN", strategy="mean", axis=0)# imputer.fit(x_train[:, 15:17])# x_train[:, 15:17] = imputer.fit_transform(x_train[:, 15:17])# # imputer.fit(x_train[:, 12:13])# x_train[:, 12:13] = imputer.fit_transform(x_train[:, 12:13])# =============================================================================# 编码分类数据,即文本数据,因为计算只能在数字上进行,所以像国家名称、购买状态这样的文本会带来麻烦from sklearn.preprocessing import LabelEncoder, OneHotEncoderlabelencoder_X = LabelEncoder()x_train[:, 0] = labelencoder_X.fit_transform(x_train[:, 0])x_train[:, 1] = labelencoder_X.fit_transform(x_train[:, 1])x_train[:, 2] = labelencoder_X.fit_transform(x_train[:, 2])x_train[:, 3] = labelencoder_X.fit_transform(x_train[:, 3])x_train[:, 6] = labelencoder_X.fit_transform(x_train[:, 6])x_train[:, 8] = labelencoder_X.fit_transform(x_train[:, 8])x_train[:, 14] = labelencoder_X.fit_transform(x_train[:, 14])# =============================================================================# import numpy as np# x_train[:, 3] = x_train[:, 3].reshape(x_train[:, 3].size,1)# x_train[:, 3] = x_train[:, 3].astype(np.float64, copy=False)# np.isnan(x_train[:, 3]).any()# =============================================================================# =============================================================================# from sklearn.preprocessing import StandardScaler# sc_X = StandardScaler# x_train = sc_X.fit_transform(x_train)# =============================================================================onehotencoder = OneHotEncoder(categorical_features=[0,1,2,3,6,8,14])x_train = onehotencoder.fit_transform(x_train).toarray() # 使用独热编码替换国家名称

错误

Traceback (most recent call last):  File "<ipython-input-4-4992bf3d00b8>", line 58, in <module>    x_train = onehotencoder.fit_transform(x_train).toarray() # 使用独热编码替换国家名称  File "/Users/parthapratimneog/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/data.py", line 2019, in fit_transform    self.categorical_features, copy=True)  File "/Users/parthapratimneog/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/data.py", line 1809, in _transform_selected    X = check_array(X, accept_sparse='csc', copy=copy, dtype=FLOAT_DTYPES)  File "/Users/parthapratimneog/anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py", line 453, in check_array    _assert_all_finite(array)  File "/Users/parthapratimneog/anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py", line 44, in _assert_all_finite    " or a value too large for %r." % X.dtype)ValueError: 输入包含NaN、无穷大或对于dtype('float64')来说过大的值

回答:

在发布问题后,我再次检查了数据集,发现了另一列包含NaN。我简直不敢相信我浪费了这么多时间在上面,而我本可以使用Pandas函数来获取包含NaN的列列表。使用以下代码,我发现我漏掉了三列。我之前是在视觉上搜索NaN,而我本可以直接使用这个函数。在处理了这些新的NaN后,代码正常工作了。

pd.isnull(train_data).sum() > 0

结果

portfolio_id      Falsedesk_id           Falseoffice_id         Falsepf_category       Falsestart_date        Falsesold               Truecountry_code      Falseeuribor_rate      Falsecurrency          Falselibor_rate         Truebought             Truecreation_date     Falseindicator_code    Falsesell_date         Falsetype              Falsehedge_value       Falsestatus            Falsereturn            Falsedtype: bool

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

ValueError: 输入包含NaN、无穷大或对于dtype(‘float64’)来说过大的值,使用LinearRegression

我在Python中练习机器学习,遇到一个障碍但我感到很困惑。我使用的数据集是titanic.csv。我试图使用线性回归来计算Age列的缺失值。

training = dftrain[['Age','SibSp','Parch','Fare','Pclass','Sex_female',                'Sex_male','Embarked_C','Embarked_Q','Embarked_S']]testing  = dftest[['Age','SibSp','Parch','Fare','Pclass','Sex_female',               'Sex_male','Embarked_C','Embarked_Q','Embarked_S']]unify = pd.concat([training, testing])train = unify[unify['Age'].notnull()]clf = LinearRegression()#clf.fit(train.drop(['Age'],axis = 1), train['Age'])pd.set_option('display.max_rows',None )train 

我手动尝试修复错误,通过执行,

train[train['Age'].isnull()]

使用上述代码,我得到的是没有值的列,这表明没有NaN值。我对所有列都进行了这样的检查。我还使用了,

train.notnull().count() Age           1046SibSp         1046Parch         1046Fare          1046Pclass        1046Sex_female    1046Sex_male      1046Embarked_C    1046Embarked_Q    1046Embarked_S    1046dtype: int64    

但每当我认为一切都准备好并取消注释clf.fit()函数时,我就会得到错误

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

请帮助我,我无法找出我的代码中有什么问题。


回答:

你使用了train.notnull().count():这将返回每个列中非NaN值的总数。它不会返回NaN值的计数。你可以通过将这个数字(在本例中为1046)与数据集中总行数进行比较来验证这一点。

使用train.isnull().sum()来查找训练数据集中存在的NaN值总数。如果你看到正数,那么你的训练集中有NaN值。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注