登录
首页大数据时代怎么理解随机森里中feature importance-特征重要性?
怎么理解随机森里中feature importance-特征重要性?
2020-07-22
收藏

feature importance,根据含义就能理解,也就是特征重要性,在预测建模项目中起着非常重要作用,能够提供对数据、模型的见解,和如何进行降维和选择特征,并以此来提高预测模型的的效率和有效性。今天小编为大家带来的是如何理解随机森林中的feature importance,希望对大家有所帮助。

一、简单了解feature importance

实际情况中,一个数据集中往往包含数以万计个特征,如何在其中选择出,结果影响最大的几个特征,并通过这种方法缩减建立模型时的特征数,这是我们最为关心的问题。今天要介绍的是:用随机森林来对进行特征筛选。

随机森林进行特征重要性评估的思想其实非常简单,简单来说,就是观察每个特征随机森林中的每颗树上做了多少贡献,然后取平均值,最后对比特征之间的贡献大小。

总结一下就是:特征重要性是指,在全部单颗树上此特征重要性的一个平均值,而单颗树上特征重要性计算方法事:根据该特征进行分裂后平方损失的减少量的求和。

二、feature importance评分作用

1.特征重要性分可以凸显出特征与目标的相关相关程度,能够帮助我们了解数据集

2.特征重要性得分可以帮助了解模型

特征重要性得分通常是通过数据集拟合出的预测模型计算的。查看重要性得分能够洞悉此特定模型,以及知道在进行预测时特征的重要程度。

3.特征重要性能够用于改进预测模型

我们可以通过特征重要性得分来选择要删除的特征(即得分最低的特征)或者需要保留的特征(即得分最高的特征)。这其实是一种特征选择,能够简化正在建模的问题,加快建模过程,在某些情况下,还能够改善模型的性能。

三、python实现随机森林feature importances


import xlrd
import csv
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.interpolate import spline  
#设置路径
path='/Users/kqq/Documents/postgraduate/烟叶原始光谱2017.4.7数字产地.csv'
#读取文件
df = pd.read_csv(path, header = 0)
 
#df.info()
 
#训练随机森林模型
from sklearn.cross_validation import train_test_split
from sklearn.ensemble import RandomForestClassifier
x, y = df.iloc[:, 1:].values, df.iloc[:, 0].values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)
feat_labels = df.columns[1:]
forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)
forest.fit(x_train, y_train)
 
 
#打印特征重要性评分
importances = forest.feature_importances_
#indices = np.argsort(importances)[::-1]
imp=[]
for f in range(x_train.shape[1]):
    print(f + 1, feat_labels[f], importances[f])
    
 
 
#将打印的重要性评分copy到featureScore.xlsx中;plot特征重要性
#设置路径
path='/Users/kqq/Documents/postgraduate/实验分析图/featureScore.xlsx'
#打开文件
myBook=xlrd.open_workbook(path)
#查询工作表
sheet_1_by_index=myBook.sheet_by_index(0)
data=[]
for i in range(0,sheet_1_by_index.nrows):
    data.append(sheet_1_by_index.row_values(i))   
data=np.array(data)
X=data[:1,].ravel()
y=data[1:,]
plt.figure(1,figsize=(8, 4))
i=0
print(len(y))
while i<len(y):  
    #power_smooth = spline(X,y[i],xnew)    
    #plt.grid(True)
    plt.legend(loc='best')
    plt.plot(X,y[i],linewidth=1)
    plt.ylabel('Log(1/R)')
    plt.xlabel('wavelength(nm)')
    i=i+1
plt.legend(loc='best')
plt.savefig('/Users/kqq/Documents/postgraduate/实验图/featureScore', dpi=200) 
plt.show()


数据分析咨询请扫描二维码

客服在线
立即咨询