如何查看Scikit-Learn Pipeline对数据的处理转换结果
查看Scikit-Learn Pipeline中间处理结果的方法
以下是几种可直接落地的实现方式:
- 访问
named_steps单独调用步骤转换
Pipeline的每一个命名步骤都可以通过named_steps属性直接获取,你可以单独调用对应步骤的fit_transform或transform方法,拿到该步骤的输出结果。示例代码如下:from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import OneHotEncoder import pandas as pd # 示例Pipeline定义 demo_pipe = Pipeline(steps=[ ("imputer", SimpleImputer(strategy="most_frequent")), ("onehot", OneHotEncoder(sparse_output=False, drop="first")) ]) # 拟合Pipeline demo_pipe.fit(raw_data) # 获取缺失值填充后的结果 imputed_data = demo_pipe.named_steps["imputer"].transform(raw_data) # 获取独热编码(哑变量)的转换结果 onehot_data = demo_pipe.named_steps["onehot"].transform(imputed_data) - 新增中间存储节点捕获结果
你可以自定义一个无逻辑的转换器步骤,插入到Pipeline你想要查看结果的位置,转换时自动保存当前数据,拟合完成后直接读取即可。示例代码如下:class CaptureIntermediate: def fit(self, X, y=None): return self def transform(self, X): self.saved_data = X.copy() return X # 插入中间节点后的Pipeline demo_pipe = Pipeline(steps=[ ("imputer", SimpleImputer(strategy="most_frequent")), # 插入捕获节点,存储填充后的数据 ("capture_imputed", CaptureIntermediate()), ("onehot", OneHotEncoder(sparse_output=False, drop="first")) ]) demo_pipe.fit(raw_data) # 直接读取捕获到的中间结果 imputed_data = demo_pipe.named_steps["capture_imputed"].saved_data - 用
memory参数缓存全步骤结果
初始化Pipeline时传入memory参数指定缓存目录,所有步骤的拟合、转换结果都会自动缓存到本地,无需重复运行即可读取任意步骤的输出,适合处理大型数据集时使用。示例初始化方式:demo_pipe = Pipeline( steps=[ ("imputer", SimpleImputer(strategy="most_frequent")), ("onehot", OneHotEncoder(sparse_output=False, drop="first")) ], # 指定缓存目录 memory="./pipeline_cache" ) - 查看转换后特征名
如果你需要确认哑变量、特征衍生后的列名,不需要手动计算,Scikit-Learn 1.0+版本支持直接调用get_feature_names_out()方法获取完整的转换后特征名列表,和最终输出的列顺序一一对应:# 获取全Pipeline转换后的特征名 all_feature_names = demo_pipe.get_feature_names_out() # 也可以获取单个步骤的特征名 onehot_feature_names = demo_pipe.named_steps["onehot"].get_feature_names_out()
如果你使用了
ColumnTransformer做分列处理,可通过named_transformers_属性访问每个列处理分支,操作逻辑和named_steps完全一致。
内容的提问来源于stack exchange,提问作者Yuxxxxxx
相关产品推荐
相关产品推荐

