sklearn.compose 的 ColumnTransformer 类使用方法
ColumnTransformer
是 sklearn.compose
模块中的一个类,用于对不同的特征列应用不同的数据转换操作。这在数据预处理阶段特别有用,因为不同的特征通常需要不同的处理方式。
主要功能
ColumnTransformer
允许你:
- 对数据集中的不同列应用不同的转换器。
- 组合多个转换器一起使用。
- 保持数据的结构,输出的结果可以作为机器学习模型的输入。
主要参数
该类的主要参数:
- transformers:一个包含
(name, transformer, columns)
元组的列表,定义每个子变换器和应用的列。 - remainder:指定未被显式转换的列的处理方式。可以是
'drop'
(默认)或'passthrough'
,也可以是一个变换器。 - sparse_threshold:控制稀疏矩阵输出的阈值。默认是
0.3
。 - n_jobs:并行执行的作业数量,默认是
None
。 - transformer_weights:可选,用于指定变换器的权重。
- verbose:是否打印转换器的日志信息,默认是
False
。
示例代码
以下是一个简单的示例,演示如何使用 ColumnTransformer
对数值和类别特征进行不同的预处理。
1 | import pandas as pd |
详细解释
导入必要的模块
1
2
3
4
5import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer创建数据集
1
2
3
4
5
6data = {
'age': [25, 30, 35, None, 40],
'salary': [50000, 60000, None, 80000, 90000],
'city': ['New York', 'San Francisco', 'Los Angeles', 'New York', None]
}
df = pd.DataFrame(data)定义数值和类别特征
1
2numeric_features = ['age', 'salary']
categorical_features = ['city']数值特征的转换器
1
2
3
4numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])类别特征的转换器
1
2
3
4categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore'))
])创建
ColumnTransformer
1
2
3
4
5preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)
])拟合和转换数据
1
df_preprocessed = preprocessor.fit_transform(df)
总结
ColumnTransformer
是一个强大的工具,可以灵活地对不同特征列进行不同的数据预处理操作。通过结合 Pipeline
和其他预处理模块,可以创建复杂的预处理流水线,以便为机器学习模型准备数据。