我有一个包含一些数值特征和一些分类特征的数据集。在 XGBRegressor 上调用 fit 后,我想检查特征重要性。为此,我想将特征重要性分数映射到 scikit 学习管道中使用回归器的特征名称。
categorical_encoder = Pipeline(
steps=[("encoder", OneHotEncoder(handle_unknown="ignore"))]
)
encoder = ColumnTransformer(
transformers=[
("categories", categorical_encoder, ["cat_feature1", "cat_feature2", "cat_feature3"])
],
remainder="passthrough"
)
pipeline = Pipeline([
("encoder", encoder),
("regressor", XGBRegressor())
])
pipeline['regressor'].get_booster().get_fscore()
返回包含特征名称 f0
、f2
、f7
、... 的字典
pipeline['encoder'].named_transformers_['categories']['encoder'].get_feature_names_out()
返回一个热编码分类变量的特征名称。
我可以以某种方式获取在管道中创建的完整功能列表并将其映射到功能重要性分数吗? 我自己实在无法弄清楚。
所有组合对象(
Pipeline
和ColumnTransformer
)也支持get_feature_names_out
,所以
pipeline['encoder'].get_feature_names_out()`
应该可以正常工作。更一般地说,当您的管道的最后一步是模型时,切片效果很好:
pipeline[:-1].get_feature_names_out()