You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

预处理后经SelectKBest特征选择,如何获取选中特征名称?

获取SelectKBest选中的特征名称问题

我查阅了相关Stack Overflow帖子但未找到解决方案,我的数据转换流程如下:

cat_transformer = Pipeline(steps=[("encoder", TargetEncoder())])

num_transformer = Pipeline(
    steps=[
        ("scaler", MinMaxScaler()),
        ("poly", PolynomialFeatures(2, interaction_only=True)),
    ]
)

transformer = ColumnTransformer(
    transformers=[
        ("cat", cat_transformer, cat_features),
        ("num", num_transformer, num_features),
    ],
    verbose_feature_names_out=False,
)

logit = LogisticRegression

model = Pipeline(
    steps=[
        ("preprocessor", transformer),
        ("feature_selection", SelectKBest(k=20)),
        ("logit", logit),
    ]
)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

我想要获取被选中的20个特征名称,尝试过以下方法但都没得到正确结果:

  • 执行model["feature_selection"].get_feature_names_out(),得到的是"x1"、"x2"这类无意义的名称
  • 执行model['preprocessor'].get_feature_names_out(),未成功
  • 执行model['feature_selection'].get_support()得到布尔数组,但不知道每个位置对应的特征名称
  • 尝试transformer['num']这类操作,因是ColumnTransformer无法生效

请问该如何获取模型选中的特征名称?


解决方案

要获取选中的特征名称,需要先拿到预处理后所有特征的完整名称列表,再结合get_support()的布尔索引筛选出被选中的特征:

  1. 获取预处理阶段生成的全部特征名称:
all_feature_names = model['preprocessor'].get_feature_names_out()
  1. 结合选中掩码筛选目标特征名称:
selected_mask = model['feature_selection'].get_support()
selected_feature_names = all_feature_names[selected_mask]

此时selected_feature_names即为你需要的20个被选中的特征名称。

注意点:

  • 你已设置verbose_feature_names_out=False,所以生成的特征名称会更直观:类别特征保留原名,数值特征的交互项会以原特征名1 原特征名2的格式呈现
  • 如果执行model['preprocessor'].get_feature_names_out()报错,大概率是scikit-learn版本过低,建议升级到0.24及以上版本(该版本开始ColumnTransformer正式支持get_feature_names_out()方法)

内容的提问来源于stack exchange,提问作者dsbr__0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:55:17