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您应该用找到的解决方案发布您自己问题的答案(并接受它)