如何在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
相关产品推荐
相关产品推荐

