Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用树木的森林来标记特征的重要性?_Python_Numpy_Matplotlib_Scikit Learn_Sklearn Pandas - Fatal编程技术网

Python 如何用树木的森林来标记特征的重要性?

Python 如何用树木的森林来标记特征的重要性?,python,numpy,matplotlib,scikit-learn,sklearn-pandas,Python,Numpy,Matplotlib,Scikit Learn,Sklearn Pandas,我使用sklearn绘制树木森林的特征重要性。数据帧名为“heart”。下面是提取已排序特征列表的代码: importances = extc.feature_importances_ indices = np.argsort(importances)[::-1] print("Feature ranking:") for f in range(heart_train.shape[1]): print("%d. feature %d (%f)" % (f + 1, indices[f]

我使用sklearn绘制树木森林的特征重要性。数据帧名为“heart”。下面是提取已排序特征列表的代码:

importances = extc.feature_importances_
indices = np.argsort(importances)[::-1]
print("Feature ranking:")

for f in range(heart_train.shape[1]):
    print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))
然后我以这种方式绘制列表:

f, ax = plt.subplots(figsize=(11, 9))
plt.title("Feature ranking", fontsize = 20)
plt.bar(range(heart_train.shape[1]), importances[indices],
    color="b", 
    align="center")
plt.xticks(range(heart_train.shape[1]), indices)
plt.xlim([-1, heart_train.shape[1]])
plt.ylabel("importance", fontsize = 18)
plt.xlabel("index of the feature", fontsize = 18)
我得到了这样一个情节:

我的问题是:我怎样才能用特写的名字来代替特写的编号,从而使情节更容易理解? 我试图转换包含特性名称的字符串(即数据帧中每列的名称),但无法达到目标

谢谢

问题出在这里:

plt.xticks(range(heart_train.shape[1]), indices)
索引
是从
np.argsort(importances)[::-1]
返回的索引数组,它没有要在X轴上显示为记号的要素名称

假设
df
是您的数据帧,您需要这样的东西

feature_names = df.columns # e.g. ['A', 'B', 'C', 'D', 'E']
plt.xticks(range(heart_train.shape[1]), feature_names)

我知道这很古老,但对于后代来说,如果您想以正确的顺序从@bakkal的解决方案中获得
功能\u名称
,您可以使用


feature\u names=[features\u names[i]表示索引中的i]

您可以在模型中使用xgboost,通过使用plot\u importance(model)方法轻松地绘制要素的重要性

来自xgboost导入图\u重要性,XGBClassifier
模型=XGBClassifier(n_估计量=1000,学习率=0.5)
x_系列、x_测试、y_系列、y_测试=型号选择。系列测试分割(特征、标签、测试尺寸=0.2)
模型拟合(x_列,y_列,提前停车轮=5,评估集=[(x_测试,y_测试)])
绘图单元重要性(模型)
plt.show()

这段代码为您提供了如下绘图:


谢谢!现在,我必须将正确的列与正确的重要性进行匹配。您知道如何将正确的列与正确的重要性进行匹配吗?请参阅