Pipeline中使用PCA为线性回归筛选特征时出现NaN报错如何解决
问题分析
你当前的处理思路存在3个明显问题:
SimpleImputer参数配置错误,无法识别真实的缺失值,这是直接触发报错的核心原因- 先对全量数据集做独热编码再拆分训练/测试集,存在数据泄露问题,会导致模型泛化能力评估结果失真
- 未区分数值型、分类型列采用统一的填充策略,不符合数据特性,会引入不必要的偏差
报错直接原因
你在SimpleImputer中指定missing_values='NaN',但pandas数据中的缺失值是numpy.nan(浮点类型的空值),不是字符串类型的'NaN',因此填充器完全没有识别到数据中的空值,导致后续标准化步骤接收到存在NaN的输入,触发报错。
临时修复方案
如果只需要快速解决当前报错,只需修改SimpleImputer的参数即可:
把SimpleImputer(missing_values='NaN', strategy='most_frequent')改成SimpleImputer(missing_values=np.nan, strategy='most_frequent'),运行前记得导入numpy:import numpy as np。
最优方案:全Pipeline无泄露实现
完全可以把所有预处理逻辑放到Pipeline中,避免数据泄露,同时针对不同类型列采用适配的处理策略,完整代码如下:
import pandas as pd import numpy as np from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.decomposition import PCA from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 拆分特征和标签 y = df["SalePrice"] X = df.drop(["SalePrice", "PoolQC"], axis = 1) # 先拆分训练测试集,避免数据泄露 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=0) # 区分数值列和分类列 numeric_cols = X.select_dtypes(include=['int64', 'float64']).columns categorical_cols = X.select_dtypes(include=['object']).columns # 数值列预处理流水线:中位数填充(更抗异常值) + 标准化 numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler()) ]) # 分类列预处理流水线:众数填充 + 独热编码 categorical_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='most_frequent')), ('onehot', OneHotEncoder(handle_unknown='ignore')) # 测试集出现未知类别时自动忽略 ]) # 合并两种预处理逻辑 preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_cols), ('cat', categorical_transformer, categorical_cols) ]) # 完整流水线:预处理 + PCA + 回归 pipeline = Pipeline(steps=[ ('preprocessor', preprocessor), ('pca', PCA(n_components=157, whiten=True)), ('regr', LinearRegression()) ]) # 训练模型 pipeline.fit(X_train, y_train)
内容的提问来源于stack exchange,提问作者Ekat Sim
相关产品推荐
相关产品推荐

