提升方法(boosting)——从Adaboost到XGboost

0. 写在前面

本章不会有数学推导,只是为了理清提升方法的发展历程,从Adaboost到提升树到GBDT再到XGboost。围绕几个问题:

1.从模型的缺点或者改良的角度去思考为什么引出一个模型

2.从面试的角度思考面试官会在意一些什么

1. 提升方法的源头

1.1 提升方法的主要思想

核心思想:“三个臭皮匠顶个诸葛亮

历史上,Kearns和Valiant首先提出了“强可学习(strongly learnable)”和“弱可学习(weakly learnable)”的概念。指出:在概率近似正确(probably approximately correct,PAC)学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。非常有趣的是Schapire后来证明强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的

这样一来,问题便成为,在学习中,如果已经发现了“弱学习算法”,那么能否将它提升(boost)为“强学习算法”。大家知道,发现弱学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。关于提升方法的研究很多,有很多算法被提出。最具代表性的是AdaBoost算法(AdaBoost algorithm)。

对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升方法就是从弱学习算法出发反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数提升方法都是改变训练数据得概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器

1.2 提升方法需要回答的两个核心问题

(1)在每一轮如何改变训练数据的权值或者概率分布 ?

(2) 如何将弱分类器组合成一个强分类器 ?


2. Adaboost算法

Let me ask you a question first: 为什么要学习Adaboost算法 ?

The answer is : 为了学习XGboost及其变种

2.1 回答两个核心问题

第一个问题:在每一轮如何改变训练数据的权值或者概率分布

Adaboost的做法是:提高那些被前一轮弱分类器分类错误的样本的权值,降低那些被正确分类的权值。这样一来,那些没有得到正确分类的数据,由于其权值加大二收到后一轮的弱分类器的更大关注

第二个问题: 如何将弱分类器组合成一个强分类器

Adaboost的做法是:采取加权多数表决的方法。具体的,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用;减小分类误差率大的若分类器的权值,使其在表决中起较小的作用。

2.2 Adaboost原理

对于公式的推导,我不想在本博客花费太大功夫,请参考其他博客。
原理解析和公式推导

Adaboost算法本意是为了做分类问题,但是也可以解决回归问题。顺便说一句,该算法在目前工业界已经淘汰了,之所以学习它,是因为它是XGboost的基础。

换句话说,只有正确的看待每个时期,模型的优缺点,才能更好的掌握目前优秀模型算法本身

2.3 Adaboost其他需要注意的知识

一、Adaboost算法的训练误差分析(模型为什么有效)

具体的数学原理可以参考:AdaBoost算法的训练误差分析

你只需要知道,通过训练误差分析,我们得到一些结论:

Adaboost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类误差率。(该结论由两个定理支持)

Adaboost的训练误差是以指数速率下降的(该结论由上面的两个定理的推论支持)

你可以这么去理解“为什么每增加一个基本分类器(基函数),分类误差就会变小?”因为损失函数是个固定形式,当你新添加进来一个基函数,你相当于利用上一轮训练剩下的误差去训练新的基函数(每个基函数去拟合误差的能力是有限的),这样,随着基函数的数目越大,模型就越精确。

二、Adaboost算法的可解释性

可以认为Adaboost算法是模型为加法模型、损失函数(策略)为指数函数、学习算法为前向分步算法时的二分类学习方法。换句话说,Adaboost算法是前向分步加法算法的特例

三、Adaboost每次迭代的计算过程

根据损失函数学习基函数G(x)➡计算分类误差率em➡计算基函数的系数αm➡计算样本权重w(注意做好归一化)


3. 提升树

提升树被认为是统计学习中性能最好的方法之一—— 李航《统计学习方法》,2012

值得一提的是,提升树和Adaboost的核心区别是:Adaboost并没有指明基本分类器是什么,而提升树很明显指明基本分类器为决策树。

接下来介绍的提升树其实是提升方法更具体的例子,具体在它的基本分类器使用的是决策树。对于分类问题,它使用分类分类树(ID3,C4.5,CART分类树);对于回归问题,它使用CART回归树模型。

3.1 模型三要素

模型加法模型(基函数的线性组合)

策略最小化经验风险损失(确定下一棵决策树的参数)

算法贪心算法(根据决策树里边的知识 )

下面讨论针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方损失的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题

3.2 利用提升树解决分类问题

这个问题,简单,我们只需要讲Adaboost算法中的基函数变为二类的决策树即可,可以说这时候的提升树是Adaboost算法的特殊情况。

3.3 利用提升树解决回归问题

基本分类器:CART回归树
损失函数:平方损失
记住一句话:每一个CART回归树拟合的是上一轮的残差。
你可能对红色的这句话有点费解:在Adaboost算法中,其实每一个基函数(基本分类器)拟合的是上一轮的误差,而在提升树中,我们具体化了损失函数以及基本分类器,这时误差变为了残差
在这里插入图片描述


4. 梯度提升树(Gradient Boosting Decision Tree,GBDT)

以下几个概念等价:

① Gradient Boosting Decision Tree,GBDT

② Gradient boosted regression tree,GBRT

③ Gradient Boosting machine ,GBM

4.1 从提升树到梯度提升树

提升树利用 加法模型 与 前向分步算法 实现学习的优化过程。

提升树存在的问题:当损失函数是平方损失和指数损失函数时,每一步优化是很简单的。但对于一般损失函数而言,往往每一步优化并不那么容易。

梯度提升树的引出:针对这一问题,Freidman提出了梯度提升树(gradient boosting)算法

4.2 GBDT的求解思想和过程

  1. GBDT的求解思想其实是利用了负梯度是函数下降最快的方向,其关键是利用损失函数的负梯度在当前模型的值。

  2. GBDT的求解过程其实就是 梯度下降 在 函数空间 中的优化过程
    如何理解残差和梯度之间的关系
    无论损失函数是什么形式,每个决策树拟合的都是负梯度。准确的说,不是用负梯度代替残差,而是当损失函数是均方损失时,负梯度刚好是残差,残差只是特例。
    在这里插入图片描述

4.3 回归提升树每个CART回归树为什么没有权重

Adaboost是利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。虽然GBDT也是Boosting家族的成员,但是却和Adaboost有很大的不同。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时GBDT是基于残差学习的算,没有AdaBoost中的样本权重的概念。


5. XGboost(eXtreme Gradient Boosting)

5.1 XGboost的原理解析

说了,这篇博客不会涉及大量公式推导,具体原理请参考:XGboost原理

5.2 XGboost与GBDT的核心区别

① 求解预测值 y ^ \hat y y^的方式不一样

GBDT中预测值是由所有弱分类器上的预测结果的求和,其中每个样本上的预测结果就是样本所在的叶子节点的均值。而XGBT中的预测值是所有弱分类器上的叶子权重直接求和得到,计算叶子权重是一个复杂的过程。

② 正则项的存在

在普通的梯度提升树GBDT中,我们是不在目标函数中使用正则项的。但XGB借用正则项来修正树模型天生容易过拟合这个缺陷,在剪枝之前让模型能够尽量不过拟合。

③ 使用的梯度信息

在GBDT中,我们利用负的一阶梯度值作为标签,利用这些负梯度信息去拟合一个CART回归树;而在XGboost中,我们不仅使用了一阶梯度信息而且使用了二阶梯度信息,但是使用这些梯度信息是为了化简公式,而真正在求解树的时候使用了求极值的方法(求导)。

④ 基本分类器的种类

在GBDT中,基本分类器只能是CART回归树,而在XGboost中,我们的基本分类器可以是任何模型,例如线性模型等(一般我们都会优先考虑树模型)

5.3 为什么XGboost如此之快

  • 在数据集规模很大的时候使用近似算法
  • 使用Column Block,在特征粒度上并行计算
  • 是从CSC存储数据,建立索引,在构建树的时候,对数据集只需要一次排序
  • 缓存优化,使用缓冲区提高cpu的chche命中率

具体原因可以参考原著

参考链接

6. XGboost一些调参经验

https://blog.csdn.net/weixin_44441131/article/details/109036857

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InceptionZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值