如何通过列转换器为OneHotEncoder分配特征名称

5

我明白如果我单独运行 OneHotEncoder,可以通过调用 .get_feature_names 来更改它生成的特征名称,例如:x1_1x1_2 等。

encoder.get_feature_names(['Sex', 'AgeGroup'])

x1_1x2_2 更改为 AgeGroup_1AgeGroup_2 等。

但是,如果我在 ColumnTransformer 中运行 OneHotEncoder 作为几个转换之一,我怎么能够更改前缀?

  1. 有没有办法在编码开始之前设置此前缀,例如在 OneHotEncoder 的初始化参数中或者
  2. ColumnTransformer 内联,或者
  3. 不进行一些在 fit_transform 之后对列进行字符串解析替换的操作?
1个回答

0
从sklearn 文档中我发现可以通过将参数verbose_feature_names_out设置为False来阻止ColumnTransformer添加编码器名称作为前缀。然后一旦您调用get_feature_names_out()函数,它将自动将新的特征名与当前的特征名作为前缀。以下是一个例子:
from sklearn.compose import ColumnTransformer  

df2 = pd.DataFrame({'A'list('1245'), 'B'list('3456')}, dtype ="category")

# The initial dataset
   A  B
0  1  3
1  2  4
2  4  5
3  5  6

transformer = ColumnTransformer([('encoder', OneHotEncoder(), ['A'])],
                               remainder='passthrough',
                               verbose_feature_names_out=False)
transformed = transformer.fit_transform(df2)
transformed_df = pd.DataFrame(transformed,
                              columns=transformer.get_feature_names_out())
transformed_df.head()

# New output
    A_1     A_2     A_4     A_5     B
0   1.0     0.0     0.0     0.0     3
1   0.0     1.0     0.0     0.0     4
2   0.0     0.0     1.0     0.0     5
3   0.0     0.0     0.0     1.0     6

已在sklearn版本1.0.2中测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接