常用决策树集成模型Random Forest、Adaboost、GBDT详解

常用的集成学习策略

在之前的文章我有介绍过常用的基本决策树模型ID3、C4.5、CART算法,其中提到了一个关于基本决策树模型的缺点,那就是决策树模型学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的,这种算法不能保证建立全局最优的决策树,Random Forest 引入随机能缓解这个问题。

那么什么是Random Forest呢?其实这正是今天首先要介绍的集成学习框架的一种,常见的集成学习框架有三种:Bagging,Boosting 和 Stacking。三种集成学习框架在基学习器的产生和综合结果的方式上会有些区别,其中Stacking用的不是特别多,仅做简单了解即可。

下面我会详细介绍Bagging和Boosting的集成思想和对应的集成框架,但是不包括它们的推导,至于它们的公式推导我会在会另外用一篇博文进行详细介绍。

1.Bagging

Boosting是一簇可将基学习器提升为强学习器的算法。每个基学习器都会对训练集进行有放回抽样得到子训练集,比较著名的采样法为 0.632 自助法。每个基学习器基于不同子训练集进行训练,并综合所有基学习器的预测值得到最终的预测结果。Bagging 常用的综合方法是投票法,票数最多的类别为预测类别。

2.Boosting

Boosting 训练过程为阶梯状,基模型的训练是有顺序的,每个基模型都会在前一个基模型学习的基础上进行学习,最终综合所有基模型的预测值产生最终的预测结果,用的比较多的综合方式为加权法。

3.Stacking

Stacking 是先用全部数据训练好基模型,然后每个基模型都对每个训练样本进行的预测,其预测值将作为训练样本的特征值,最终会得到新的训练样本,然后基于新的训练样本进行训练得到模型,然后得到最终预测结果。

总结:

上面介绍的三种集成学习思想,都可以改善基本决策树模型的贪心算法得到的不是最优解的问题。并且我们可能常听到这样一种说法:

  • bagging是减少方差(variance)
  • boosting是减少偏差(bias)

**偏差:**可以简单的理解为“ 准度 ”,与目标值得距离越远偏差越大。减小偏差需要增加模型得参数,但又易过拟合。
**方差:**可以简单得理解为“ 稳度 ”,分散程度越高方差越大(叶子节点多)。减小方差需要加少模型参数,但又易欠拟合。

需要注意得是,我们常说的集成学习的基模型与弱模型本不是一回事。集成学习的基模型可能是“弱模型”也可能是“强模型”。

  • 通常来说弱模型是偏差高(在训练集上准确度低)方差小(防止过拟合能力强)的模型。
  • 强模型是指偏差低,方差高的模型,也就是准确度高,但是可能过拟合的模型

在这里插入图片描述

综上所述:
对于 Bagging 来说,整体模型的偏差与基模型近似,而随着模型的增加可以降低整体模型的方差,故其基模型需要为强模型;(偏差低,方差高)准确率高,但是可能有一点过拟合。

对于 Boosting 来说,整体模型的方差近似等于基模型的方差,而整体模型的偏差由基模型累加而成,故基模型需要为弱模型。(偏差高,方差低)准确率低,但是并没有过拟合。

常用的集成框架

1.Random Forest

Random Forest(随机森林)是 Bagging 阵容的一员,很多人一听到随机森林就把重点放在“森林”两个字上面了,简单地认为随机森林就是很多棵决策树组合投票,却忽略了森林前面的重要修饰“随机”。

集成思想:

随机森林是 Bagging 的扩展变体,它在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括 RF 包括四个部分:

  1. 随机选择样本(放回抽样);
  2. 随机选择特征;
  3. 构建决策树;
  4. 随机森林投票(平均)。

优点:

  1. 随机的思想,使得每课树即使不剪枝也不容易过拟合;
  2. 在数据集上表现良好,相对于其他算法有较大的优势;
  3. 易于并行化,在大数据集上有很大的优势;
  4. 能够处理高维度数据,不用做特征选择。

2.Adaboost

AdaBoost(Adaptive Boosting,自适应增强)是Boosting阵容的一员,其自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

集成思想:

  1. 初始化训练样本的权值分布,每个样本具有相同权重;
  2. 训练弱分类器,如果样本分类正确,则在构造下一个训练集中,它的权值就会被降低;反之提高。用更新过的样本集去训练下一个分类器;
  3. 将所有弱分类组合成强分类器,各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重。

Adaboost 模型是加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题,为了防止 Adaboost 过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。对于前面的弱学习器的迭代。

加法模型:最终的强分类器是由若干个弱分类器加权平均得到的。

前向分布学习算法:算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。

优点

  1. 分类精度高;
  2. 可以用各种回归分类模型来构建弱学习器,非常灵活;
  3. 不容易发生过拟合。

缺点

  • 对异常点敏感,异常点会获得较高权重。

3.GBDT

GBDT(Gradient Boosting Decision Tree,梯度提升决策树)是Boosting阵容的一员,它是一种迭代的决策树算法,该算法由多棵决策树组成。GBDT 是被公认的泛化能力较强的算法。

集成思想:

GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的梯度(如果损失函数最小均方损失函数(MSE),则负梯度就是残差值)基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。

GBDT主要由三部分组成:1.Gradient Boosting(GB)也就是梯度提升、2.Decision Tree(DT,这里用的是回归树)、3.Shrinkage(一个重要思想)

回归树 Regression Decision Tree

GBDT中的弱分类器选择的是CART回归树,而并不是分类树(虽然调整后也可以分类)。对于分类树而言,其值加减无意义(如性别),而对于回归树而言,其值加减才是有意义的(如说年龄)22岁=16岁+4岁+2岁。GBDT 的核心在于累加所有树的结果作为最终结果,所以 GBDT 中的树都是回归树,不是分类树,这一点相当重要。

回归树在分枝时会穷举每一个特征的每个阈值以找到最好的分割点,衡量标准是最小化均方误差。

注意:GBDT用于分类问题仍然使用CART回归树,使用softmax进行概率映射,然后对概率的残差进行拟合

梯度迭代 Gradient Boosting

让损失函数沿着梯度方向的下降。这个就是GBDT中GB的核心。GBDT 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。(如果损失函数使用的是平方误差损失函数,则这个损失函数的负梯度就可以用残差来代替,以下所说的残差拟合,便是使用了最小均方损失函数**(MSE)**)

Boosting思想:
GBDT 的 Boosting 不同于 Adaboost 的 Boosting,GBDT 的每一步残差计算其实变相地增大了被分错样本的权重,而对与分对样本的权重趋于 0,这样后面的树就能专注于那些被分错的样本。

缩减 Shrinkage

Shrinkage 的思想认为,每走一小步逐渐逼近结果的效果要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它并不是完全信任每一棵残差树。

加上Shrinkage之前
在这里插入图片描述
加上Shrinkage之后
在这里插入图片描述
Shrinkage 不直接用残差修复误差,而是只修复一点点,把大步切成小步。本质上 Shrinkage 为每棵树设置了一个 weight,累加时要乘以这个 weight,当 weight 降低时,基模型数会配合增大。

优点:

  1. 可以自动进行特征组合,拟合非线性数据;
  2. 可以灵活处理各种类型的数据。

缺点:

  • 对异常点敏感。

参考文献

https://zhuanlan.zhihu.com/p/86263786

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdu1213 How Many Tables-并查集

Problem Description Today is Ignatius’ birthday. He invites a lot of friends. Now it’s dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to …

redis spring 切面缓存_今日份学习: Spring中使用AOP并实现redis缓存?

笔记在Spring中如何使用AOP?Spring是如何切换JDK动态代理和CGLIB的?spring.aop.proxy-target-classtrue (在下方第二个链接中,原生doc中提到过)Aspect生命切面BeforeAfterAroundRedis广泛使用的内存缓存常见的数据结构:StringListSetHashZSetRedis为什么…

开源网站云查杀方案,搭建自己的云杀毒。

最近公司的一个客户被勒索病毒攻击了,可悲的是,客户的文件附件太多而且大,没有做双机热备的功能。当客户发现病毒后,还第一时间格式化了服务器。那叫一个惨!!!!!初步分析…

下一个更大元素 leetcode-496

给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位…

最简单的并查集模板

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int a[N];void init_set() { //初始化for (int i 1; i < N; i)a[i] i; }int find_set(int x) { //查找return x a[x] ? x : find_set(a[x]); }void union_set(int x, int y) …

linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法

思想&#xff1a;系统启动的时候生成一个文件&#xff0c;正常关机的时候则删除这个文件&#xff0c;则可以根据系统开机时有没有那个文件来判断是不是非正常关机。步骤&#xff1a;在/etc/rc.d/init.d/下编程脚本。判断是否正常关机&#xff0c;和生成文件的脚本&#xff1a;t…

二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现

二叉树 二叉树&#xff08;Binary tree&#xff09;是树形结构的一个重要类型。对于二叉树的基础知识这里不做过多介绍&#xff0c;下面我们直接介绍二叉树的遍历方式和如何用python代码去实现二叉树的遍历。 二叉树的遍历&#xff08;重点&#xff09; “前”、“中”、“后…

五分钟了解数据库事务隔离

前言什么是事务隔离呢&#xff1f;们知道&#xff0c;关系型数据基本都支持事务&#xff0c;事务具备四个特性&#xff0c;分别是&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、…

fusionsphere读音_hydroxyapatite

全部Conclusion The absorbable coral hydroxyapatite is a good bone tissue engineering scaffold.结论可吸收性珊瑚羟基磷灰石具有促进骨髓基质细胞表达成骨细胞表型、合成细胞外基质的功能,是良好的细胞载体.互联网Phase changes and structural stability of hydroxyapati…

基于 Redis 实现 CAS 操作

基于 Redis 实现 CAS 操作Intro在 .NET 里并发情况下我们可以使用 Interlocked.CompareExchange 来实现 CAS &#xff08;Compare And Swap&#xff09; 操作&#xff0c;在分布式的情景下很多时候我们都会使用 Redis &#xff0c;最近在改之前做的一个微信小游戏项目&#xff…

数据结构-堆(heap)最大堆、最小堆的相关操作和实战

堆&#xff08;heap&#xff09; 堆的概念&#xff1a; 是完全二叉树&#xff1b;每个节点 > 或 < 孩子节点。 条件二中分别对应&#xff1a;最大堆和最小堆。 最大堆&#xff1a;最大值为堆顶元素&#xff0c;每个节点 > 孩子节点。 最小堆&#xff1a;最小值为堆…

无法载入增效工具_山东省 智能工具箱 智能工具管理 工具管理企业数字化管理...

我们日常工具管理中难免会遇到东西找不到&#xff0c;工具丢失无法落实到人&#xff0c;工具买回来没有及时维护导致生锈等&#xff0c;工具生命周期不细致无法及时送检&#xff0c;导致设备参数不达标等一些细微问题&#xff0c;在工具管理上可能是小问题&#xff0c;但是设备…

Asp.Net Core 中间件应用实战中你不知道的那些事

一、概述这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例&#xff0c;不讲述其工作原理&#xff0c;如果需要了解工作原理的同学&#xff0c; 可以点击查看以下两篇解读文章&#xff1a;•Asp.Net Core EndPoint 终结点路由工作原理解读•ASP.NET CORE 管道模…

递归算法(一)递归概念与思路

递归的概念 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的…

stm32f103振镜_二维振镜激光扫描教学演示装置及其实现方法

二维振镜激光扫描教学演示装置及其实现方法【专利摘要】本发明公开二维振镜激光扫描教学演示装置及其实现方法&#xff0c;该装置包括二维振镜扫描模块、图像轨迹记录仪和上位机人机界面&#xff1b;上位机人机界面主要用于教学演示图形或文字的绘制以及串口通信的设置&#xf…

洛谷 P1706 P1036 -小试牛刀

题目1&#xff1a; 题目描述 输出自然数 1 到 n 所有不重复的排列,即 n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n1∼n1∼n 组成的所有不重复的数字序列&#xff0c;每行一个序列。 每个数字保留 5 个…

理解ASP.NET Core中的中间件

中间件是ASP.NET Core的一个重要特点&#xff0c;ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求&#xff0c;完成都是由于中间件&#xff0c;那么它究竟是怎么一回事呢&#xff1f;一、理解中间件ASP.NET Core的一个主要特点是中间件&#xff08;Middleware&#xf…

XGBoost-原理推导(上)

XGBoost简介 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是华盛顿大学博士陈天奇创造的一个梯度提升&#xff08;Gradient Boosting&#xff09;的开源框架。至今可以算是各种数据比赛中的大杀器&#xff0c;被大家广泛地运用。 之前的文章我已经介绍了GBDT&a…

redis深度历险_Redis的数据结构(内存具体怎么优化的)

上一篇我们讲解了Redis中SDS的组成以及优势&#xff0c;这一篇我们讨论下Redis中的Hash数据类型是怎么构成的呢&#xff1f;Java中存在HashMap和HashTable的数据类型。而Hash的数据结构可以近似于HashTable&#xff0c;依据数组链表的形式构成。在Redis中&#xff0c;Hash在元素…

.NET Core开发实战(第19课:日志作用域:解决不同请求之间的日志干扰)--学习笔记...

19 | 日志作用域&#xff1a;解决不同请求之间的日志干扰开始之前先看一下上一节的代码// 配置的框架 var configBuilder new ConfigurationBuilder(); configBuilder.AddCommandLine(args); configBuilder.AddJsonFile("appsettings.json", optional: false, reloa…