文章目录

  • 一、Boosting
    • 1. 什么是boosting
    • 2. 实现过程:
    • 3. bagging集成与boosting集成的区别:
    • 4. AdaBoost介绍
      • 4.1 构造过程细节
      • 4.2 关键点剖析
      • 4.3 api介绍
  • 二、GBDT介绍
    • 1. Decision Tree:CART回归树
      • 1.1 回归树生成算法(复习)
    • 2. Gradient Boosting: 拟合负梯度
    • 3. GBDT算法原理

一、Boosting

1. 什么是boosting

随着学习的积累从弱到强

简而言之:每新加入一个弱学习器,整体能力就会得到提升

代表算法:Adaboost,GBDT,XGBoost,LightGBM

2. 实现过程:

1.训练第一个学习器

2.调整数据分布

3.训练第二个学习器

4.再次调整数据分布

5.依次训练学习器,调整数据分布

6.整体过程实现

3. bagging集成与boosting集成的区别:

  • 区别一:数据方面

    • Bagging:对数据进行采样训练;
    • Boosting:根据前一轮学习结果调整数据的重要性。
  • 区别二:投票方面
    • Bagging:所有学习器平权投票;
    • Boosting:对学习器进行加权投票
  • 区别三:学习顺序
    • Bagging的学习是并行的,每个学习器没有依赖关系;
    • Boosting学习是串行,学习有先后顺序
  • 区别四:主要作用
    • Bagging主要用于提高泛化性能(解决过拟合,也可以说降低方差)
    • Boosting主要用于提高训练精度 (解决欠拟合,也可以说降低偏差)

4. AdaBoost介绍

建议参考:https://panjinquan.blog.csdn.net/article/details/70995333,这里面的例题讲的非常好,步骤十分详细

4.1 构造过程细节

  • 步骤一:初始化训练数据权重相等,训练第一个学习器。

    • 该假设每个训练样本在基分类器的学习中作用相同,这一假设可以保证第一步能够在原始数据上学习基本分类器H1(x)H_1(x)H1​(x)

  • 步骤二:AdaBoost反复学习基本分类器,在每一轮m=1,2,...,Mm=1,2,...,Mm=1,2,...,M顺次的执行下列操作:

    • (a) 在权值分布为Dt​​D_t​​Dt​​​ 的训练数据上,确定基分类器;

    • (b) 计算该学习器在训练数据中的错误率:

      εt=P(ht(xt)≠yt)\varepsilon _t = P(h_t(x_t)\neq y_t)εt​=P(ht​(xt​)​=yt​)

    • (c) 计算该学习器的投票权重:

      αt=12ln(1−εtεt)\alpha _t=\frac{1}{2}ln(\frac{1-\varepsilon _t}{\varepsilon _t})αt​=21​ln(εt​1−εt​​)

    • (d) 根据投票权重,对训练数据重新赋权

      • 将下一轮学习器的注意力集中在错误数据上

    • 重复执行a到d步,m次;

  • 步骤三:对m个学习器进行加权投票

4.2 关键点剖析

如何确认投票权重?

如何调整数据分布?

4.3 api介绍

from sklearn.ensemble import AdaBoostClassifier

api链接:
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier

二、GBDT介绍

理论知识建议参考:https://blog.csdn.net/XiaoYi_Eric/article/details/80167968
例题参考:https://blog.csdn.net/zpalyq110/article/details/79527653

GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升树,在传统机器学习算法中,GBDT算的上TOP3的算法。想要理解GBDT的真正意义,那就必须理解GBDT中的Gradient Boosting 和Decision Tree分别是什么?


1. Decision Tree:CART回归树

首先,GBDT使用的决策树是CART回归树,无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树通通都是都是CART回归树。

  • 为什么不用CART分类树呢?

    • 因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。

对于回归树算法来说最重要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。

在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签是连续数值,所以再使用熵之类的指标不再合适,取而代之的是平方误差,它能很好的评判拟合程度

1.1 回归树生成算法(复习)

  • 输入:训练数据集D:
  • 输出:回归树f(x)f(x).
  • 在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
    • (1)选择最优切分特征jj与切分点sss,求解
      遍历特征jjj,对固定的切分特征jjj扫描切分点sss,选择使得上式达到最小值的对(j,s)(j,s)(j,s).

    • (2)用选定的对(j,s)(j,s)(j,s)划分区域并决定相应的输出值:

    • (3)继续对两个子区域调用步骤(1)和(2),直至满足停止条件。

    • (4)将输入空间划分为M个区域R1,R2,,,,,,,,RM​​R_1, R_2, ,,,,,,, R_M​​R1​,R2​,,,,,,,,RM​​​, 生成决策树:

2. Gradient Boosting: 拟合负梯度

梯度提升树(Grandient Boosting)是提升树(Boosting Tree)的一种改进算法,所以在讲梯度提升树之前先来说一下提升树。

先来个通俗理解:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。最后将每次拟合的岁数加起来便是模型输出的结果。

提升树算法:

  • (1)初始化f0(x)=0f_0(x)=0f0​(x)=0

  • (2)对m=1,2,…,M

    • (a)计算残差rmi=yi−fm−1(x),i=1,2,,,,,,,Nr_{mi}=y_i-f_{m-1}(x),i=1,2,,,,,,,Nrmi​=yi​−fm−1​(x),i=1,2,,,,,,,N
    • (b)拟合残差rmir_{mi}rmi​学习一个回归树,得到hm(x)h_m(x)hm​(x)
    • (c)更新fm(x)=fm−1+hm(x)f_m(x) = f_{m-1}+h_m(x)fm​(x)=fm−1​+hm​(x)
  • (3)得到回归问题提升树 fM(x)=∑m=1Mhm(x)f_M(x)=\sum_{m=1}^Mh_m(x)fM​(x)=∑m=1M​hm​(x)


上面伪代码中的残差是什么?

在提升树算法中,

  • 假设我们前一轮迭代得到的强学习器是:ft−1(x)f_{t-1}(x)ft−1​(x)

  • 损失函数是:L(y,ft−1(x))L(y,f_{t-1}(x))L(y,ft−1​(x))

  • 我们本轮迭代的目标是找到一个弱学习器:ht(x)h_t(x)ht​(x)

  • 最小化让本轮的损失:L(y,ft(x))=L(y,ft−1(x)+ht(x))L(y,f_t(x))=L(y,f_{t-1}(x)+h_t(x))L(y,ft​(x))=L(y,ft−1​(x)+ht​(x))

  • 当采用平方损失函数时:

  • 这里,r=y−ft−1(x)r=y-f_{t-1}(x)r=y−ft−1​(x)是当前模型拟合数据的残差(residual)。

  • 所以,对于提升树来说只需要简单地拟合当前模型的残差。

回到我们上面讲的那个通俗易懂的例子中,第一次迭代的残差是10岁,第二 次残差4岁,


当损失函数是平方损失和指数损失函数时,梯度提升树每一步优化是很简单的,但是对于一般损失函数而言,往往每一步优化起来不那么容易。

针对这一问题,Friedman提出了梯度提升树算法,这是利用最速下降的近似方法,其关键是利用损失函数的负梯度作为提升树算法中的残差的近似值

那么负梯度长什么样呢?

  • 第t轮的第i个样本的损失函数的负梯度为:

  • 此时不同的损失函数将会得到不同的负梯度,如果选择平方损失:

  • 负梯度为:

此时我们发现GBDT的负梯度就是残差,所以说对于回归问题,我们要拟合的就是残差。

那么对于分类问题呢?

  • 二分类和多分类的损失函数都是logloss。

本文以回归问题为例进行讲解。

3. GBDT算法原理

上面两节分别将Decision Tree和Gradient Boosting介绍完了,下面将这两部分组合在一起就是我们的GBDT了。

GBDT算法:

  • (1)初始化弱学习器

  • (2)对m=1,2,...,Mm=1,2,...,Mm=1,2,...,M有:

    • (a)对每个样本i=1,2,…,N,计算负梯度,即残差

    • (b)将上步得到的残差作为样本新的真实值,并将数据(xi,rim),i=1,2,..N(x_i,r_{im}), i=1,2,..N(xi​,rim​),i=1,2,..N作为下棵树的训练数据,得到一颗新的回归树fm(x)f_{m} (x)fm​(x)其对应的叶子节点区域为Rjm,j=1,2,...,JR_{jm}, j =1,2,..., JRjm​,j=1,2,...,J。其中JJJ为回归树t的叶子节点的个数。

    • (c)对叶子区域j=1,2,…J计算最佳拟合值

    • (d)更新强学习器

  • (3)得到最终学习器

机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)相关推荐

  1. 【机器学习】集成学习之boosting AdaBoost

    Boosting Boosting策略在上一篇中有提到过,这里再说一遍. Boosting策略的核心思想就是对错误分类的样本投入更大的关注.采用的是加法模型和向前分步算法,向前分步算法中的每一步都会改 ...

  2. 机器学习之集成学习(Boosting算法、Bagging算法、Stacking算法)总结

    1.集成学习概述 机器学习分为有监督学习算法和无监督学习算法.在有监督学习中,我们的目标是学习一个稳定的且各方面都表现较好的模型.但是,实际情况往往不理想,有时我们只能得到多个在某些方面表现比较好的& ...

  3. 【机器学习】集成学习:Boosting、Bagging 和 Stacking

    文章目录 一.集成学习概述 二.Boosting 三.Bagging 四.Stacking 借鉴 一.集成学习概述 基分类器可能是同构的,也可能是异构的. 基分类器应该"好而不同" ...

  4. 机器学习:集成学习之boosting

    1.Boosting介绍 Boosting体现了提升的思想: 每一个训练器重点关注前一个训练器不足的地方进行训练 通过加权投票的方法得出最后的预测结果 2.Boosting和Bagging对比 区别一 ...

  5. 【机器学习】集成学习(Boosting)——XGBoost算法(理论+图解+公式推导)

  6. 【机器学习】集成学习知识点总结一

    集成学习算法概述 严格意义上来说,集成学习算法不算是一种机器学习算法,而更像是一种优化手段或策略,它通常是结合多个简单的弱机器学习算法,去做更可靠的决策.有人把它称为机器学习中的"屠龙刀&q ...

  7. 【机器学习】集成学习投票法:投票回归器(VotingRegressor) 投票分类器(VotingClassifier)

    前言 投票回归器和投票分类器都属于集成学习.在[机器学习]集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法.投票法和学习法.sklearn.ensemble库中的Voting Clas ...

  8. 【机器学习】集成学习—Boosting—GBM(Gradient Boosting Machine)解析

    [机器学习]集成学习-Boosting-GBM(Gradient Boosting Machine)解析 文章目录 [机器学习]集成学习-Boosting-GBM(Gradient Boosting ...

  9. 集成学习--基础概述

    集成学习 1.集成学习概述 2.集成学习之基学习器 3.Bagging 4.Boosting 5.结合策略 5.1 均值法 5.2 投票法 5.3 学习法 参考资料 1.集成学习概述 简单来说,集成学 ...

最新文章

  1. mysql rand()产生随机整数范围及方法
  2. mysql教程日志_mysql日志文件的详细说明
  3. linux c不占用cpu的延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
  4. JSP内置对象(request、session、application)
  5. 对比表示学习必知的几种训练目标
  6. Spring Boot——基于OkHTTP的GitHub第三方登录DEMO
  7. 注意| .NET开发者大会防疫须知 !
  8. nginx 实用配置问题总结
  9. Ubuntu 14.04下安装Redis报错:“You need tcl 8.5 or newer in order to run the Redis test”问题解决
  10. stopping hbasecat: /tmp/hbase-elastic-master.pid: 没有那个文件或目录
  11. CCF202006-4 1246【矩阵快速幂】(100分题解链接)
  12. WGS84 与 北京54 坐标系互转
  13. H5 - 实现半颗星评分功能
  14. InputArray和OutputArray的那些事
  15. StopWatch简单使用
  16. P3084 [USACO13OPEN]照片Photo(差分约束)
  17. html5 video 隐藏全屏按钮,如何隐藏HTML5视频标签的全屏按钮?
  18. Django--Models
  19. 复现腾讯表格识别解析| 鹅厂技术
  20. 先行发生原则-Happends-Before

热门文章

  1. 多目标跟踪MOT16_Benchmark数据集下载-------------送人玫瑰,手留余香
  2. 《软件工程》网上书店项目需求分析
  3. nyoj 586-疯牛(简单二分题)
  4. 双拼自然码如何使用辅助码
  5. 2014-梦工厂回忆录
  6. 从中国平安收购深发展说起
  7. 经典简约表格简历-Word简历可编辑下载
  8. Unity3d-MMO游戏优化经验分享沙龙总结
  9. A Unified MRC Framework for Named Entity Recognition阅读笔记
  10. 强强联手 华云数据与南湖实验室签署战略合作协议