two methods: 
1.Mean decrease impurity 不纯度降低

大概是对于每颗树,按照impurity(gini /entropy /information gain)给特征排序,然后整个森林取平均。最优条件的选择依据是不纯度。不纯度在分类中通常为Gini不纯度或信息增益/信息熵,对于回归问题来说是方差。

基于不纯度对模型进行排序有几点需要注意: 
(1)基于不纯度降低的特征选择将会偏向于选择那些具有较多类别的变量(bias)。 
(2)当存在相关特征时,一个特征被选择后,与其相关的其他特征的重要度则会变得很低,因为他们可以减少的不纯度已经被前面的特征移除了。

sklearn实现如下:

from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
import numpy as np
#Load boston housing dataset as an example
boston = load_boston()
X = boston["data"]
print type(X),X.shape
Y = boston["target"]
names = boston["feature_names"]
print names
rf = RandomForestRegressor()
rf.fit(X, Y)
print "Features sorted by their score:"
print sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names), reverse=True)

结果如下:

Features sorted by their score:
[(0.5104, 'RM'), (0.2837, 'LSTAT'), (0.0812, 'DIS'), (0.0303, 'CRIM'), (0.0294, 'NOX'), (0.0176, 'PTRATIO'), (0.0134, 'AGE'), (0.0115, 'B'), (0.0089, 'TAX'), (0.0077, 'INDUS'), (0.0051, 'RAD'), (0.0006, 'ZN'), (0.0004, 'CHAS')]

2.Mean decrease accuracy 准确率降低

这种方法是直接测量每种特征对模型预测准确率的影响,基本思想是重新排列某一列特征值的顺序,观测降低了多少模型的准确率。对于不重要的特征,这种方法对模型准确率的影响很小,但是对于重要特征却会极大降低模型的准确率。 大概就是measure一下对每个特征加躁,看对结果的准确率的影响。影响小说明这个特征不重要,反之重要

具体步骤如下: 
在随机森林中某个特征X的重要性的计算方法如下: 
a:对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1. 
b: 随机地对袋外数据OOB所有样本的特征X加入噪声干扰(就可以随机的改变样本在特征X处的值),再次计算它的袋外数据误差,记为errOOB2.

c:假设随机森林中有Ntree棵树,那么对于特征X的重要性=∑(errOOB2-errOOB1)/Ntree,之所以可以用这个表达式来作为相应特征的重要性的度量值是因为:若给某个特征随机加入噪声之后,袋外的准确率大幅度降低,则说明这个特征对于样本的分类结果影响很大,也就是说它的重要程度比较高。

示例如下

from sklearn.cross_validation import ShuffleSplit
from sklearn.metrics import r2_score
from collections import defaultdictX = boston["data"]
Y = boston["target"]rf = RandomForestRegressor()
scores = defaultdict(list)#crossvalidate the scores on a number of different random splits of the data
for train_idx, test_idx in ShuffleSplit(len(X), 100, .3):X_train, X_test = X[train_idx], X[test_idx]Y_train, Y_test = Y[train_idx], Y[test_idx]r = rf.fit(X_train, Y_train)acc = r2_score(Y_test, rf.predict(X_test))for i in range(X.shape[1]):X_t = X_test.copy()np.random.shuffle(X_t[:, i])shuff_acc = r2_score(Y_test, rf.predict(X_t))scores[names[i]].append((acc-shuff_acc)/acc)
print "Features sorted by their score:"
print sorted([(round(np.mean(score), 4), feat) forfeat, score in scores.items()], reverse=True)

输出结果:

Features sorted by their score:
[(0.7276, 'LSTAT'), (0.5675, 'RM'), (0.0867, 'DIS'), (0.0407, 'NOX'), (0.0351, 'CRIM'), (0.0233, 'PTRATIO'), (0.0168, 'TAX'), (0.0122, 'AGE'), (0.005, 'B'), (0.0048, 'INDUS'), (0.0043, 'RAD'), (0.0004, 'ZN'), (0.0001, 'CHAS')]

在这个例子中, LSTAT 和RM是两个对模型影响较大的特征,打乱他们的顺序将会降低模型约73%与57%的准确率。

参考:http://blog.datadive.net/selecting-good-features-part-iii-random-forests/

随机森林对特征重要性排序相关推荐

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

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

  2. 随机森林的特征重要性排序

    OOB计算 用未被选择到的学习的数据,做验证集计算.不必另外做validation了 Feature Selection 如果没有做好这部分,也是有缺点的: 其中最致命的就是,可能得到的是错误的答案, ...

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

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

  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. 利用随机森林对特征重要性进行评估 方法一

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

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

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

  9. python随机森林特征重要性原理_随机森林进行特征重要性度量的详细说明

    特征选择方法中,有一种方法是利用随机森林,进行特征的重要性度量,选择重要性较高的特征.下面对如何计算重要性进行说明. 1 特征重要性​度量 计算某个特征X的重要性时,具体步骤如下: 1)对每一颗决策树 ...

最新文章

  1. 第三周项目三-输出星号图(3)
  2. 输入的命令集锦(补充)
  3. buu 凯撒?替换?呵呵!
  4. ActionT和FuncT委托
  5. eclipse安装Hadoop1.1.2版本开发插件
  6. SpringMVC的请求-获得请求参数-自定义类型转换器
  7. ado.net封装类
  8. SAP Spartacus user-addresses.effect.ts里发送地址加载成功的action,会触发我们自己的reducer
  9. 为什么那些每三年跳一次槽的人越跳越好? - 震撼
  10. 开放医疗交通大数据技术 服务于公共便民领域
  11. 【Python基础入门系列】第10天:Python 类与对象
  12. Python 大文件处理
  13. ValueError: Shapes () and (1, 1) are incompatible
  14. MTK 驱动开发---Memory 移植
  15. svnserver配置文件详解
  16. python 词表里的词不符合_收藏干货丨初中英语单词1600个词表+mp3下载
  17. 金山WPS服务端开发工程师(第一次)(2018年秋招 2018-9-4)
  18. LINUX系统开机后出现assuming drive cache:write through* 无法开机
  19. 操作系统之——磁盘存储器管理
  20. dubbo是长连接还是短连接_重疾险交费年限长短区别是什么?重疾险交费年限长还是短的好?...

热门文章

  1. SAN存储和服务器虚拟化安装方案,如何部署SAN
  2. SAP中物料报废无法确定账户问题处理实例
  3. 京东java电话面试问题_【京东Java面试】京东电话技术面试,面试题目完全没思路。-看准网...
  4. oracle vbo4582,4582是什么意思
  5. Kali Rolling Virtualbox5 SSH+Guest Addition增强包
  6. 智能背包的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  7. android网络扫描工具,fing网络扫描仪安卓版
  8. 巧用“sfc scannow”命令扫描修复Win8系统
  9. GraphQL的探索之路 – 一种为你的API而生的查询语言 - 第314篇
  10. F2FS源码分析-2.1 [F2FS 读写部分] F2FS文件数据组织方式以及物理地址的映射