利用随机森林进行特征重要性排序

第一步就是导包,这里我们主要需要用到的就是sklearn和pandas 我们先对自己的数据集进行一下处理

import numpy as np
import pandas as pd
testset=pd.read_csv("data.csv")
testset.head(5)

数据集导入

dataset=testset
dataset.target=testset[标签]
dataset.target.head(5)

因为数据集比较大就放前几个拿出来给大家看看,提取完标签之后,为了让后面的步骤更加简洁,直接在数据集中删除掉最后的一列target

testset.drop(columns=[currentdepth],inplace=True)
testset.head(5)

除去target这一列的标签,剩下的都是需要进行排序的特征

dataset.feature_names=testset.columns
dataset.feature_names

特征都被输出来了

dataset.data=testset[[特征1,特征2, 特征3, 特征4......]]
dataset.data.head(5)

这里我赋给dataset的data值都是根据上面输出的特征属性来的,需要对部分属性排序也可以,为了方便可以多drop掉几个特征然后赋给新的dataset

print("data shape:{}".format(dataset.data.shape))
print("target shape:{}".format(dataset.target.shape))
print("line head 5:
{}".format(dataset.data[:5]))
print("target head 5:
{}".format(dataset.target[:5]))

分别输出前五个数据看看有没有缺特征或者data和target有空值的 数据集处理完成后检查一下是不是data、target、feature_names这三个都有赋值,它们在数据集中对应的位置应该是这样的(以西瓜数据集为例) 色泽、根蒂、敲声、纹理、脐部、触感这些是feature_names,好瓜这一列是target,中间的青绿、乌黑这些是data,在数据处理时最好把data以行的形式存储起来,这样一行是一个实例

第二步是处理我们通过处理初始的数据集得到的data、target和feature_names

X=dataset.data
X.shape
Y=dataset.target
names=dataset.feature_names
print(names)

第三步利用sklearn这个包中的随机森林对特征进行排序,前面都是准备工作,如果是网上可下载的那种数据集不需要花那么多功夫在处理数据集上

from sklearn.ensemble import RandomForestClassifier
rf=RandomForestClassifier()
rf.fit(X,Y)
print("Features sorted by their score:")
print(sorted(zip(map(lambda x:round(x,4),rf.feature_importances_),names)))

这里也可以不用随机森林,看到有人用线性回归的,有兴趣的同学也可以实现下,后面会附上相关链接

一般来说维数比较小的数据集得出来的重要性排序都不会有很低的,针对维数比较大的数据集可以利用这个方法剔除掉数据集中影响比较小的特征,在保证准确度的情况下训练速度更快。

经验分享 程序员 微信小程序 职场和发展