机器学习系列(三)决策树的集成算法--随机森林与极限森林--三个臭皮匠与完美主义者的较量

本文主要是介绍机器学习系列(三)决策树的集成算法--随机森林与极限森林--三个臭皮匠与完美主义者的较量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面: 我是「nicedays」,一枚喜爱做特效,听音乐,分享技术大数据开发猿。这名字是来自world order乐队的一首HAVE A NICE DAY。如今,走到现在很多坎坷和不顺,如今终于明白nice day是需要自己赋予的。
白驹过隙,时光荏苒,珍惜当下~~
写博客一方面是对自己学习的一点点总结及记录,另一方面则是希望能够帮助更多对大数据感兴趣的朋友。如果你也对 大数据与机器学习感兴趣,可以关注我的动态 https://blog.csdn.net/qq_35050438,让我们一起挖掘数据与人工智能的价值~

文章目录

    • 随机森林--极限森林--梯度提升树(本章未写):
      • 一:集成算法Ensemble learning
        • 1)Bagging:训练多个学习器取平均
        • 2)Boosting:从弱学习器开始加强,通过加权来进行训练
          • AdaBoost:
        • 3)Stacking:聚合多个分类或回归模型(可以分阶段来做)
      • 二:集成模式下的竞争:随机森林--极限森林--梯度提升树
        • 1)大名鼎鼎的随机森林:
          • 单个决策树随机了什么?
          • 怎么构建?
          • 随机森林得优势:
        • 2)不极限的极限森林:
          • 单个决策树随机了什么?
          • 极限树与随机森林的主要区别:
      • 三:附录Scikit-learn的randomForest和ExtraTrees的参数说明:
        • RandomForestClassifier参数列表:
        • ExtraForestClassifier参数列表:

随机森林–极限森林–梯度提升树(本章未写):

一:集成算法Ensemble learning

再讲解三种分类器的前提,先得聊一聊集成算法:

The goal of ensemble methods is to combine the predictions of several base estimators built with a given learning algorithm in order to improve generalizability / robustness over a single estimator.

目标集成方法将几个弱学习器的预测与给定的学习算法结合起来,以提高单个学习器的通用性和鲁棒性(健壮性)

1)Bagging:训练多个学习器取平均

在原始训练集的随机子集上建立几个黑箱学习器的实例,然后将它们的个体预测集合起来,形成最终的预测

  • 回归取平均,分类则投票表决,颇有三个诸葛亮顶个臭皮匠的感觉

f ( x ) = 1 M ∑ m = 1 M f m ( x ) f(x)= \frac{1}{M}\sum_{m=1}^Mf_m(x) f(x)=M1m=1Mfm(x)

bootstrap aggregation 并行训练一堆分类器

典型为随机森林Bagging+决策树=随机森林

  • 随机:数据采样随机,特征选择随机
  • 森林:很多决策树并行放在一起
2)Boosting:从弱学习器开始加强,通过加权来进行训练

串行训练一堆分类器

对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。

随着迭代的进行,之前越没有成功预测的例子学习器在当前迭代过程中会更加关心它。因此,每个后继的弱学习者都不得不集中精力去训练前面的示例所遗漏的示例上

  • Boosting颇像一个不断反省自己哪里做的不好的完美主义者

F m ( x ) = F m − 1 ( x ) + a r g m i n k ∑ i = 1 n L ( y i , F m − 1 ( x i ) + h ( x i ) ) − − 加 入 一 颗 树 , 比 原 来 强 F_m(x)=F_{m-1}(x) + argmin_k\sum_{i=1}^nL(y_i,F_{m-1}(x_i)+h(x_i))\\--加入一颗树,比原来强 Fm(x)=Fm1(x)+argminki=1nL(yi,Fm1(xi)+h(xi))

典型代表AdaBoost,XgBoost

AdaBoost + 决策树 = 提升树

GradientBoost + 决策树 = 梯度提升树

AdaBoost:

根据前一次的分类效果调整数据给予权重 ,xx分类器这次分类结果出错了,我们下次重新分类时,给xx分类器更大的权重拿更多的数据,看看还会不会错,最后根据分类器的准确性(谁错的少)来确定各自的准确性权重,再合体综合一下。

3)Stacking:聚合多个分类或回归模型(可以分阶段来做)

把多个算法放在一起大杂烩堆叠

  • 分阶段: 第一阶段得出各自结果,第二阶段再用前一阶段结果训练

stacking的像极了一个急切渴望学习但又没有自己一套方法的入门者,它会去把所有流行的模型都去集成一遍,看看哪个最好,他选哪个

二:集成模式下的竞争:随机森林–极限森林–梯度提升树

1)大名鼎鼎的随机森林:

多个决策树学习器的选举或者平均的集成学习器

单个决策树随机了什么?
  • 样本是随机的:抽取的部分样本
  • 特征是随机的:抽取的部分特征
  • 参数是随机的:我佛系我自豪
  • 模型是随机的:ID3,C4.5我随机选
怎么构建?
  1. 从原始训练集随机有放回采样N个样本,M个特征,进行K次采样,得到K个随机模型。
  2. 训练其K个模型,每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂,无剪枝操作。
  3. 生成的K棵树组成森林,回归取均值,分类则选举。
随机森林得优势:
  • 能够处理高纬度数据,特征多,并且不用做特征选择

  • 在训练完后,它能够给出哪些feature比较重要

    当破坏掉某个特征时,错误率显著上升会给感受到特征得重要性,随机森林随机采样特征可以做到。

  • 容易做成并行化方法,速度快

  • 可以进行可视化展示,便于分析

2)不极限的极限森林:

多个决策树学习器的选举或者平均的集成学习器,

与随机森林的随机方式稍有差别

在这里插入图片描述

单个决策树随机了什么?
  • 样本我不随机:抽取全部样本
  • 特征是随机的:抽取的部分特征
  • 参数是随机的:我佛系我自豪
  • 模型是随机的:ID3,C4.5我随机选
  • 分裂是随机的:相比random forest的贪婪,我佛系之后的效果可能更好
极限树与随机森林的主要区别:
  • RandomForest应用的是Bagging模型样本有随机,ExtraTree使用的所有的样本,只是特征是随机选取的,

  • 因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好;

三:附录Scikit-learn的randomForest和ExtraTrees的参数说明:

RandomForestClassifier参数列表:
  • n_estimators–n估计量: Int,默认值=100

    森林中树木的数量。*在0.22版中更改:*的默认值n_estimators0.22从10变到100。

  • criterion–标准: {“基尼”、“熵”},默认=“基尼”

    测量分割质量的功能。支持的准则是吉尼杂质的“基尼”和信息增益的“熵”。注意:这个参数是树特有的.

  • max_depth–最大深度: INT,默认值=无

    树的最大深度。如果没有,那么节点会被展开,直到所有的叶子都是纯的,或者直到所有的叶子包含的样本少于min_SAMSACTS_Spl

  • min_samples_split–最小样本分裂: 整数或浮点数,默认值=2

    拆分内部节点所需的最小样本数:如果int,那么考虑min_samples_split作为最小数目。如果浮动,那么min_samples_split是一个分数ceil(min_samples_split * n_samples)是每次分割的最小样本数。*在0.18版中更改:*添加分数的浮点值。

  • min_samples_leaf–最小样本叶: 整数或浮点数,默认值=1

    一个叶节点所需的最小样本数。任何深度的分裂点只有在它离开的时候才会被考虑。min_samples_leaf每个左、右分支的训练样本。这可能会使模型平滑,特别是在回归过程中。如果int,那么考虑min_samples_leaf作为最小数目。如果浮动,那么min_samples_leaf是一个分数ceil(min_samples_leaf * n_samples)每个节点的最小样本数。*在0.18版中更改:*添加分数的浮点值。

  • min_weight_fraction_leaf–最小重量分数叶: 浮点数,默认值为0.0

    (所有输入样本的)权重之和的最小加权分数,需要在一个叶节点上。当不提供样品重量时,样品具有相同的重量。

  • max_features–最多选取特征数: {“自动”、“sqrt”、“log 2”}、int或Float,默认值=“AUTO”

    在寻找最佳分割时要考虑的功能数量:如果int,那么考虑max_features每次分裂都有特征。如果浮动,那么max_features是一个分数int(max_features * n_features)特征在每次分割时都会考虑。如果“自动”,那么max_features=sqrt(n_features).如果“sqrt”,那么max_features=sqrt(n_features)(与“自动”相同)。如果“log 2”,则max_features=log2(n_features).如果没有,那么max_features=n_features.注意:除非找到节点样本的至少一个有效分区,否则对拆分的搜索不会停止,即使它需要有效地检查max_features特征。

  • max_leaf_nodes–最大叶节点: INT,默认值=无

    种树max_leaf_nodes以最好的方式。最佳节点被定义为杂质的相对减少。如果没有,那么叶节的数量是无限的。

  • min_impurity_decrease–最小杂质减少: 浮点数,默认值为0.0

    如果这种拆分导致大于或等于此值的杂质减少,则节点将被拆分。加权杂质减少方程如下:N_t / N * (impurity - N_t_R / N_t * right_impurity - N_t_L / N_t * left_impurity)哪里N是样本的总数,N_t是当前节点上的样本数,N_t_L是左子中的样本数,以及N_t_R是正确的孩子中的样本数。N, N_t, N_t_RN_t_L都引用加权和,如果sample_weight都通过了。新版本0.19。

  • min_impurity_split–最小杂质分裂: 浮动,默认=无

    树木生长早期停止的阈值。如果一个节点的杂质超过阈值,它就会分裂,否则它就是一片叶子。自0.19版以来已不再推荐:min_impurity_split已经被反对赞成min_impurity_decrease在0.19。的默认值min_impurity_split在0.23中从1e-7变为0,在0.25中将被移除。使用min_impurity_decrease相反。

  • **bootstrap–引导:**Bool,默认值=True

    创建树时是否使用引导示例。如果为false,则使用整个数据集构建每个树。

  • **oob_scoreOOB评分:**Bool,默认值=false

    是否使用包外样本来估计泛化精度.

  • n_jobs–并行度: INT,默认值=无

    并行运行的作业数。fit, predict, decision_pathapply都是平行的。None指1,除非在joblib.parallel_backend背景。-1意味着使用所有处理器。看见术语表更多细节。

  • random_state–随机状态: INT或RandomState,默认值=无

    控制在构建树时使用的样本引导的随机性(如果bootstrap=True)以及在每个节点上寻找最佳拆分时要考虑的特性的抽样(如果max_features < n_features)。看见术语表关于细节。

  • verbose–控制构建数过程的冗长度: Int,默认值=0

    在拟合和预测时控制详细。

  • warm_start–暖启动: Bool,默认值=false

    当设置为True,重用以前调用的解决方案来拟合,并在集合中添加更多的估计器,否则,只需适应一个全新的林。看见词汇.

  • class_weight–类别权重: {“平衡”、“平衡子样本”}、dict或dicts列表,默认值=无

    与表单中的类关联的权重{class_label: weight}。如果不给,所有的课程都应该有一个重量。对于多输出问题,可以提供与y列相同的DECTS列表。注意,对于多输出(包括多标签),应该为每个列的每个类定义其自己的DECT中的权重。例如,对于四类多标签分类权重应该是[{0:1,1:1},{0:1,1:5},{0:1,1:1},{0:1,1:1}],而不是[{1:1},{2:5},{3:1},{4:1}]。“平衡”模式使用y的值自动调整权重,与输入数据中的类频率成反比,如下所示n_samples / (n_classes * np.bincount(y))“Balance_subSample”模式与“Balance”模式相同,只是根据每棵树的引导样本计算权重。对于多输出,y的每一列的权重将乘以.请注意,如果指定了SAMPLE_WART,这些权重将与SAMPLE_WART(通过FIT方法传递)相乘

  • ccp_alpha–CCPα: 非负浮点数,默认值为0.0

    复杂度参数用于最小成本-复杂度剪枝。具有最大成本复杂度的子树,该子树小于ccp_alpha将被选中。默认情况下,不执行剪枝。看见最小成本-复杂度剪枝关于细节。新版本0.22。

  • max_samples–最大样本数: INT或Float,默认值=无

    如果引导为真,则从X中抽取样本数来训练每个基估计器。如果无(默认),则绘制X.shape[0]样本。如果int,则绘制max_samples样本。如果浮动,然后画max_samples * X.shape[0]样本。因此,max_samples应该在间隔内(0, 1).

ExtraForestClassifier参数列表:

参数列表与随机森林一致

这篇关于机器学习系列(三)决策树的集成算法--随机森林与极限森林--三个臭皮匠与完美主义者的较量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701435

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

SpringBoot集成Netty,Handler中@Autowired注解为空

最近建了个技术交流群,然后好多小伙伴都问关于Netty的问题,尤其今天的问题最特殊,功能大概是要在Netty接收消息时把数据写入数据库,那个小伙伴用的是 Spring Boot + MyBatis + Netty,所以就碰到了Handler中@Autowired注解为空的问题 参考了一些大神的博文,Spring Boot非controller使用@Autowired注解注入为null的问题,得到

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主