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

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

写在前面: 我是「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

相关文章

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅