使用 OneHotEncoded 分类特征从 scikit-learn 管道中使用的 XGBRegressor 中提取特征名称

问题描述 投票:0回答:1

我有一个包含一些数值特征和一些分类特征的数据集。在 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()
返回一个热编码分类变量的特征名称。

我可以以某种方式获取在管道中创建的完整功能列表并将其映射到功能重要性分数吗? 我自己实在无法弄清楚。

python scikit-learn xgbregressor
1个回答
0
投票

所有组合对象(

Pipeline
ColumnTransformer
)也支持
get_feature_names_out
,所以

pipeline['encoder'].get_feature_names_out()`

应该可以正常工作。更一般地说,当您的管道的最后一步是模型时,切片效果很好:

pipeline[:-1].get_feature_names_out()
© www.soinside.com 2019 - 2024. All rights reserved.