赞
踩
python绘制随机森林重要度排序条形图,以及把重要度之和前0.9显示出来,用于观察
前面的话:因为项目原因,需要特征选择,随机森林有自带的重要度属性,但是我需要观察前0.9(此处理解为能包含重要度之和为0.9的前几项特征为比较重要的,例如:20个特征可以包含重要度之和0.9,八个特征包含重要度0.1,那么可以把这8个进行筛选)
先附上绘制后的条新图(因为项目保密性,具体特征只截取部分名称,横坐标是重要度,纵坐标是特征名称):
对这个图简单说明一下:
1.横坐标是重要度,纵坐标是特征名称
2.按照重要度排序,蓝色为末尾重要度之和为0.1的特征,红色为余下0.9的特征,在此也就可以理解为最重要部分
3.每一条重要度后都加了标签用于显示具体数值
下面附上代码:(一个函数)
def plot_feature_importances(feature_importances,title,feature_names,change):
print('feature_importances',feature_importances)
print('names',feature_names)
# feature_importances = 100.0*(feature_importances/max(feature_importances))
# print('feature_importances',feature_importances)
# 将得分从小到大排序
index_sorted = np.argsort(feature_importances)
print('index_sorted',index_sorted)
#特征名称排序
chara= change
for col in range(0,i):
chara[col] = feature_names[index_sorted[col]]
print(chara)
# 让y坐标轴上的标签居中显示
pos = np.arange(index_sorted.shape[0])+0.5
print(pos)
plt.figure(figsize=(16,16))
#0.9的分割数据
index1 = [i] * i
index2 = [i] * i
feature_importances = np.append(feature_importances,0)
print('feature_importances',feature_importances)
sum = 0
for col in range(0,i):
k = feature_importances[index_sorted[i-col-1]]
sum =sum+ k
index1[col] = index_sorted[i-col-1]
if (sum >= 0.9):
break
s =0
for col in range(0,i):
k = feature_importances[index_sorted[col]]
print(k)
s =s+ k
index2[col] = index_sorted[col]
if (s >= 0.1):
break
print('小于0.1',index2)
index1 = np.flipud(index1)
print('大于0.9',index1)
plt.barh(pos,feature_importances[index2],align='center')
plt.barh(pos,feature_importances[index1],align='center',color="red")
plt.yticks(pos,chara)
plt.xlabel('Relative Importance')
plt.title(title)
xlabel = feature_importances[index_sorted]
ylabel = pos
for x1, y1 in zip(xlabel,ylabel):
# 添加文本时添加偏移量使其显示更加美观
x1 = np.around(x1, decimals=3)
# print("坐标",y1,x1)
plt.text(x1+0.00005, y1, '%.3f' % x1)
plt.show()
使用方法 plot_feature_importances(imports,'随机森林特征重要度排序',al,ad),四个参数,分别为:
1.imports:一个list,每个特征的重要度,不需要提前排序,plot_feature_importances函数中有排序算法
2.绘制图片的title,这里叫作 '随机森林特征重要度排序'
3.al,ad:一个list,都是每个特征的名字,这里需要和imports一一对应,比如: 第一个特征为A,重要度为0.1,第二个特征为B,重要度为0.9,则imports为[0.1,0.9],al = ad 为[A,B],即可使用绘图代码
最后,具体用到的包没有标注,需要手动加入包
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。