这是我的第一个机器学习项目,也是我第一次使用 ColumnTransformer。我的目标是执行数据预处理的两个步骤,并为每个步骤使用 ColumnTransformer。
在第一步中,我想用字符串 'missing_value' 替换我的数据框中的缺失值,用于某些功能,并为其余功能替换最常见的值。因此,我使用 ColumnTransformer 将这两个操作结合起来,并将数据帧的相应列传递给它。
在第二步中,我想使用刚刚预处理的数据并根据功能应用 OrdinalEncoder 或 OneHotEncoder。为此,我再次使用 ColumnTransformer。
然后我将这两个步骤合并到一个管道中。
我正在使用 Kaggle Houses Price 数据集,我有 scikit-learn 0.20 版,这是我的代码的简化版本:
cat_columns_fill_miss = ['PoolQC', 'Alley']
cat_columns_fill_freq = ['Street', 'MSZoning', 'LandContour']
cat_columns_ord = ['Street', 'Alley', 'PoolQC']
ord_mapping = [['Pave', 'Grvl'], # Street
['missing_value', 'Pave', 'Grvl'], # Alley
['missing_value', 'Fa', 'TA', 'Gd', 'Ex'] # PoolQC
]
cat_columns_onehot = ['MSZoning', 'LandContour']
imputer_cat_pipeline = ColumnTransformer([
('imp_miss', SimpleImputer(strategy='constant'), cat_columns_fill_miss), # fill_value='missing_value' by default
('imp_freq', SimpleImputer(strategy='most_frequent'), cat_columns_fill_freq),
])
encoder_cat_pipeline = ColumnTransformer([
('ordinal', OrdinalEncoder(categories=ord_mapping), cat_columns_ord),
('pass_ord', …Run Code Online (Sandbox Code Playgroud)