目录

一、介绍

二、实验

2.1 实验数据

2.2 特征选择


一、介绍

随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有一定的应用,这是因为,随机森林模型在拟合数据后,会对数据属性列,有一个变量重要性的度量,在sklearn中即为随机森林模型的 feature_importances_ 参数,这个参数将返回一个numpy数组对象,数组里的元素对应为随机森林模型在拟合后认为的所给训练属性列的重要程度,是数值类型数据,数组中元素之和为1。变量重要性度量数组中,数值越大的属性列对于预测的准确性更加重要。

二、实验

2.1 实验数据

这里选用kaggle上的入门比赛,Housing Prices Competition for Kaggle Learn Users的数据集作为实验对象,这是一个预测房价的回归问题,数据集如下:

这个数据有81个属性列,1460条数据。

2.2 特征选择

载入数据

#getData函数为自定义的函数,其实就是调用了pandas的read_csv函数
train, test = getData('./data/train.csv', './data/test.csv')

1. 使用皮尔逊相关系数选择特征

#根据皮尔逊相关系数选择与要预测的属性列SalePrice相关性最高的10个属性
#[:11],选出11个是因为SalePrice自己与自己的相关性最高,所以要将它去除故选择排序后的前11个属性,再去除SalePrice
features = train.corr()['SalePrice'].abs().sort_values(ascending=False)[:11]
features.drop('SalePrice', axis=0, inplace=True)
features = features.index

结果如下

2. 使用随机森林模型选择特征

#先用皮尔逊系数粗略的选择出相关性系数的绝对值大于0.3的属性列,这样不需要训练过多不重要的属性列
#可以这么做而且不会破坏实验的控制变量原则,因为根据皮尔逊相关系数选择出的重要性排名前10的属性列
#它们与要预测的属性列的皮尔逊相关系数均大于0.3,可以当成步骤1中也进行了同样的取相关系数为0.3的操作
features = train.corr().columns[train.corr()['SalePrice'].abs()> .3]
features = features.drop('SalePrice')#使用随机森林模型进行拟合的过程
X_train = train[features]
y_train = train['SalePrice']
feat_labels = X_train.columnsrf = RandomForestRegressor(n_estimators=100,max_depth=None)
rf_pipe = Pipeline([('imputer', SimpleImputer(strategy='median')), ('standardize', StandardScaler()), ('rf', rf)])
rf_pipe.fit(X_train, y_train)#根据随机森林模型的拟合结果选择特征
rf = rf_pipe.__getitem__('rf')
importance = rf.feature_importances_#np.argsort()返回待排序集合从下到大的索引值,[::-1]实现倒序,即最终imp_result内保存的是从大到小的索引值
imp_result = np.argsort(importance)[::-1][:10]#按重要性从高到低输出属性列名和其重要性
for i in range(len(imp_result)):print("%2d. %-*s %f" % (i + 1, 30, feat_labels[imp_result[i]], importance[imp_result[i]]))#对属性列,按属性重要性从高到低进行排序
feat_labels = [feat_labels[i] for i in imp_result]
#绘制特征重要性图像
plt.title('Feature Importance')
plt.bar(range(len(imp_result)), importance[imp_result], color='lightblue', align='center')
plt.xticks(range(len(imp_result)), feat_labels, rotation=90)
plt.xlim([-1, len(imp_result)])
plt.tight_layout()
plt.show()

结果如下图:

可以看出,步骤2与步骤1中选择出来的属性列差别不大,不过步骤2表明随机森林模型在拟合后觉得OverallQual属性列的重要性很高。

3. 使用同一个模型进行对比训练

经实验,对于随机森林模型RandomForestRegressor(n_estimators=100,max_depth=None)而言,使用步骤1中的通过皮尔逊相关系数获得的属性列进行训练,得分为 0.9778667641397033;而使用随机森林选择的特征进行训练,得分为 0.9800629050754925。可以看出使用随机森林做特征选择,在这个数据集上对于提高模型的能力还是有一定的作用的。

使用随机森林做特征选择相关推荐

  1. matlab随机森林特征选择,使用随机森林做特征选择

    目录 一.介绍 随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有一定的应用,这是因为,随机森林模型在拟合数据后,会对数据属性列,有一个变量重要性的度量,在sklearn中即为随机森林模型的 ...

  2. 利用随机森林进行特征选择

    随机森林中的特征重要性 随机森林算法示意图 利用随机森林选择特征可参看论文Variable selection using Random Forests. 用随机森林进行特征重要性评估的思想其实很简单 ...

  3. R语言基于随机森林进行特征选择(feature selection)

    R语言基于随机森林进行特征选择(feature selection) 目录 R语言基于随机森林进行特征选择(feature selection)

  4. 随机森林特征个数mtry matlab,基于随机森林的特征选择算法

    2.1 算法描述 本文提出了一种基于随机森林的Wrapper特征选择方法RFFS,利用随机森林算法的变量重要性度量对特征进行排序,然后采用序列后向搜索方法,每次从特征集合中去掉一个最不重要(重要性得分 ...

  5. 随机森林做特征重要性排序和特征选择

    随机森林模型介绍: 随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有常用. 随机森林是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,更令人惊奇的是它在分类和 ...

  6. 【Machine Learning】使用随机森林进行特征选择

    一.特征选择 在我们做特征工程时,当我们提取完特征后,可能存在并不是所有的特征都能分类起到作用的问题,这个时候就需要使用特征选择的方法选出相对重要的特征用于构建分类器.此外,使用特征选择这一步骤也大大 ...

  7. 使用随机森林进行特征选择

    绘制随机森林每棵树的决策边界 首先导入必要的库函数: from sklearn.ensemble import RandomForestClassifier from sklearn.datasets ...

  8. python随机森林的特征选择(mean_decrease_accuracy)

    sklearn自带的特征重要性(feature_importances_)基于基尼杂质,即Mean decrease impurity,预测变量影响时可能有不小偏差,所以14年的这篇blog提出选用M ...

  9. 对于随机森林的通俗理解

    原文:http://blog.csdn.net/mao_xiao_feng/article/details/52728164 对于随机森林的通俗理解 一.决策树 决策树是机器学习最基本的模型,在不考虑 ...

最新文章

  1. CondLaneNet:基于条件卷积的自顶向下车道检测框架
  2. 慕课网_《RabbitMQ消息中间件极速入门与实战》学习总结
  3. 用Windows组件库文件快速部署Visual C
  4. 如何获取Google地图API密钥?(翻译版)
  5. java 注解scheduler_使用spring的@Scheduled注解执行定时任务,启动项目不输出警告
  6. 具有弹性效果的ListView
  7. python任意代码都可以缩进去_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...
  8. Xcode插件管理工具Alcatraz
  9. c++ 字典_Python自学笔记(五):字典
  10. 最贵5000!小米最贵旗舰MIX 3发布,雷军:干翻华为
  11. 理解BERT每一层都学到了什么
  12. 基于深度学习的问答系统论文
  13. 我擦 以后在也不乱去听别人讲座了。。
  14. 线性代数及其应用(part2)--特征方程
  15. 浪曦视频《J2EE测试使用指南Junit3.8详解》学习总结
  16. 将距离度量学习应用于购物问题
  17. 【自动化】车间自动化十大必备装置!
  18. 用ps扣出透明背景图片,做图标的方法
  19. 引入身份准入机制,增强物联网安全
  20. 关于安卓版微信群发软件如何设置微信自动更新!

热门文章

  1. 商业模式新生代_精读商业模式新生代之“多边平台式商业模式”
  2. Linux下查看内存泄露的命令
  3. 并行接口电路8255A的基本使用——三种工作方式的时序图的具体讲解
  4. 异方差性和加权最小二乘法详解
  5. 分享一下我的一些学习方法
  6. HE3342E单节 2A 开关型锂离子电池充电芯片
  7. 进程与程序的区别和联系
  8. sklearn入门——聚类算法KMeans
  9. mysql与oracle实现行转列并指定分隔符
  10. 一张图看懂梯度、散度、旋度、Jacobian、Hessian和Laplacian