随机森林oob_score及oob判断特征重要性
目录
1. oob
2. oob_score
3. oob选择重要特征
4.与其它方法对比
Sklearn RandomForest算法(有监督学习),可以根据输入数据,选择最佳特征,减少特征冗余;同理,可以通过特征的排列组合,选择最优的组合特征,优化下游算法性能
原理:由于随机决策树生成过程采用的Boostrap,所以在一棵树的生成过程并不会使用所有的样本,未使用的样本就叫(out_of_bag)oob袋外样本。通过袋外样本,可以评估这个树的准确度;此外,其他子树按这个原理评估。最后,取平均值即是随机森林算法的性能。
特征选择原理:因为袋外样本的存在,因此不需要进行十字交叉测试(节省时间),通过依次对每个特征赋予一个随机数,观察算法性能的变化,倘若变化大,则说明该特征重要,sklearn中会对每个特征赋予一个分数,分数越大,特征越重要,因此,可以根据特征重要性排序,然后选择最佳特征组合。
在学习随机森林算法参数解释以及参数择优的过程中,注意到oob_score这一参数对应是否采用袋外样本来评估模型的好坏。
1. oob
袋外样本oob (Out of bag):在随机森林中,n个训练样本会通过bootstrap (有放回的随机抽样) 的抽样方式进行T次抽样每次抽样产生样本数为n的采样集,进入到并行的T个决策树中。
有放回的抽样方式会导致有部分训练集中的样本(约36.8%)未进入决策树的采样集中,而这部分未被采集的的样本就是袋外数据oob。袋外数据就可以用来检测模型的泛化能力,和交叉验证类似。
2. oob_score
对于单棵用采样集训练完成的决策树Ti,用袋外数据运行后会产生一个oob_score (返回的是R square来判断),对每一棵决策树都重复上述操作,最终会得到T个oob_score,把这T和oob_score平均,最终得到的就是整个随机森林的oob_score(即决定系数)。
3. oob选择重要特征
用oob样本在训练好的决策树T1上运行,可以得到袋外数据误差 e1,然后保持其他列不变, permutate(随机重排/洗牌)第 i 列特征的特征值或者加噪音在 oob中第 i 列特征的特征值上,得到袋外数据误差 ei2。
计算特征X的重要性=∑(ei2-e1)/T。改变特征值之后ei2变动越大,说明该特征产生的影响越大,该特征值越重要。
通过利用oob对每个特征分别permutation或加噪音,迭代进行,评估改变每个特征后的∑(ei2-e1)/T,然后做一个排序,值越高的特征越重要。
(OOB Error is the number of wrongly classifying the OOB Sample.)
sklearn.ensemble 里的RandomForestClassifier有选择重要特征的功能,其采用的是impurity-based(用基尼系数或者信息增益)来判断特征重要性。并不等同于OOB,OOB方法确实要一个个特征换随机数,一个个决策树迭代。
示例:
"""
Created on Mon Mar 19 20:22:09 2018
@author: test
function: iteritor for features combintaion
date:2018/3/19
"""import copy
import sys
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifierdata = pd.read_csv(r"C:\Users\huzhipeng_sx\Desktop\data",header = None,sep = '\t')y_train = data[0].values
X_train = data.drop(0,axis=1).values
X_train = pd.DataFrame(np.delete(X_train,-5,axis=1))features_name = ['a','b','c']rf = RandomForestClassifier(n_estimators=200,oob_score=True)
rf.fit(X_train,y_train)
features_imp = rf.feature_importances_X_train = X_train.as_matrix() #输入要是数组,不然无法切片,报错slicedef select_combine(X_train,y_train,features_name,features_imp,select_num):oob_result = []fea_result = []features_imp = list(features_imp)iter_count = X_train.shape[1] - select_num #迭代次数if iter_count < 0:print("select_nume must less or equal X_train columns")else:features_test = copy.deepcopy(features_imp) #生成一个排序特征,进行筛选features_test.sort()features_test.reverse() while iter_count >= 0:iter_count -= 1train_index = [features_imp.index(j) for j in features_test[:select_num]]train_feature_name = [features_name[k] for k in train_index][0]train_data = X_train[:,train_index]rf.fit(train_data,y_train)acc = rf.oob_score_print(acc)oob_result.append(acc)fea_result.append(train_index)if select_num < X_train.shape[1]:select_num += 1else:breakreturn max(oob_result),oob_result,fea_result[oob_result.index(max(oob_result))]select_num = 20
max_result, oob_result, fea_result = select_combine(X_train,y_train,features_name,features_imp,select_num)
4.与其它方法对比
随机森林算法特征维度,不同于PCA,随机森林算法能够考虑到特征对类别的影响,而PCA是单纯的数据方差;但是随机森林的缺点是需要迭代计算,如果在大数据条件下,进行选择,就难免有点捉襟见肘了;与LDA区别在于:LDA根据标签,通过变换将同标签数据距离缩小,将累间距离方法;LDA是一种有监督方法,PCA属于无监督方法;
转载文章连接:
https://blog.csdn.net/MingRachel/article/details/115038730
https://blog.csdn.net/zehui6202/article/details/79625639
随机森林oob_score及oob判断特征重要性相关推荐
- ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序
ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序 目录 基于mpg数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特 ...
- 随机森林实战(分类任务+特征重要性+回归任务)(含Python代码详解)
1. 随机森林-分类任务 我们使用随机森林完成鸢尾花分类任务: 第一步,导入我们可能需要的包: from sklearn.datasets import load_iris from sklearn. ...
- 基于分位数随机森林预测模型QRF建立多特征输入单个因变量输出的拟合预测模型
基于分位数随机森林预测模型QRF建立多特征输入单个因变量输出的拟合预测模型. 程序内注释详细,直接替换excel数据就可以使用. 程序语言为matlab. ID:1730681783229866
- python随机森林 交叉验证_随机森林是否需要交叉验证+特征的重要性
随机森林不需要交叉验证! 随机森林属于bagging集成算法,采用Bootstrap,理论和实践可以发现Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中.故没有参加 ...
- 随机森林特征重要性计算_R语言随机森林模型中具有相关特征的变量重要性
原文链接: http://tecdat.cn/?p=13546tecdat.cn 变量重要性图是查看模型中哪些变量有趣的好工具.由于我们通常在随机森林中使用它,因此它看起来非常适合非常大的数据集.大 ...
- 用随机森林分类器和GBDT进行特征筛选
一.决策树(类型.节点特征选择的算法原理.优缺点.随机森林算法产生的背景) 1.分类树和回归树 由目标变量是离散的还是连续的来决定的:目标变量是离散的,选择分类树:反之(目标变量是连续的,但自变量可以 ...
- python随机森林筛选变量_用随机森林分类器和GBDT进行特征筛选
一.决策树(类型.节点特征选择的算法原理.优缺点.随机森林算法产生的背景) 1.分类树和回归树 由目标变量是离散的还是连续的来决定的:目标变量是离散的,选择分类树:反之(目标变量是连续的,但自变量可以 ...
- 机器学习基础算法之随机森林
英文原文<The Random Forest Algorithm> 专知 编译<机器学习基础算法之随机森林> [导读]在当今深度学习如此火热的背景下,其他基础的机器学习算法显得 ...
- 随机森林RF原理总结
在集成学习原理中知道,集成学习分为两部分Bagging和Boosting.随机森林RF作为Bagging方法的典型例子,以其并行训练的优点在如今处理数据问题上广受欢迎.随机森林,顾名思义,是有多棵树组 ...
- sklearn实现随机森林(分类算法)
阿喽哈~小伙伴们,今天我们来唠一唠随机森林 ♣ ♣ ♣ 随机森林应该是很多小伙伴们在学机器学习算法时最先接触到的集成算法,我们先简单介绍一下集成学习的大家族吧: Bagging:个体评估器之间不存在强 ...
最新文章
- .sh是什么语言_shell的重生历史:从sh到bash
- 每次输出日志前需要判断日志的级别吗?
- 三级计算机系统是什么情况,三级PC技术: 计算机的组成和分类
- Python Django 获取多条记录API
- oracle读取表空间物理文件中数据,shell脚本读取oracle数据库数据写入到文件中
- PHP配置限制文件大小上传
- Java连接字符(concat)
- Linq 中的 left join
- 小程序--按钮返回上页
- 论如何使用zabbix监控LNMP架构
- Android实现计时与倒计时的几种方法
- 【eoeAndroid社区索引】android 条形码的知识汇总
- MATLAB 电子书
- 函数的梯度方向和切线方向_导数、方向导数与梯度
- easyui-filebox文件上传格式
- Java面向对象前奏:酒店客房管理系统
- C++函数的定义与使用
- BiliBili视频下载
- 苹果IOS使用教程如何使用PPTP达到给手机换IP
- 程序员日常,你的痛只有我懂,因为小编也是程序员,扎心不老铁?
热门文章
- 阿里云香港服务器被攻击进黑洞了怎么办
- 免费不限速不限存储的网盘推荐
- 红米note3android驱动,为何我的红米NOTE3 装不了USB驱动
- 【BUG】Python3|爬虫请求得到的json中的值全是问号
- Vue 如何清除Form 表单验证二次弹出表单 清除验证上次提示信息
- Git报错Kex_exchange_identification
- [BZOJ2177][最小/最大(曼哈顿距离)生成树]曼哈顿最小生成树
- 一年级课程表(3月14日-3月18日)
- 动环监控系统发展趋势
- 【英语魔法俱乐部——读书笔记】 1 初级句型-简单句(Simple Sentences)