如何在DataFrame中将特征与其对应的特征重要度进行映射
操作方法
你要实现特征名和重要度的映射、以及带名称的绘图只需要利用特征矩阵x的columns属性即可,feature_importances_返回的数组顺序和x.columns的顺序完全对应,直接配对即可。
前置修正(你的现有代码存在两处可调整的点)
- 列选择时字符串之间缺少逗号,会触发语法错误,修正后:
df1 = df[['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'LSTAT']] x = df1[['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO']] - 现有代码中未定义
x_train/y_train,如果需要使用随机森林部分的代码,需要先添加数据集切分逻辑:from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)
特征重要度与列名映射
在你获取importance = model.feature_importances_之后,添加以下代码即可完成映射:
import pandas as pd # 生成映射表,支持按重要度降序排列 feature_importance = pd.DataFrame({ '特征名称': x.columns, '重要度': importance }).sort_values(by='重要度', ascending=False) # 打印映射结果 print(feature_importance)
如果不需要转成DataFrame,也可以直接遍历输出:
for col_name, imp_score in zip(x.columns, importance): print(f'特征名:{col_name},重要度:{imp_score:.5f}')
绘制带特征名的重要度图
替换你原有的绘图代码即可:
import matplotlib.pyplot as plt plt.figure(figsize=(10, 5)) plt.bar(feature_importance['特征名称'], feature_importance['重要度']) plt.xlabel('特征名称') plt.ylabel('特征重要度') plt.title('DecisionTreeRegressor 特征重要度') plt.xticks(rotation=45) # 旋转x轴标签避免重叠 plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者user13425814
相关产品推荐
相关产品推荐

