RF、GBDT、XGboost特征选择方法「建议收藏」

 RF、GBDT、XGboost都可以做特征选择,属于特征选择中的嵌入式方法。比如在sklearn中,可以用属性feature_importances_去查看特征的重要度,比如:fromsklearnimportensemble#grd=ensemble.GradientBoostingClassifier(n_estimators=30)grd=ensemble.Rando…

大家好,又见面了,我是你们的朋友全栈君。

  RF、GBDT、XGboost都可以做特征选择,属于特征选择中的嵌入式方法。比如在sklearn中,可以用属性feature_importances_去查看特征的重要度, 比如:

from sklearn import ensemble
#grd = ensemble.GradientBoostingClassifier(n_estimators=30)
grd = ensemble.RandomForestClassifier(n_estimators=30)
grd.fit(X_train,y_train)
grd.feature_importances_

  但是这三个分类器是如何计算出特征的重要度呢?下面来分别的说明一下。

1. 随机森林(Random Forest)

    用袋外数据 (OOB) 做预测。随机森林在每次重抽样建立决策树时,都会有一些样本没有被选中,那么就可以用这些样本去做交叉验证,这也是随机森林的优点之一。它可以不用做交叉验证,直接用oob _score_去对模型性能进行评估。

    具体的方法就是:

        1. 对于每一棵决策树,用OOB 计算袋外数据误差,记为 errOOB1;

        2. 然后随机对OOB所有样本的特征i加入噪声干扰,再次计算袋外数据误差,记为errOOB2;

        3. 假设有N棵树,特征i的重要性为sum(errOOB2-errOOB1)/N;

    如果加入随机噪声后,袋外数据准确率大幅下降,说明这个特征对预测结果有很大的影响,进而说明它的重要程度比较高

2. 梯度提升树(GBDT)

    主要是通过计算特征i在单棵树中重要度的平均值,计算公式如下:

RF、GBDT、XGboost特征选择方法「建议收藏」

其中,M是树的数量。特征i在单棵树的重要度主要是通过计算按这个特征i分裂之后损失的减少值

RF、GBDT、XGboost特征选择方法「建议收藏」

其中,L是叶子节点的数量,L-1就是非叶子结点的数量。

3. XGboost

    XGboost是通过该特征每棵树中分裂次数的和去计算的,比如这个特征在第一棵树分裂1次,第二棵树2次……,那么这个特征的得分就是(1+2+…)。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127541.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • L3-023 计算图(链式求导+bfs拓扑|dfs)「建议收藏」

    L3-023 计算图(链式求导+bfs拓扑|dfs)「建议收藏」原题链接“计算图”(computational graph)是现代深度学习系统的基础执行引擎,提供了一种表示任意数学表达式的方法,例如用有向无环图表示的神经网络。 图中的节点表示基本操作或输入变量,边表示节点之间的中间值的依赖性。 例如,下图就是一个函数 ( 的计算图。现在给定一个计算图,请你根据所有输入变量计算函数值及其偏导数(即梯度)。 例如,给定输入,,上述计算图获得函数值 (;并且根据微分链式法则,上图得到的梯度 ∇。知道你已经把微积分忘了,所以这里只要求你处理几个简单的算子:加法、减法、乘

    2022年8月8日
    11
  • Java如何快速入门?

    Java如何快速入门?转自:微点阅读https://www.weidianyuedu.com一、掌握静态方法和属性静态方法和属性用于描述某一类对象群体的特征,而不是单个对象的特征。Java中大量应用了静态方法和属性,这是一个通常的技巧。但是这种技巧在很多语言中不被频繁地使用。理解静态方法和属性对于理解类与对象的关系是十分有帮助的,在大量的Java规范中,静态方法和属性被频繁使用。因此学习者应该理解静态方法和属性。Java在方法和属性的调用上是一致的,区别只表现在声明的时候,这和c++是不同的。二、重视接口..

    2022年6月1日
    37
  • datax(6):启动步骤解析

    datax(6):启动步骤解析通过前面datax(2):通过idea搭建源码阅读+调试环境已经知道了idea下阅读源码的步骤,现在看下DataX启动步骤解析一,启动java类(主入口)/***Engine是DataX入口类,该类负责初始化Job或者Task的运行容器,并运行插件的Job或者Task逻辑*/com.alibaba.datax.core.Engine二,启动的步骤1、解析配置,包括job.json、core.json、plugin.json三个配置2、设置jobId到config.

    2022年5月17日
    73
  • 显卡挖矿怎么安装_显卡挖矿教程

    显卡挖矿怎么安装_显卡挖矿教程一、制作操作系统镜像文件前准备1.下载win10操作系统镜像。下载地址:http://miner.tools/software/142.下载并安装软碟通。3.准备一个U盘。二、制作U盘操作系统镜像文件1.右键单击软碟通,以管理员身份运行:2.在软碟通中打开下载的操作系统镜像:3.插入U盘,点击“启动”下的“写入硬盘映像…”:4.硬盘驱动器选择刚插入的U盘,点格式化:5.在格式化窗口,文件系统选NT…

    2022年9月30日
    4
  • 静态局部变量和静态全程变量static。

    静态局部变量和静态全程变量static。1.什么是static?static是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。1.1static的引入我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题:如果想将函数中此变量的值保存至下一次调用时,如何实现?最容易想到的方法是定义为全局的变量,但定…

    2022年5月1日
    38
  • 7道常见的数据分析面试题[通俗易懂]

    7道常见的数据分析面试题[通俗易懂]InfoQ内容来自极客时间《数据分析实战45讲》数据分析师近几年在国内互联网圈越来越火,很多开发都因为薪资和发展前景,希望转行到数据分析岗。今天,我们就来聊聊面试数据分析师的那些事。其实,数据分析能力是每个互联网人的必备技能,哪怕你没有转行数据分析师的计划,也推荐你看看这个专题,提升你的数据能力。数据分析的能力要求与数据分析相关的工作有一个特质,就是对数字非常敏感,同时也要求对数据具…

    2022年5月27日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号