在执行sklearn Column Transformer后获取新列的名称,可以通过以下步骤实现:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.pipeline import Pipeline
# 假设有两个特征列,一个是数值型特征,一个是分类特征
numeric_features = ['age']
categorical_features = ['gender']
# 定义数值型特征的转换器
numeric_transformer = Pipeline(steps=[
('numeric_encoder', OneHotEncoder())
])
# 定义分类特征的转换器
categorical_transformer = Pipeline(steps=[
('categorical_encoder', OneHotEncoder())
])
# 定义Column Transformer,将两个转换器应用于对应的特征列
preprocessor = ColumnTransformer(
transformers=[
('numeric', numeric_transformer, numeric_features),
('categorical', categorical_transformer, categorical_features)
])
# 假设有一个包含特征列的数据集X
X = ...
# 执行Column Transformer进行转换
X_transformed = preprocessor.fit_transform(X)
# 获取新列的名称
new_column_names = []
for transformer_name, transformer, features in preprocessor.transformers_:
if transformer_name != 'remainder':
if hasattr(transformer, 'get_feature_names_out'):
# 如果转换器有get_feature_names_out方法,则使用该方法获取新列的名称
new_column_names.extend(transformer.get_feature_names_out(features))
else:
# 否则,使用原始特征列的名称
new_column_names.extend(features)
# 打印新列的名称
print(new_column_names)
以上代码中,我们首先定义了数值型特征和分类特征的转换器,然后使用Column Transformer将这两个转换器应用于对应的特征列。在执行fit_transform方法后,可以通过preprocessor.transformers_属性获取每个转换器的名称、转换器对象和对应的特征列。对于有get_feature_names_out方法的转换器,我们可以直接调用该方法获取新列的名称;对于没有该方法的转换器,我们则使用原始特征列的名称作为新列的名称。最后,将所有新列的名称存储在new_column_names列表中,并进行打印输出。
这样,我们就可以在执行sklearn Column Transformer后获取新列的名称了。
注意:以上代码中的OneHotEncoder仅作为示例,实际应用中可能需要根据数据集的特点选择合适的转换器。
领取专属 10元无门槛券
手把手带您无忧上云