本人第一次看到提升方法时,也是一脸懵逼;但是时隔一个寒假,当我为春招恶补机器学习知识时,第二次看见提升方法,顿时有了“拨开云雾见青天”的感觉;古人"温故而知新"诚不欺我。下面是我对常见的四种提升方法的一点理解。

本文来自于本人的知乎的机器学习爱好者专栏

作者:超爱学习

原文链接:https://zhuanlan.zhihu.com/p/59751960

1.AdaBoost

AdaBoost全称为Adaptive Boosting,中文名称叫做自适应提升算法;虽然名字听起来给人一种高大上的感觉,但其实背后的原理并不难理解。什么叫做自适应,就是这个算法可以在不同的数据集上都适用,这个基本和废话一样,一个算法肯定要能适应不同的数据集。提升方法是指:分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类器的性能。

AdaBoost和提升树、残差树、GDBT之间也有这十分密切的联系,可以毫不夸张的说,明白了AdaBoost的原理之后,理解提升树、残差树和GDBT树也是十分的容易。

1.1原理推导

推导就是copy李航的《统计学习方法》推导方法,我会适当的做一些解释以便大家理解。

训练数据如下:  ,其中  ,  。最后我们要得到分类器 ,其中  为分类器的个数,每一次训练我们都获得一个基分类器  ,  是每个基训练器的权重,也就是说每个基分类器说话的分量。我们看最后的分类器,他就是结合多个不同基分类器的意见,集百家之长,最终输出结果。

那么每个基分类器的权重就显得十分重要了,那么这个权重是如何确定的呢,AdaBoost是这么考虑的,如果一个基分类器的准确率高,那么它的权重就会更高一点,反之权重就会较低。

通常我们认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二类分类学习方法。现在有出现了三个新名词:

(1)加法模型

这个就和字面的意思一样,一个函数是由多个基函数累加而成 

其中  是每个基函数的系数,  是每个基函数的参数,  就是一个基函数了。

假设一个基函数为  ,那么一个加法模型就可以写成:  。

(2)前向分步算法

在给定训练数据以及损失函数  的情况下,加法模型的经验风险最小化即损失函数极小化问题如下:

这个问题直接优化比较困难,前向分步算法解决这个问题的思想如下:由于我们最终的分类器其实加法模型,所以我们可以从前向后考虑,每增加一个基分类器,就使损失函数的值更小一点,逐步的逼近最优解。这样考虑的话,每一次计算损失函数的时候,我们只需要考虑当前基分类器的系数和参数,同时此次之前基分类器的系数和参数不受此次的影响。算法的思想有点类似梯度下降,每一次都向最优解移动一点。

因此我们可以得到前向分布算法的步骤(参考《统计学习方法》p144):

输入:

训练数据集  ,损失函数 

基分类器 。

输出:加法模型 

(1)初始化 

(2)对 

(a)极小化损失函数

得到参数  。

(b)更新 

(3)得到加法模型 

(3)指数损失函数

指数损失函数的形式如下

如果前向分步算法采用指数函数做为损失函数,那么其就为AdaBoost算法。

经过  轮的迭代操作,我们得到了  :

在第  轮迭代得到  和 

使用前向分布算法我们的目标是使指数损失函数的值最小

上式可以改写成为

其中  。由于  变换不依赖  。因此与最小化无关。接下来我们就要最小化  。

假设  为我们所求,先考虑  。由于  为正整数,所以要最小化  此式,只要让  的值相等的尽可能的多。因为当两者值域为-1和+1。当两者取值相等时,无论  的取何值,指数都会小于0。也就是说,此时我们可以先不考虑  的取值,只考虑  。

很明显可以得出 

在已知  的情况下,我们求  。

求导之后,可得

其中 

上面几个公式的推导如果不清楚,可以私信我。

1.2AdaBoost算法步骤

有了上述推导,,我们很自然的就可以写出AdaBoost算法的步骤

输入:训练数据如下:  ,其中  ,  。

输出:最后我们要得到分类器 。

(1)初始化训练数据的权值分布

(2)对 

(a)使用具有权值分布  的训练数据集学习,得到基本分类器  。

(b)计算  在训练集上的分类误差率

(c)计算的系数

(d)根据前  次得到的结果,更新权值:

其中  ,是一个规范化因子,用于归一化。

(3)构建最终的分类器 。

2.提升树

提升树和AdaBoost之间的关系就好像编程语言中对象和类的关系,一个类可以生成多个不同的对象。提升树就是AdaBoost算法中基分类器选取决策树桩得到的算法。

用于分类的决策树主要有利用ID3和C4.5两种算法,我们选取任意一种算法,生成只有一层的决策树,即为决策树桩。

3.残差树

我们可以看到AdaBoost和提升树都是针对分类问题,如果是回归问题,上面的方法就不奏效了;而残差树则是针对回归问题的一种提升方法。其基学习器是基于CART算法的回归树,模型依旧为加法模型、损失函数为平方函数、学习算法为前向分步算法。

提升树模型可以表示为  。

什么叫做残差,比如小明的年龄是10岁,第一次我们的残差树拟合的值为6,那么第二次我们拟合的目标值为10-6=4。

采用平方误差损失函数时,我们每一次学习的是上一次残差,损失函数为

其中为残差。每次通过拟合残差值,那么最终就可以得到以以个很好的模型。

4.GDBT

GDBT中文名称叫做梯度提升树。其基本原理和残差树类似,基学习器是基于CART算法的回归树,模型依旧为加法模型、学习算法为前向分步算法。不同的是,GDBT没有规定损失函数的类型,设损失函数为  。前向加法算法的每一步都是拟合损失函数的负梯度

如果一个函数到达极小值,那么其梯度值一定为零;当函数没有到达最小值的时候,我们每次都选择梯度的反方向走,这样可以最快的到达极小值。这也就是GDBT的思想。

参考:

1.《统计学习方法》李航

2.机器学习算法GBDT的面试要点总结-上篇 - ModifyBlog - 博客园

https://www.cnblogs.com/ModifyRong/p/7744987.html

3.梯度提升树(GBDT)原理小结 - 刘建平Pinard - 博客园

https://www.cnblogs.com/pinard/p/6140514.html

备注:公众号菜单包含了整理了一本AI小抄非常适合在通勤路上用学习

往期精彩回顾那些年做的学术公益-你不是一个人在战斗适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册备注:加入本站微信群或者qq群,请回复“加群”加入知识星球(4500+用户,ID:92416895),请回复“知识星球”

喜欢文章,点个在看

一文弄懂AdaBoost、提升树、残差树、GDBT相关推荐

  1. 【一文弄懂】优先经验回放(PER)论文-算法-代码

    [一文弄懂]优先经验回放(PER)论文-算法-代码 文章目录 [一文弄懂]优先经验回放(PER)论文-算法-代码 前言: 综合评价: 继续前言唠叨 per论文简述: 参考博客: 背景知识 A MOTI ...

  2. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  3. 一文弄懂各种loss function

    有模型就要定义损失函数(又叫目标函数),没有损失函数,模型就失去了优化的方向.大家往往接触的损失函数比较少,比如回归就是MSE,MAE,分类就是log loss,交叉熵.在各个模型中,目标函数往往都是 ...

  4. 一文弄懂EnumMap和EnumSet

    文章目录 简介 EnumMap 什么时候使用EnumMap EnumSet 总结 一文弄懂EnumMap和EnumSet 简介 一般来说我们会选择使用HashMap来存储key-value格式的数据, ...

  5. 面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型

    面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型 前言 一.索引 1.1作用 1.2特点 1.3使用 1.3.1创建索引 1.3.2删除索引 1.3.3查看表中的索引 1.3.4查看SQ ...

  6. 并发、并行、同步、异步、进程,线程、串行、并行?一文弄懂八大概念

    并发.并行.同步.异步.进程,线程.串行.并行?一文弄懂八大概念 参考博文:并发.并行.串行.同步.异步的区别? java多线程详解(并发,并行,同步) 文章目录 并发.并行.同步.异步.进程,线程. ...

  7. 一文弄懂 Diffusion Model

    什么是 Diffusion Model 一.前向 Diffusion 过程 Diffusion Model 首先定义了一个前向扩散过程,总共包含T个时间步,如下图所示: 最左边的蓝色圆圈 x0 表示真 ...

  8. 一文弄懂神经网络中的反向传播法

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...

  9. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法--BackPropagation 最近在看深度学习的东 ...

最新文章

  1. 干货 | XGBoost在携程搜索排序中的应用
  2. mysql联合查询查询语句_mysql 各种联合查询语句
  3. c#中获取服务器IP,客户端IP以及Request.ServerVariables详细说明
  4. 远程仓库---添加远程库
  5. jboss与nginx_JBoss BRMS与JasperReports进行报告
  6. 160 - 6 aLoNg3x.1
  7. Android Service完全解析
  8. weblogic-开发模式转变为生产模式生产模式转变为开发模式
  9. listview android:cacheColorHint,android:listSelector属性作用
  10. SQL Server 检测到基于一致性的逻辑 I/O 错误
  11. Windows Server 林功能级别详解
  12. 20道常见的kafka面试题以及答案
  13. Kubernetes集群服务发现之Service资源ClusterIP/NodePort/HeadLiness/ExternallName类型详解(二十八)
  14. SPI驱动之南瑞NRSEC3000加密芯片驱动开发总结
  15. 线性回归的从零开始实现
  16. mt7615 配置选项介绍
  17. 绝地求生游戏怎么转到计算机上玩,绝地求生大逃杀吃鸡游戏提示tslgame.exe 应用程序错误解决方法...
  18. 阿里巴巴计划今日中午推出1688.com批发网
  19. FastCopy和ExtremeCopy同盘移动文件速度测试比较评测
  20. Matlab 2015b 激活失效后,重新激活

热门文章

  1. C#开启线程的四种方式
  2. Scala, Groovy, Clojure, Jython, JRuby and Java ----我们的工作语言
  3. 亚马逊记AWS(Amazon Web Services)自由EC2应用
  4. 8.Struts2类型转换器
  5. 苹果 App Store 申请和管理相关知识
  6. 2021年常用中药相关数据库介绍
  7. 转载:概率与梳理统计||数学基础
  8. linux错误说未声明,如何在Linux 32位计算机上解决REG_EIP未声明(在此函数中首次使用)错误?...
  9. 老生常谈,正确使用memset
  10. 位掩码(BitMask)