Python scikit学习:随机森林回归器:训练时出现值错误

Python scikit学习:随机森林回归器:训练时出现值错误,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我有一个包含我的标签的熊猫系列s,还有一个包含我的数据的熊猫数据框df。 我想使用sklearn随机森林回归器来生成标签的预测 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 larg

我有一个包含我的标签的熊猫系列
s
,还有一个包含我的数据的熊猫数据框
df
。 我想使用sklearn随机森林回归器来生成标签的预测

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').
我真的不明白我为什么会有这个错误。我的标签和数据框的所有列都是数字:

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 
我在
s
df
中也没有空值:

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()
调用解决了问题(如建议的)。
如果有人了解这里发生了什么,我很感兴趣。

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

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

scaler=MinMaxScaler()


df=scaler.fit_transform(df)

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

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

scaler=MinMaxScaler()


df=scaler.fit_transform(df)

听起来缺少值。也可能是一些数据点不被isnan/isnull函数视为NaN,因为它有空格或ML模型不能接受的字符,这些字符只能是数值

请使用以下代码行检查dataframe列的数据类型:

df.dtypes

我还需要您以功能数据帧(df)和目标数据帧的形式通知我们。

听起来缺少值。也可能是一些数据点不被isnan/isnull函数视为NaN,因为它有空格或ML模型不能接受的字符,这些字符只能是数值

请使用以下代码行检查dataframe列的数据类型:

df.dtypes

我还需要您以功能数据帧(df)和目标数据帧的形式通知我们。

请检查此链接@Nakeuh您应该用找到的解决方案发布您自己问题的答案(并接受它)请检查此链接@Nakeuh您应该用找到的解决方案发布您自己问题的答案(并接受它)