运行随机森林回归器遇float32输入异常,无NaN/inf却报错求解决
解决RandomForestRegressor输入非法值报错的建议
修正缺失值填充逻辑:你当前的
df.fillna('mean', inplace=True)是错误用法——'mean'是字符串,不是实际计算的均值,会把数值列强制转为字符串类型,导致模型无法解析。正确的数值列均值填充方式:# 筛选数值列并填充均值 numeric_cols = df.select_dtypes(include=['float64', 'int64']).columns df[numeric_cols] = df[numeric_cols].fillna(df[numeric_cols].mean())处理超出float32范围的数值:报错提示存在无法放入float32的超大值,即使没有NaN/inf也会触发问题。可以直接转换为精度更高的float64,或者做特征缩放:
# 转换数据类型为float64 X_train = X_train.astype('float64') # 或用标准化缩放约束数值范围 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train)验证训练集的处理完整性:你处理的是整个
df,但要确保X_train是处理后数据集的子集,避免训练集残留未处理的非法值。直接检查X_train:# 检查是否存在NaN print(X_train.isna().any().any()) # 检查是否存在无穷值 print(np.isinf(X_train).any().any()) # 查看数值分布,确认是否有异常大值 print(X_train.describe())排查数据类型混入问题:确保
X_train所有列都是数值类型,没有混入字符串列。执行X_train.dtypes查看类型,若有非数值列,需删除或做编码处理(比如独热编码、标签编码)。
内容的提问来源于stack exchange,提问作者Joshua Cunliffe
相关产品推荐
相关产品推荐

