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

如何在Sklearn多次fit_transform后获取特征名称?

获取多次特征变换后的最终特征名称

要追踪经过多步变换后的特征名称,你需要在每一步变换后保留并更新特征名,最后通过特征选择的结果筛选出最终名称。以下是修改后的完整代码,包含特征名的追踪逻辑:

import category_encoders as ce
import lightgbm as lgb
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import PolynomialFeatures
from sklearn.feature_selection import SelectKBest, chi2

# 假设X_train是带列名的DataFrame;若为numpy数组,需手动定义原始特征名列表
original_feature_names = X_train.columns.tolist()

# 1. 类别特征编码 + 获取编码后特征名
transformer = ColumnTransformer(
    transformers=[("cat", ce.cat_boost.CatBoostEncoder(), cat_features),],
    remainder="passthrough"  # 保留非类别特征,若仅处理类别特征可去掉此参数
)
X_train_transformed = transformer.fit_transform(X_train, y_train)
X_test_transformed = transformer.transform(X_test)
# 获取编码后的所有特征名(含未被变换的原始特征)
transformed_feature_names = transformer.get_feature_names_out(original_feature_names)

# 2. 多项式变换 + 获取多项式特征名
poly = PolynomialFeatures(2, include_bias=False)  # 去掉偏置项避免冗余特征
X_train_polynomial = poly.fit_transform(X_train_transformed)
X_test_polynomial = poly.transform(X_test_transformed)
# 基于编码后特征名生成多项式特征名(如`feature1`, `feature1^2`, `feature1*feature2`)
poly_feature_names = poly.get_feature_names_out(transformed_feature_names)

# 3. 仅交互项变换 + 获取交互项特征名
interaction = PolynomialFeatures(2, interaction_only=True, include_bias=False)
X_train_interaction = interaction.fit_transform(X_train_polynomial)
X_test_interaction = interaction.transform(X_test_polynomial)
# 基于多项式特征名生成交互项特征名(仅保留不同特征的乘积项)
interaction_feature_names = interaction.get_feature_names_out(poly_feature_names)

# 4. 特征选择 + 获取最终选中的特征名
feature_selection = SelectKBest(chi2, k=55)
train_features = feature_selection.fit_transform(X_train_interaction, y_train)
test_features = feature_selection.transform(X_test_interaction)
# 获取选中特征的索引,筛选出最终特征名
selected_indices = feature_selection.get_support(indices=True)
final_feature_names = [interaction_feature_names[i] for i in selected_indices]

# 训练模型
model = lgb.LGBMClassifier()
model.fit(train_features, y_train)

# 查看最终特征名
print(final_feature_names)

关键细节说明:

  • ColumnTransformer:get_feature_names_out()会自动返回所有变换后特征的名称,若设置remainder="passthrough",未被处理的原始特征名也会被保留。
  • PolynomialFeatures:传入上一步的特征名列表后,get_feature_names_out()会生成可读性强的组合特征名,清晰展示特征的变换逻辑。
  • SelectKBest:get_support(indices=True)返回选中特征的位置索引,通过索引即可从交互项特征名列表中提取最终的有效特征名称。

内容的提问来源于stack exchange,提问作者Aldla E Aoepql

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:00:16