利用随机森林对特征重要性进行评估

转自:https://blog.csdn.net/zjuPeco/article/details/77371645?locationNum=7&fps=1#commentsedit

我们知道,随机森林大致可以看成是从生成的多个决策树种挑选最优的那一棵。所以在训练的过程中就会按照不同特征维度的先后划分方式来建立决策树。因此,最优那棵树所对应的特征划分顺序也就代表着特征的重要程度。

看例子:

from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import numpy as np

data=load_wine()
x_train,x_test,y_train,y_test=train_test_split(data.data,data.target,test_size=0.3,random_state=22)
forest=RandomForestClassifier(n_estimators=10,n_jobs=-1,random_state=9)
forest.fit(x_train,y_train)

importances=forest.feature_importances_
print('每个维度对应的重要性因子:\n',importances)
indices = np.argsort(importances)[::-1]# a[::-1]让a逆序输出
print('得到按维度重要性因子排序的维度的序号:\n',indices)
most_import = indices[:3]#取最总要的3个
print(x_train[:,most_import])


>>
每个维度对应的重要性因子:
 [0.17340555 0.00990344 0.01416615 0.00880821 0.05553781 0.03865726
 0.08544822 0.01149787 0.0478397  0.10337597 0.08948192 0.0930718
 0.26880612]
得到按维度重要性因子排序的维度的序号:
 [12  0  9 11 10  6  4  8  5  2  7  1  3]

我们可以看到,最重要的是第12维,依次是第0维,9维。

另外说一下,原文中的维度对应关系应该室友错误的。

 print("%2d) %-*s %f" % (f + 1, 30, feat_labels[f], importances[indices[f]]))

f=0时,indices[f]=12,此时importances[12]对应的就是最后一个特征,而feat_labels[0]却指的是第一个特征。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页