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

jam*_*mes 5 python machine-learning python-3.x scikit-learn one-hot-encoding

据我所知,如果我OneHotEncoder单独运行 a ,我可以通过调用以下命令来更改它从x1_1、等生成的功能名称:x1_2.get_feature_names

encoder.get_feature_names(['Sex', 'AgeGroup'])
Run Code Online (Sandbox Code Playgroud)

将更改为x1_1x2_2AgeGroup_1AgeGroup_2

但是,如果我将 运行为OneHotEncodera 中的几个转换之一ColumnTransformer,我将如何更改设置的前缀?

  1. 有没有办法在编码开始之前设置此前缀,例如在初始化参数中设置为OneHotEncoder, 或
  2. 某种程度上与ColumnTransformer, 或
  3. fit_transform不对?之后的列进行一些字符串解析替换解析

t T*_*T s 0

从 sklearn文档中我发现可以通过将参数设置为 来阻止 ColumnTransformer 添加编码器名称作为verbose_feature_names_out前缀False。然后,一旦您调用该get_feature_names_out()函数,它将自动在新功能名称前添加当前功能名称。这是一个例子:

\n
from\xc2\xa0sklearn.compose\xc2\xa0import\xc2\xa0ColumnTransformer  \n\ndf2\xc2\xa0=\xc2\xa0pd.DataFrame({\'A\':\xc2\xa0list(\'1245\'),\xc2\xa0\'B\':\xc2\xa0list(\'3456\')},\xc2\xa0dtype\xc2\xa0="category")\n\n# The initial dataset\n   A  B\n0  1  3\n1  2  4\n2  4  5\n3  5  6\n\ntransformer\xc2\xa0=\xc2\xa0ColumnTransformer([(\'encoder\',\xc2\xa0OneHotEncoder(),\xc2\xa0[\'A\'])],\n        \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0remainder=\'passthrough\',\n        \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0verbose_feature_names_out=False)\ntransformed\xc2\xa0=\xc2\xa0transformer.fit_transform(df2)\ntransformed_df\xc2\xa0=\xc2\xa0pd.DataFrame(transformed,\n                              columns=transformer.get_feature_names_out())\ntransformed_df.head()\n\n# New output\n    A_1     A_2     A_4     A_5     B\n0   1.0     0.0     0.0     0.0     3\n1   0.0     1.0     0.0     0.0     4\n2   0.0     0.0     1.0     0.0     5\n3   0.0     0.0     0.0     1.0     6\n
Run Code Online (Sandbox Code Playgroud)\n

在 sklearn 版本 1.0.2 中测试

\n