机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)

文章目录

  • 一、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

机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第1张图片

随着学习的积累从弱到强

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

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

2. 实现过程:

1.训练第一个学习器
机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第2张图片

2.调整数据分布
机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第3张图片

3.训练第二个学习器
机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第4张图片

4.再次调整数据分布
机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第5张图片

5.依次训练学习器,调整数据分布
机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第6张图片

6.整体过程实现
机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第7张图片

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

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

机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第8张图片

4. AdaBoost介绍

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

4.1 构造过程细节

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

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

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

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

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

      ε t = P ( h t ( x t ) ≠ y t ) \varepsilon _t = P(h_t(x_t)\neq y_t) εt=P(ht(xt)=yt)

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

      α t = 1 2 l n ( 1 − ε t ε t ) \alpha _t=\frac{1}{2}ln(\frac{1-\varepsilon _t}{\varepsilon _t}) αt=21ln(εt1εt)

    • (d) 根据投票权重,对训练数据重新赋权
      在这里插入图片描述

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

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

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

机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第9张图片

4.2 关键点剖析

如何确认投票权重?

如何调整数据分布?

机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第10张图片

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与切分点 s s s,求解机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第11张图片
      遍历特征 j j j,对固定的切分特征 j j j扫描切分点 s s s,选择使得上式达到最小值的对 ( j , s ) (j,s) (j,s).

    • (2)用选定的对 ( j , s ) (j,s) (j,s)划分区域并决定相应的输出值:机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第12张图片

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

    • (4)将输入空间划分为M个区域 R 1 , R 2 , , , , , , , , R M ​ ​ R_1, R_2, ,,,,,,, R_M​​ R1,R2,,,,,,,,RM, 生成决策树:在这里插入图片描述

2. Gradient Boosting: 拟合负梯度

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

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

提升树算法:

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

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

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


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

在提升树算法中,

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

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

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

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

  • 当采用平方损失函数时:
    机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第13张图片

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

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

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


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

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

那么负梯度长什么样呢?

  • 第t轮的第i个样本的损失函数的负梯度为:
    机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第14张图片

  • 此时不同的损失函数将会得到不同的负梯度,如果选择平方损失:
    在这里插入图片描述

  • 负梯度为:
    机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)_第15张图片

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

那么对于分类问题呢?

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

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

3. GBDT算法原理

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

GBDT算法:

  • (1)初始化弱学习器在这里插入图片描述

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

    • (a)对每个样本i=1,2,…,N,计算负梯度,即残差在这里插入图片描述

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

    • (c)对叶子区域j=1,2,…J计算最佳拟合值在这里插入图片描述

    • (d)更新强学习器在这里插入图片描述

  • (3)得到最终学习器在这里插入图片描述

你可能感兴趣的:(人工智能,集成学习,机器学习,boosting,人工智能)