随机森林(RF)简介

只要了解决策树的算法,那么随机森林是相当容易理解的。随机森林的算法可以用如下几个步骤概括:

1、用有抽样放回的方法(bootstrap)从样本集中选取n个样本作为一个训练集
2、用抽样得到的样本集生成一棵决策树。在生成的每一个结点:
1)随机不重复地选择d个特征
2)利用这d个特征分别对样本集进行划分,找到最佳的划分特征(可用基尼系数、增益率或者信息增益判别)
3、重复步骤1到步骤2共k次,k即为随机森林中决策树的个数。
4、用训练得到的随机森林对测试样本进行预测,并用票选法决定预测的结果。

下图比较直观地展示了随机森林算法(图片出自文献2):

特征重要性评估

现实情况下,一个数据集中往往有成百上前个特征,如何在其中选择比结果影响最大的那几个特征,以此来缩减建立模型时的特征数是我们比较关心的问题。这样的方法其实很多,比如主成分分析,lasso等等。不过,这里我们要介绍的是用随机森林来对进行特征筛选。

用随机森林进行特征重要性评估的思想其实很简单,说白了就是看看每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小。

好了,那么这个贡献是怎么一个说法呢?通常可以用基尼指数(Gini index)或者袋外数据(OOB)错误率作为评价指标来衡量。

我们这里只介绍用基尼指数来评价的方法,想了解另一种方法的可以参考文献2。

举个例子

值得庆幸的是,sklearnsklearn已经帮我们封装好了一切,我们只需要调用其中的函数即可。
我们以UCI上葡萄酒的例子为例,首先导入数据集。

import pandas as pdurl = 'http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'df = pd.read_csv(url, header = None)df.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', 'Proline']

然后,我们来大致看下这时一个怎么样的数据集

import numpy as npnp.unique(df['Class label'])

输出为

array([1, 2, 3], dtype=int64)

可见共有3个类别。然后再来看下数据的信息:

df.info()

输出为

<class 'pandas.core.frame.DataFrame'>RangeIndex: 178 entries, 0 to 177Data columns (total 14 columns):Class label                     178 non-null int64Alcohol                         178 non-null float64Malic acid                      178 non-null float64Ash                             178 non-null float64Alcalinity of ash               178 non-null float64Magnesium                       178 non-null int64Total phenols                   178 non-null float64Flavanoids                      178 non-null float64Nonflavanoid phenols            178 non-null float64Proanthocyanins                 178 non-null float64Color intensity                 178 non-null float64Hue                             178 non-null float64OD280/OD315 of diluted wines    178 non-null float64Proline                         178 non-null int64dtypes: float64(11), int64(3)memory usage: 19.5 KB

可见除去class label之外共有13个特征,数据集的大小为178。
按照常规做法,将数据集分为训练集和测试集。

from sklearn.cross_validation import train_test_splitfrom sklearn.ensemble import RandomForestClassifierx, y = df.iloc[:, 1:].values, df.iloc[:, 0].valuesx_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]for f in range(x_train.shape[1]):print("%2d) %-*s %f" % (f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))

输出的结果为

 1) Color intensity                0.1824832) Proline                        0.1586103) Flavanoids                     0.1509484) OD280/OD315 of diluted wines   0.1319875) Alcohol                        0.1065896) Hue                            0.0782437) Total phenols                  0.0607188) Alcalinity of ash              0.0320339) Malic acid                     0.02540010) Proanthocyanins                0.02235111) Magnesium                      0.02207812) Nonflavanoid phenols           0.01464513) Ash                            0.013916

对的就是这么方便。
如果要筛选出重要性比较高的变量的话,这么做就可以

threshold = 0.15x_selected = x_train[:, importances > threshold]x_selected.shape

输出为

(124, 3)

瞧,这不,帮我们选好了3个重要性大于0.15的特征了吗~

参考文献
[1] Raschka S. Python Machine Learning[M]. Packt Publishing, 2015.
[2] 杨凯, 侯艳, 李康. 随机森林变量重要性评分及其研究进展[J]. 2015.

原文:
https://blog.csdn.net/zjuPeco/article/details/77371645?locationNum=7&fps=1

随机森林评估特征重要性相关推荐

  1. 预处理--python实现用随机森林评估特征的重要性

    python实现用随机森林评估特征的重要性 随机森林根据森林中所有决策树计算平均不纯度的减少来测量特征的重要性,而不作任何数据是线性可分或不可分的假设. import numpy as np impo ...

  2. 利用随机森林对特征重要性进行评估 方法一

    https://hal.archives-ouvertes.fr/file/index/docid/755489/filename/PRLv4.pdf 前言 随机森林是以决策树为基学习器的集成学习算法 ...

  3. 利用随机森林对特征重要性进行评估

    文章目录 1 前言 2 随机森林(RF)简介 3 特征重要性评估 4 举个例子 5 参考文献 1 前言 随机森林是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,更令人惊 ...

  4. 随机森林计算特征重要性_随机森林中计算特征重要性的3种方法

    随机森林计算特征重要性 The feature importance describes which features are relevant. It can help with a better ...

  5. python随机森林特征重要性_基于随机森林识别特征重要性(翻译)

    博主Slav Ivanov 的文章<Identifying churn drivers with Random Forests >部分内容翻译.博主有一款自己的产品RetainKit,用A ...

  6. 可视化随机森林的特征重要性

    可视化随机森林的特征重要性 # 查看随机森林的特征重要性 import numpy as np import matplotlib.pyplot as plt from sklearn.ensembl ...

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

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

  8. python随机森林变量重要性_利用随机森林对特征重要性进行评估

    前言 随机森林是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,更令人惊奇的是它在分类和回归上表现出了十分惊人的性能,因此,随机森林也被誉为"代表集成学习技术水 ...

  9. 利用随机森林对特征重要性进行评估(含实例+代码讲解)

    这部分主要讲解一下如何使用,需要看原理的小伙伴,可以到我之前的博客: https://blog.csdn.net/wzk4869/article/details/126379073?spm=1001. ...

  10. 利用随机森林对特征重要性进行评估(公式原理)

    本文参考来源于: 杨凯, 侯艳, 李康. 随机森林变量重要性评分及其研究进展[J]. 2015. 码字不易,各位看官大大的赞是我更细的动力! 一.引言 随机森林(randomforest,RFrand ...

最新文章

  1. C#编码简单性之语义篇(如何编写简短的C#代码,随时更新)
  2. 【Python】0/1背包、动态规划
  3. TCP/IP网络中专有名词注解
  4. Angular界面元素CSS样式的条件式施加方式
  5. 全民熬夜的时代,如何做到早睡?
  6. 内核启动流程—走马观花
  7. 通过系统表获取SQL,Access,Oracle数据库的元数据信息
  8. Qt4_Hello world
  9. IntelliJ IDEA 更换背景图和背景颜色
  10. 李雅普诺夫(第二方法)稳定性分析+例题
  11. 我再copy回来。中海真是有心人。只是,你们在哪里?
  12. IGMP基础原理与实验
  13. uni-app引入阿里图标
  14. 【Android Studio】在Mac中更换JDK Location
  15. 网安技术与应用(4)——配置iptables防御常见攻击
  16. spring 启动日志报 DEBUG BeanNameUrlHandlerMapping:86 - Rejected bean name 'org.springframework.web.servl
  17. OSI七层模型就这???
  18. 前端WEB开发面试题整理
  19. Coding and Paper Letter(二十八)
  20. 1024程序员节,过节也要写代码呀!

热门文章

  1. 06LaTeX学习系列之---TeXstudio的使用
  2. 在阿里云上搭建自己的git服务器
  3. 你知道怎么用Idea抽取方法、创建class吗?
  4. 大数据时代,CRM帮助企业进行升级转型
  5. ADO.NET 数据库操作类
  6. ACdream 1728 SJY's First Task
  7. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决...
  8. 关于Excel导入SQLServer的说明
  9. java 远程调用方法_如何在Java中实现远程方法调用
  10. java中ImageIcon路径问题