Boosting知识点整理(AdaBoost,GBDT,XGBoost)

本文深入解析Boosting算法,包括AdaBoost、GBDT和XGBoost的原理、损失函数、正则化及调参策略。探讨如何通过组合弱学习器构建强学习器,减小偏差,提高模型泛化能力。

关于Boosting

概括

减小偏差的角度,将若干个弱学习器按照一定的策略整合成一个强学习器(针对弱项逐个击破,不断降低偏差);
问题:
(1)泛化误差的分解(噪声,方差,偏差),各自代表什么含义?;
(2)bagging vs boosting?(减小方差vs减小偏差);
(3)为什么bagging可以提高泛化能力?(证明公式)
(4)为什么boosting可以提高泛化能力?
(5)如何“好而不同”(样本,特征,输出,参数)

四个基本原则

对于任意的boosting算法模型,四个基本点牢牢抓住:
(1)如何计算学习误差率?
(2)如何得到弱学习器权重?
(3)如何更新弱学习器样本权重?
(4)如何结合多个弱学习器?

关于AdaBoost(分类回归)

基本原理

基于上一个弱学习器的学习结果,对其中分类错误的样本,在下一个弱学习器中,提高他们的权重;

基本步骤

(1)计算当前弱学习器的错误率alpha(分类:指数损失; 回归:绝对损失,平方损失,指数损失);
(2)基于alpha计算当前弱学习器的权重w;
(3)
3.1 基于alpha以及样本判断结果更新下一轮学习器中样本的权重;
3.2 样本权重规范化;
(4)将所有弱学习器整合(加法模型);在这里插入图片描述

损失函数

分类:指数损失
回归:绝对损失,平方损失,指数损失

正则化

  1. 调节学习率
    未正则化模型:
    hk(x)=hk-1(x) + alphak * estimatork
    含正则化项目的模型
    hk(x)=hk-1(x) + V * alphak * estimatork
    其中,V为学习率(步长)
    注意:要达到同样的学习效果,意味着正则化后的模型需要更多的迭代次数(n_estimators)
  2. 调节树参

缺陷

对异常值敏感,如果异常样本获得权重会影响模型效果

调参

常调:n_estimators + learning_rate, 两者同时调
loss: 只针对回归,选择不同损失函数(linear:绝对误差 square:平方误差 exponetial:指数误差)计算各个样本相对误差,最后计算加权损失

关于GBDT(Cart分类回归)

GBDT:gradient boosting decision tree 梯度提升树,注意只能用Cart作为基学习器

基本原理

(1)利用当前学习器来ht(x)拟合上一步得到的学习器ft-1(x)预测样本损失函数对预测值的负梯度目的是使得加入当前学习器ht(x)后当所有样本代价函数能够最快速地减小;
ps:特例
当模型中,损失函数取“平方损失”时,GBDT可以理解为:
利用当前学习器来ht(x)拟合上一步得到的学习器ft-1(x)预测样本 残差目的是使得加入当前学习器ht(x)后当所有样本代价函数能够最快速地减小
(2)GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

损失函数

分类:指数损失,对数似然损失
回归:绝对损失,平方损失,huber损失(异常值鲁棒),quantile损失(异常值鲁棒)

正则化

  1. 调节学习率(步长)
    未正则化:
    hk(x) = hk-1(x) + estimatorsk
    正则化后:
    hk(x) = hk-1(x) + V * estimatorsk
    其中:V为学习率,表示步长
  2. 调节树参
    (1) 子采样比例正则化
    针对树参,调节subsample(小于1),使得每一棵树信息有所差异,减小方差
    (2) 正则化剪枝

问题:过拟合如何处理?

调参

常用参数

(1)boost参:

  1. n_estimators,learning_rate
  2. loss:
    分类:deviance(对数似然损失),exponential(指数损失)
    回归:ls(均方差),lad(绝对损失),huber,quantile(分位数损失) ,后两种针对噪音较多情况,调节alpha值

(2)树参:
3. max_depth:
4. max_features:
5. min_samples_leaf:
6. min_samples_split:
7. subsample: 注意此处为非放回抽样,子采样比例
(3)全局参:
random_state:

调参步骤

n_estimators
max_depth + min_samples_split,
min_samples_split + min_samples_leaf
subsample
n_estimators + learning_rate

优缺点

优点:
(1)灵活处理连续值,缺失值
(2)准确度高
(3)使用健壮的损失函数,对异常值鲁棒性强(如huber损失和quantile损失函数)
缺点:
无法并行

关于XGBoost

基本原理

基于GBDT改进:
(1)算法本身优化:成本函数加入正则化项,基于对成本函数2阶泰勒展开同时计算样本划分规则以及树叶节点输出值;
(2)运行优化:允许并行(问题:允许什么计算并行?);
(3)增加了对缺失值的处理,增强鲁棒性:分别加入左子树与右子树,并选择最优处理方式;

损失函数

回归:MSE(均方差)
二分类:对数损失函数
多分类:softmax函数

正则化

树参:
学习率:
正则化项:

调参

常用参数

boosting参:

  1. n_estimators + learning_rate
  2. objective(损失函数):
    回归:均方差
    分类:对数损失
    多分类:softmax

树参:
3. max_depth:
4. min_child_weight: 类似min_samples_leaf
5. gamma: 分裂节点时评估指标增益的最小阈值(可以理解为类似信息增益的阈值)
6. subsample: 注意此处为非放回抽样,子采样比例
7. ==colsample_bytree/colsample_bylevel/colsample_bynode:==列抽样
8. reg_alpha/reg_lambda: l1,l2正则化系数

全局参数:
9. random_state:
10. n_jobs: 注意xgboost可以并行!!

调参步骤

n_estimators
min_child_weight + gamma
n_estimators + learning_rates

过拟合如何处理?

### 回答1: AdaboostGBDTXGBoost和LightGBM都是机器学习中常用的集成学习算法。 Adaboost是一种迭代算法,通过不断调整样本权重和分类器权重,逐步提高分类器的准确率。 GBDT(Gradient Boosting Decision Tree)是一种基于决策树的集成学习算法,通过不断迭代,每次训练一个新的决策树来纠正前面树的错误,最终得到一个强分类器。 XGBoost是一种基于GBDT的算法,它在GBDT的基础上引入了正则化和并行化等技术,使得模型更加准确和高效。 LightGBM是一种基于GBDT的算法,它采用了基于直方图的决策树算法和互斥特征捆绑技术,使得模型训练速度更快,占用内存更少,同时也具有较高的准确率。 ### 回答2: adaboost(Adaptive Boosting) 是一种基于不同权重的弱分类器的算法,它通过迭代的方式来逐步提高分类器的准确性。在每轮迭代中,它会调整训练样本的权重,使得前一轮分类错误的样本在当前轮得到更多的关注。最终,通过组合这些弱分类器来构建一个强分类器。其优点在于不易过拟合,但需要耗费大量的时间来训练和预测。 gbdt(Gradient Boosting Decision Tree) 是一种基于决策树的集成学习算法,它通过迭代的方式来提升分类器的准确性。基于训练样本和实际输出的误差进行梯度下降,将它们作为下一个分类器的训练数据。每个分类器都在之前所有分类器得到的残差的基础上进行训练,并且将它们组合成一个最终的分类器。在训练过程中,为了避免过拟合,可以限制决策树的深度等参数,并采用交叉验证等技术。gbdt可以处理缺失数据、不平衡分类和高维度数据等问题,但需要注意过拟合的问题。 xgboost(Extreme Gradient Boosting) 是一种基于决策树的集成学习算法,它在gbdt的基础上引入了正则化项和精细的特征选择,进一步提高了分类器的准确性和效率。通过Hessian矩阵对损失函数进行二阶泰勒展开,引入正则化约束,可以优化损失函数,并通过交叉验证等技术选择最优的超参数。xgboost还支持GPU加速,提高模型训练的速度和效率,但需要更多的计算资源。xgboost在分类、回归和排名任务中表现优异,但需要注意过拟合和计算量的问题。 lightgbm是微软旗下一款高效、快速、分布式的梯度提升框架,也是一种基于决策树的集成学习算法,定位在处理高维度数据和大规模数据集上。lightgbm采用了GOSS(Gradient-based One-Side Sampling)技术和EFB(Exclusive Feature Bundling)技术对数据进行处理,大大减少数据的内存占用和训练时间。同时,还支持并行计算和GPU加速,提高了模型的速度和效率。lightgbm在排序、分类、回归等任务中表现出色,只是对离群值敏感,需要对数据进行预处理。 ### 回答3: Adaboost,Gradient Boosting Decision Tree (GBDT)XGBoost和LightGBM都是常见的集成学习算法,它们用于提高模型在复杂数据集上的准确度,并处理复杂数据集上遇到的问题。 Adaboost是一种迭代算法,每次迭代它使用提高错误分类样本的加权值,并降低正确分类样本的加权值,以便让前一个弱分类器无法捕捉并由后续分类器学习。Adaboost弱分类器快速训练和预测,且不需要太多超参数调整,但是它倾向于过度拟合数据,并且实力可能不足以解决大型数据集的问题。 GBDT使用决策树作为弱分类器,将每一棵树的预测结果作为下一棵树的预测输入,最后对所有树的预测结果进行加权求和。GBDT可以很好地处理线性和非线性问题,但是它倾向于过度拟合数据,需要进行精细调整参数,并且需要较长时间的训练时间。 XGBoost结合了GBDT的优势和树的强大性质。它采用了一些优秀的技术,如Boosting树算法,Shrinkage,Column Sampling和Pruning Nodes,以提高模型的性能和降低过拟合风险。XGBoost可以处理大规模数据集和高维数据集,并且速度较快,但需要的资源较多,如内存、计算能力和高质量的数据集。 LightGBM是XGBoost的新一代版本,采用了GOI(Gradient-based One-side Sampling)算法和Histogram-based Gradient Boosting方法来加快训练速度和降低内存占用。GOI算法通过对数据进行一侧采样来提高训练速度,而直方图梯度提升方法将节点分裂建模为一个直方图分桶过程,以减少节点分裂的计算成本。LightGBM对大数据集的处理能力很强,速度相对较快,但对于处理小数据集的效果可能不明显。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值