小编Jas*_*ich的帖子

如何sklearn随机森林索引feature_importances_

我在sklearn中使用了RandomForestClassifier来确定数据集中的重要功能.我如何能够返回实际的特征名称(我的变量标记为x1,x2,x3等)而不是它们的相对名称(它告诉我重要的特征是'12','22'等).下面是我目前用于返回重要功能的代码.

important_features = []
for x,i in enumerate(rf.feature_importances_):
    if i>np.average(rf.feature_importances_):
        important_features.append(str(x))
print important_features
Run Code Online (Sandbox Code Playgroud)

另外,为了理解索引,我能够找出实际上重要的特征"12"(它是变量x14).当我将变量x14移动到训练数据集的0索引位置并再次运行代码时,它应该告诉我特征'0'很重要,但它没有,它就像它看不到那个特征已经列出的第一个功能实际上是我第一次运行代码时列出的第二个功能(功能'22').

我想也许feature_importances_实际上是使用第一列(我放置了x14)作为训练数据集其余部分的一种ID,因此在选择重要特征时忽略它.谁能解释这两个问题呢?提前感谢您的任何帮助.

编辑
以下是我存储功能名称的方法:

tgmc_reader = csv.reader(csvfile)
row = tgmc_reader.next()    #Header contains feature names
feature_names = np.array(row)
Run Code Online (Sandbox Code Playgroud)


然后我加载了数据集和目标类

tgmc_x, tgmc_y = [], []
for row in tgmc_reader:
    tgmc_x.append(row[3:])    #This says predictors start at the 4th column, columns 2 and 3 are just considered ID variables.
    tgmc_y.append(row[0])     #Target column is the first in the dataset
Run Code Online (Sandbox Code Playgroud)


然后继续将数据集拆分为测试和训练部分.

from sklearn.cross_validation import train_test_split

x_train, x_test, y_train, y_test = train_test_split(tgmc_x, tgmc_y, test_size=.10, …
Run Code Online (Sandbox Code Playgroud)

python feature-selection random-forest scikit-learn

7
推荐指数
1
解决办法
1万
查看次数