随机森林中的特征重要性

随机森林算法示意图

利用随机森林选择特征可参看论文Variable selection using Random Forests。

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

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

袋外数据错误率

计算某个特征 X X X的重要性时,具体步骤如下:

1)对每一颗决策树,选择相应的袋外数据(out of bag,OOB)​计算袋外数据误差,记为errOOB1" role="presentation" style="position: relative;">errOOB1errOOB1err_{OOB1}。

所谓袋外数据是指,每次建立决策树时,通过重复抽样得到一个数据用于训练​决策树,这时还有大约1/3的数据没有被利用,没有参与决策树的建立。这部分数据可以用于对决策树的性能进行评估,计算模型的预测错误率,称为袋外数据误差。

​这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

​2)随机对袋外数据OOB所有样本的特征 X X X加入噪声干扰(可以随机改变样本在特征X" role="presentation" style="position: relative;">XXX处的值),再次计算袋外数据误差,记为 errOOB2 e r r O O B 2 err_{OOB2}。

3)​假设森林中有 N N N棵树,则特征X" role="presentation" style="position: relative;">XXX的重要性= ∑(errOOB2−errOOB1)/N ∑ ( e r r O O B 2 − e r r O O B 1 ) / N \sum(err_{OOB2}-err_{OOB1})/N。这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即 errOOB2 e r r O O B 2 err_{OOB2}上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。

举个例子

借用利用随机森林对特征重要性进行评估的例子。

以UCI上葡萄酒的例子为例,首先导入数据集。

import pandas as pd
url = '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']

看下数据的信息:

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 178 entries, 0 to 177
Data columns (total 14 columns):
Class label                     178 non-null int64
Alcohol                         178 non-null float64
Malic acid                      178 non-null float64
Ash                             178 non-null float64
Alcalinity of ash               178 non-null float64
Magnesium                       178 non-null int64
Total phenols                   178 non-null float64
Flavanoids                      178 non-null float64
Nonflavanoid phenols            178 non-null float64
Proanthocyanins                 178 non-null float64
Color intensity                 178 non-null float64
Hue                             178 non-null float64
OD280/OD315 of diluted wines    178 non-null float64
Proline                         178 non-null int64
dtypes: float64(11), int64(3)
memory usage: 19.5 KB

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

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]
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.025400
10) Proanthocyanins                0.022351
11) Magnesium                      0.022078
12) Nonflavanoid phenols           0.014645
13) Ash                            0.013916

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

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

输出为

(124,3)

参考资料

随机森林进行特征重要性度量的详细说明
利用随机森林做特征选择
利用随机森林对特征重要性进行评估

利用随机森林进行特征选择相关推荐

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

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

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

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

  3. 利用随机森林填补缺失值

    利用随机森林填补缺失值 介绍 利用随机森林填补缺失值 介绍 说到缺失值,我想各位在进行数据分析之前或多或少都是会遇到的.在做有关机器学习的项目的时候,出题人都是会给你一个好几万好几十万的数据,可能会出 ...

  4. 使用随机森林做特征选择

    目录 一.介绍 二.实验 2.1 实验数据 2.2 特征选择 一.介绍 随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有一定的应用,这是因为,随机森林模型在拟合数据后,会对数据属性列,有一 ...

  5. 利用随机森林算法实现Bank风险预测

    利用随机森林算法实现Bank风险预测 源码分享及数据集分享:https://github.com/luo948521848/BigDatas 在机器学习中,随机森林是一个包含多个决策树的分类器, 并且 ...

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

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

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

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

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

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

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

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

最新文章

  1. 某个第三方支付平台数据库的分析、学习与总结(转)
  2. mybitis第三讲:关联查询
  3. android studio小案例代码,AndroidStudio开发小相册实例
  4. !function(){}()
  5. golang实现聊天室(一)
  6. 让struts2和servlet共存
  7. vscode安装 Fira Code 编程字体,编程符号更精致美观
  8. 网络安全常用标准汇总
  9. SSM框架的Web项目实现微信登陆
  10. KVM:将img文件转换成qcow2格式的镜像
  11. 面试常问的PECS原则,到底是什么鬼?
  12. 密歇根安娜堡大学的计算机科学教授,曾亮(美国国家工程院院士、密歇根大学遥感学教授)_百度百科...
  13. 广东省珠海市谷歌卫星地图下载
  14. nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 61
  15. Unity 水体效果模拟
  16. 修改el-Badge 标记 content的位置
  17. 分享几个 Windows 实用技巧
  18. 华为手机linux连接网络设置ip地址,华为手机怎么看网络IP地址?华为手机查看网络IP地址两种方法...
  19. 和氟西汀类似的备注_氟西汀一样好听的网名有哪些
  20. 实用selenium+python实现web自动化测试第八节

热门文章

  1. MarkdownPad2注册码——亲测有效
  2. iphone相册储存空间已满_iPhone 总提示“iCloud储存空间将满”,如何解决?
  3. 保险公司免费赠送保险可信吗?
  4. 2018桂林J - Stone Game(博弈)
  5. 怎么制作书单视频?一款好用的制作软件教程
  6. 【教程】扫描识别工具Dynamic Web TWAIN使用教程:条码读取器(下)
  7. 小米手机5s简单刷成开发版获得ROOT权限的方法
  8. navicat 快捷键使用
  9. android标签云:LabelView
  10. 配色(转http://huaban.com/boards/13532082/)