具有数字列和分类列的 scikit-learn 管道策略

数据挖掘 scikit-学习 管道
2022-02-18 07:12:14

我们正在实现sklearn pipeline如下(伪代码):

feature_num = numeric_columns  
feature_cat = categorical_columns  

num_pipeline = Pipeline([('feature_select', DataFrameSelector(feature_num))
                        ,('feature_num_prep', custom_num_prep)
                       ])  
cat_pipeline = Pipeline([('feature_select', DataFrameSelector(feature_cat))
                        ,('feature_cat_prep', custom_cat_prep)
                       ])  
feature_pipeline = FeatureUnion(transformer_list=[
                               ('num_pipeline', num_pipeline)
                               ,('cat_pipeline', cat_pipeline)
])  

由于我们在custom_num_prep转换器中可以删除异常值 - 当我们到达 feature_pipeline 时出现错误:

ValueError: [blocks[0,:] 的行尺寸不兼容....

原因很明显,因为有已删除的cat_pipeline观察结果。 问题是: 1. 有没有一种 Python 的方式来同步管道中的两个数据帧? 2. 如果不是,这种情况有什么策略?num_pipeline


1个回答

一种选择是 scikit-learn 的ColumnTransformer 应用于混合类型ColumnTransformer 旨在将不同的预处理和特征提取管道应用于不同的特征子集。