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

XGBoost:如何获取编码后DataFrame的特征名用于绘制特征重要性图

解决方法

你可以直接调用ColumnTransformer自带的get_feature_names_out()方法获取编码后的完整特征名,适配现有代码的操作步骤如下:

步骤1:调用方法获取编码后特征名

在完成encoder = cat_transform.fit(X_train)拟合后,直接执行以下代码:

encoded_feature_names = encoder.get_feature_names_out()

得到的encoded_feature_names就是长度为420的特征名数组,默认命名规则为:

  • 独热编码后的分类特征命名格式为cat__原特征名_类别值,例如cat__cat1_男、cat__cat2_本科
  • 未参与编码的数值型特征命名格式为remainder__原特征名

如果你觉得前缀多余,可以通过参数调整生成的特征名格式,调整后的转换器定义如下:

cat_transform = ColumnTransformer(
    [('cat', OneHotEncoder(handle_unknown='ignore'), cat_vars)], 
    remainder='passthrough',
    verbose_feature_names_out=False # 关闭转换器前缀
)

调整后生成的特征名会去掉前缀,分类特征直接展示为原特征名_类别值,数值特征直接展示为原始特征名。

步骤2:修改绘图代码完成可视化

将你原来的绘图代码替换为以下内容即可:

import matplotlib.pyplot as plt
import numpy as np

# 获取特征重要性并按重要性排序
importances = xgb.feature_importances_
indices = np.argsort(importances) # 升序排列适配横向柱状图展示逻辑

plt.figure(figsize=(12, 15))
plt.barh(encoded_feature_names[indices], importances[indices])
plt.xlabel('特征重要性')
plt.title('XGBoost特征重要性排序')
plt.show()

注意:如果你的scikit-learn版本低于1.0,需要升级到1.0及以上版本才能使用get_feature_names_out()方法,升级命令为pip install -U scikit-learn

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:02