泰坦尼克号生存预测模型训练报ValueError错误如何解决?
报错根因
你触发的ValueError: Input contains NaN, infinity or a value too large for dtype('float64')是scikit-learn模型的输入校验规则导致的:sklearn绝大多数分类模型原生不支持输入数据中存在缺失值(NaN)、无穷值(inf/-inf)或者超出float64存储范围的极值,你当前传入的训练集x_train中存在上述异常值。
解决步骤
- 第一步:定位异常值
先运行以下代码定位异常值的分布:
泰坦尼克号公开数据集中常见存在缺失的特征为Age、Cabin、Embarked三个字段。import numpy as np # 查看各特征缺失值数量 print(x_train.isnull().sum()) # 查看各特征无穷值数量 print(x_train.isin([np.inf, -np.inf]).sum()) - 第二步:处理无穷值(如果存在)
如果排查出有inf值,先统一替换为NaN后续统一处理:x_train.replace([np.inf, -np.inf], np.nan, inplace=True) - 第三步:处理缺失值
可根据特征类型选择对应的填充策略:- 缺失率超过60%的特征(比如Cabin字段缺失率通常在77%左右)直接删除:
x_train.drop('Cabin', axis=1, inplace=True) - 数值型特征(比如Age)用中位数/均值填充:
x_train['Age'] = x_train['Age'].fillna(x_train['Age'].median()) - 类别型特征(比如Embarked)用众数填充:
x_train['Embarked'] = x_train['Embarked'].fillna(x_train['Embarked'].mode()[0])
SimpleImputer工具:from sklearn.impute import SimpleImputer # 数值特征填充示例,类别特征可将strategy改为'most_frequent' imputer = SimpleImputer(strategy='median') x_train = imputer.fit_transform(x_train) - 缺失率超过60%的特征(比如Cabin字段缺失率通常在77%左右)直接删除:
- 第四步:校验处理结果
处理完成后运行以下代码确认无异常值,输出为True即可正常训练模型:print(np.isfinite(x_train).all())
内容的提问来源于stack exchange,提问作者tquigg96
相关产品推荐
相关产品推荐

