训练时的scikit-learn:RandomForestRegressor:ValueError - python

我有一个包含我的标签的pandas系列s和一个包含我的数据的pandas DataFrame df
我想使用sklearn RandomForestRegressor生成标签的预测。

model = RandomForestRegressor(n_estimators=1000, max_depth= 30 , random_state=31415)
model.fit(df, s)

但是,当我这样做时,.fit()会引发以下异常:

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

而且我真的不明白为什么会有这个错误。我的标签以及我的DataFrame的所有列都是数字:

print(s.describe(), header=True)

count      1168.000000
mean     181193.444349
std       81756.636708
min       34900.000000
25%      129000.000000
50%      160000.000000
75%      214600.000000
max      755000.000000
Name: Label, dtype: float64

print(df.describe())

            Field1       Field2       Field3       Field4       Field5       Field6       Field7        Field8
count  1168.000000  1168.000000  1168.000000  1168.000000  1168.000000  1168.000000  1168.000000   1168.000000 
mean      6.080479  1519.982877     1.749144  1057.800514     0.973459     1.556507  1970.724315   1984.442637 
std       1.392363   540.953069     0.760811   444.809832     0.160807     0.554077    29.939059     20.626356 
min       1.000000   334.000000     0.000000     0.000000     0.000000     0.000000  1872.000000   1950.000000 
25%       5.000000  1123.750000     1.000000   795.750000     1.000000     1.000000  1953.750000   1966.000000 
50%       6.000000  1465.000000     2.000000   990.000000     1.000000     2.000000  1972.000000   1993.000000 
75%       7.000000  1786.000000     2.000000  1291.500000     1.000000     2.000000  2000.000000   2003.000000 
max      10.000000  5642.000000     4.000000  6110.000000     1.000000     3.000000  2010.000000   2010.000000 

我在sdf中也没有空值:

print(np.isnan(s).unique())

[False]


print(df.isnull().sum().sort_values(ascending=False))

Field8     0
Field7     0
Field5     0
Field5     0
Field4     0
Field3     0
Field2     0
Field1     0
dtype: int64

我什至手动检查了我的数据,但没有看到任何奇怪的值。

是什么导致此错误?

编辑:

在尝试了多种方法之后,我找到了解决方案(即使我不太了解为什么这可以解决我的问题)。

就我而言,添加

df.reset_index(drop=True)

.fit()调用解决问题之前(如提出的here)。
如果有人了解这里发生了什么,我很感兴趣。

参考方案

这可能是由于数据的巨大差异(例如,字段1的范围是:〜1到〜10,字段2的范围是:〜300到〜5000)

尝试应用特征缩放,然后拟合模型。

定标器= MinMaxScaler()

df = scaler.fit_transform(df)

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

python-docx应该在空单元格已满时返回空单元格 - python

我试图遍历文档中的所有表并从中提取文本。作为中间步骤,我只是尝试将文本打印到控制台。我在类似的帖子中已经看过scanny提供的其他代码,但是由于某种原因,它并没有提供我正在解析的文档的预期输出可以在https://www.ontario.ca/laws/regulation/140300中找到该文档from docx import Document from…

Python:集群作业管理 - python

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…

具有Java异常的Python等效原因 - python

Python中是否有一种引发错误的原因,该错误以另一个错误为原因?在Java中,您可以创建一个原因异常的实例,例如以下代码try { throw new IOException(); } catch (IOException e) { throw new RuntimeException("An exception occurred while t…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…