python - scikit-learn:RandomForestRegressor:训练时的ValueError
问题描述
我有一个s
包含我的标签的 pandas 系列和一个df
包含我的数据的 pandas DataFrame。我想使用 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
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()
电话解决问题之前(如建议here)。如果有人了解这里发生了什么,我很感兴趣。
解决方案
这可能是由于数据的巨大差异(例如,字段 1 在范围内:~1 到 ~10 和字段 2 在范围内:~300 到 ~5000)
尝试应用特征缩放,然后拟合模型。
缩放器 = MinMaxScaler()
df = scaler.fit_transform(df)
推荐阅读
- javascript - 如何修复'不能使用'in'运算符在jquery中搜索'length'in'错误
- applescript - Applescript:重复语句以删除文件(并保持最少数量)
- javascript - 使用 JavaScript 将秒转换为 ISO 8601 持续时间
- ruby-on-rails - Flutter 无法正确连接到 Rails API
- php - 无法为 Laravel 5.8 显示 Element-ui 组件
- javascript - 如何将唯一的 uuid 传递给每个回调?
- reactjs - 如何在 ReactJs 中调用 fetch() 请求的结果
- ansible - 如何将字典查找与When条件和with_items结合起来
- entity-framework-core - 数据库中已经有一个名为“xxx”的对象
- reactjs - 为 Material-UI 下拉菜单动态设置高度?