首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“输入包含NaN,无穷大或dtype太大的值(‘float32’)”,当我训练DecisionTreeClassifier时

“输入包含NaN,无穷大或dtype太大的值(‘float32’)”,当我训练DecisionTreeClassifier时
EN

Stack Overflow用户
提问于 2021-12-13 08:02:04
回答 1查看 9.3K关注 0票数 0

我试图为系外行星目录中的数据编写一个决策树方法。这是我的硕士课程之一的恶棍。我在一本木星笔记本上写了这个

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn

data = pd.read_csv('exoplanet.eu_catalog_2021.12.15.csv')
data_new = data.select_dtypes(include=['float64'])#Select only dtype float64 data
data_new[~data_new.isin([np.nan, np.inf, -np.inf]).any(1)]
data_new_2 = data_new.loc[:,('mass', 'mass_error_min')]
data_new_2.dropna(subset =["mass_error_min"], inplace = True)
data_new_2.info()
print(data_new_2)

有了这个结果

代码语言:javascript
运行
复制
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1425 entries, 1 to 4892
Data columns (total 2 columns):
 #   Column          Non-Null Count  Dtype  
---  ------          --------------  -----  
 0   mass            1425 non-null   float64
 1   mass_error_min  1425 non-null   float64
dtypes: float64(2)
memory usage: 33.4 KB

如你所见,没有空的单元格。此外,我写这个是为了把所有的数字转换成float64 (以防万一!)

代码语言:javascript
运行
复制
data_new_2['mass'] = data_new_2['mass'].astype(float)
data_new_2['mass_error_min'] = data_new_2['mass_error_min'].astype(float)

然后,我将数据分割成训练子集和测试子集。

代码语言:javascript
运行
复制
from sklearn.model_selection import train_test_split
X = data_new_2.drop(["mass"], axis = 1)
y = data_new_2["mass"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .30, random_state = 42)

没有问题..。直至本部

代码语言:javascript
运行
复制
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
classifier.fit(X_train, y_train_2)

因为我收到了这个错误消息

代码语言:javascript
运行
复制
ValueError                                Traceback (most recent call last)
<ipython-input-327-7b81afce3234> in <module>
      1 from sklearn.tree import DecisionTreeClassifier
      2 classifier = DecisionTreeClassifier()
----> 3 classifier.fit(X_train, y_train_2)
.
.
.
~/.local/lib/python3.6/site-packages/sklearn/utils/validation.py in _assert_all_finite(X, allow_nan, msg_dtype)
    104                     msg_err.format
    105                     (type_err,
--> 106                      msg_dtype if msg_dtype is not None else X.dtype)
    107             )
    108     # for object dtype data, we only check for NaNs (GH-13254)

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

我不明白为什么会出现这条错误消息,因为我在X_train或y_train数据中没有Nan、完整性或“太大”的数据。

我能做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-13 10:46:56

mass_error_min列中有一些无限值:

代码语言:javascript
运行
复制
data_new_2.describe()

               mass       mass_error_min
count   1425.000000       1425.0000
mean    6.060956          inf
std     13.568726         NaN
min     0.000002          0.0000
25%     0.054750          0.0116
50%     0.725000          0.0700
75%     3.213000          0.5300
max     135.300000        inf

因此,您必须用一些值填充这些inf,使用以下代码:

代码语言:javascript
运行
复制
value = data_new_2['mass_error_min'].quantile(0.98)
data_new_2 = data_new_2.replace(np.inf, value)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70331502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档