如何为DecisionTreeClassifier绘制feature_importance特征重要性图
决策树特征重要性绘制问题解答
为什么feature_importances_返回纯数值数组
scikit-learn的模型设计逻辑中,训练时仅按输入特征的顺序计算权重,不会主动存储特征名称信息,返回数组的第N个值,就对应你传入model.fit()的features_train的第N列特征,二者顺序完全一致。
特征重要性可视化实现步骤
步骤1:关联特征名与重要性数值
你需要提前准备和训练集列顺序一致的特征名列表:如果features_train是pandas的DataFrame结构,直接取columns属性即可;如果是numpy数组,按训练时的特征传入顺序自行定义名称列表即可。
示例代码:
import pandas as pd import matplotlib.pyplot as plt # 提取特征名,根据自己的训练集类型二选一 # 情况1:训练集是pandas DataFrame feature_names = features_train.columns # 情况2:训练集是numpy数组,按顺序写对应特征名 # feature_names = ['特征A', '特征B', '特征C', ...] # 合并为DataFrame并按重要性降序排序 feature_importance = pd.DataFrame({ '特征名称': feature_names, '权重': model.feature_importances_ }).sort_values(by='权重', ascending=False)
步骤2:绘制重要性条形图
推荐用横向条形图展示,方便阅读长特征名:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题,不需要可以删掉 plt.figure(figsize=(10, 6)) # 绘制横向条形图,如果特征太多可以只取前N个,比如feature_importance.head(20) plt.barh(feature_importance['特征名称'], feature_importance['权重']) plt.xlabel('重要性权重') plt.ylabel('特征名称') plt.title('DecisionTreeClassifier特征重要性') plt.gca().invert_yaxis() # 反转Y轴,权重最高的特征放在最上方 plt.show()
内容的提问来源于stack exchange,提问作者Nikita Tsekhanovich
相关产品推荐
相关产品推荐

