python提升算法1_GBDT到XGBOOST

本文探讨了如何通过改进随机森林的启发式,如子树权重调整和样本加权,提升GBDT模型性能。接着深入解析了梯度提升算法(GBDT)和XGBoost的数学推导,比较了两者在正则化、学习率和并行计算方面的特点。XGBoost尤其强调了二阶导数的应用、列抽样和快速收敛。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python提升算法1_GBDT到XGBOOST

1 随机森林的启发

随机森林构建的子树(决策树)分别采样建立,每个样本的权重值是一样的,属性随机,子树之间相对独立。针对随机森林,我们提取以下问题:
1).假定已经训练得到了m-1颗决策树,是否可以通过现有样本和已经构建子树表现的信息,对第m颗子树的构建进行改造呢?
2).各个子树组成随机森林后,最后的投票过程每个子树的权重一样,是否可以根据各个子树的表现情况进行调整呢?
3).模型训练时,对于容易分类正确的样本与不容易分类正确的样本是否可以调节权重?

2.提升

如果一个问题存在弱分类器,则可以通过提升的办法得到强分类器。由弱分类器得到强分类器,主要通过样本加权、分类器加权来实现。

2.1 梯度提升(Gradient boosting)

提升是一个机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升(Gradient boosting)。

梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐
逼近局部极小值。这种在函数域的梯度提升观点对机器学习的很多领域有深刻影响。

给定输入向量x和输出变量y组成的若干训练样本(x1,y1),(x2,y2),…,(xn,yn),目标是找到近似函数F(x) ,使得损失函数L(y,F(x))的损失值最小。
L(y,F(x))的典型定义为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wMAeDo5K-1652526164031)(attachment:image.png)]

假定最优函数为 F*(x)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHwbu10s-1652526164034)(attachment:image.png)]

假定F(x)是一族基函数fi(x)的加权和

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7gTAnVqR-1652526164035)(attachment:image-2.png)]

随机梯度提升Stochastic gradient boosting

每次迭代都对伪残差样本采用无放回的降采样,用部分样本训练基函数的参数。令训练样本数占所有伪残差样本的比例为f;f=1即为原始模型:推荐0.5≤f≤0.8。较小的f能够增强随机性,防止过拟合,并且收敛的快。降采样的额外好处是能够使用剩余样本做模型验证。

2.2 提升算法推导

梯度提升方法寻找最优解F(x),使得损失函数在训练集上的期望最小。方法如下:

1).给定常函数F0(x):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-50wJnHP2-1652526164036)(attachment:image.png)]
2).以贪心的思路扩展得到Fm(x):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vh0qQWt7-1652526164037)(attachment:image-2.png)]

贪心法在每次选择最优基函数f时仍然困难,使用梯度下降的方法近似计算,将样本带入基函数f得到f(x1),f(x2),…,f(xn),从而L退化为向量L(y1,f(x1
)),L(y2,f(x2)),…,L(yn,f(xn))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7puZ2Lxe-1652526164037)(attachment:image.png)]

上式中的权值γ为梯度下降的步长,使用线性搜索求最优步长:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-potZO1Ou-1652526164038)(attachment:image.png)]

总结下就是:
1).初始给定模型为常数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EqL4R4M5-1652526164038)(attachment:image.png)]
2).对于m=1到M 计算伪残差
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-icJ272rc-1652526164039)(attachment:image-2.png)]
使用数据 计算拟合残差的基函数fm(x),计算步长
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IBljF3ak-1652526164040)(attachment:image-3.png)]
更新模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7LLGaAW0-1652526164041)(attachment:image-4.png)]

2.3 梯度提升决策树GBDT

2.3.1 数理推导

梯度提升的典型基函数即决策树(尤其是CART):在第m步的梯度提升是根据伪残差数据计算决策树tm(x)。令树tm(x)的叶节点数目为J,即树tm(x)将输
入空间划分为J个不相交区域R1m,R2m,…,RJm,并且决策树tm(x)可以在每个区域中给出某个类型的确定性预测。使用指示记号I(x),对于输入x, tm(x) 为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPhcuBoV-1652526164041)(attachment:image.png)]

其中,bjm是样本x在区域Rjm的预测值。使用线性搜索计算学习率,最小化损失函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rVaFdXDK-1652526164042)(attachment:image.png)]

进一步:对树的每个区域分别计算步长,从而系数bjm被合并到步长中,从而:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-59RZtIPF-1652526164044)(attachment:image.png)]

2.3.2 参数设置和正则化

对训练集拟合过高会降低模型的泛化能力,需要使用正则化技术来降低过拟合。
1).对复杂模型增加惩罚项,如:模型复杂度正比于 叶结点数目或者叶结点预测值的平方和等。用于决策树剪枝
2).叶结点数目控制了树的层数,一般选择4≤J≤8。
3).叶结点包含的最少样本数目,防止出现过小的叶结点,降低预测方差
4).限定梯度提升迭代次数M:增加M可降低训练集的损失值,但有过拟合风险,

2.3.3 GBDT总结

1).函数估计本来被认为是在函数空间而非参数空间的数值优化问题,而阶段性的加性扩展和梯度下降手段将函数估计转换成参数估计。
2).损失函数是最小平方误差、绝对值误差等,则为回归问题;而误差函数换成多类别Logistic似然函数,则成为分类问题。
3).对目标函数分解成若干基函数的加权和,是常见的 技术手段:神经网络、径向基函数、傅立叶/小波变换、SVM都可以看到它的影子。

3.XGBOOST

3.1 数学推导

目标函数:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PqGjA91u-1652526164045)(attachment:image.png)]

考虑使用二阶导信息,根据Taylor展式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tnGX4aNL-1652526164045)(attachment:image.png)]

令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RYekeMd6-1652526164046)(attachment:image.png)]

得到:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dPMQNYtc-1652526164046)(attachment:image.png)]

目标函数计算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oc8IBVEb-1652526164047)(attachment:image.png)]

目标函数继续化简

定义:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GWnHKiry-1652526164048)(attachment:image-3.png)]

得到:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lS9vNW0f-1652526164048)(attachment:image.png)]

对w求偏导得:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQPpicAx-1652526164049)(attachment:image-2.png)]

回代入目标函数得:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6ACAxs3-1652526164050)(attachment:image.png)]

3.2XGBoost总结

使用二阶导函数

相对于传统的GBDT,XGBoost使用了二阶信息,可以更快的在训练集上收敛,可以更为精准的逼近真实的损失函数

列采样

借鉴了随机森林的原理,支持行抽样(subsample)和列抽样(colsample_bytree, colsample_bylevel).行抽样指的是随机森林里对数据集进行有放回抽样,列抽样指的是对特征进行随机选择,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
XGBoost在训练的过程中给出各个特征的评分,从而表明每个特征对模型训练的重要性。

学习率

xgboost在进行完一次迭代后,会将叶子节点的权重乘上学习速率,主要是为了削弱每棵树的影响,让后面有更大的学习空间

降采样

XGBoost利用梯度优化模型算法, 样本是不放回的,如果一个样本连续重复抽出,梯度来回踏步,这显然不利于收敛。XGBoost支持子采样, 也就是每轮计算可以不使用全部样本。

并行训练

XGBoost的并行,并不是说每棵树可以并行训练,XGB 本质上仍然采用boosting思想,每棵树训练前需要等前面的树训练完成才能开始训练。

XGBoost的并行,指的是特征维度的并行:在训练之前,每个特征按特征值对样本进行预排序,并存储为Block结构,在后面查找特征分割点时可以重复使用,而且特征已经被存储为一个个block结构,那么在寻找每个特征的最佳分割点时,可以利用多线程对每个block并行计算。

正则项

XGBoost的目标函数加了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过拟合。

处理缺失值

XGBoost模型的一个优点就是允许特征存在缺失值。对缺失值的处理方式如下:
在特征k上寻找最佳 split point 时,不会对该列特征 missing 的样本进行遍历,而只对该列特征值为 non-missing 的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找 split point 的时间开销。
在逻辑实现上,为了保证完备性,会将该特征值missing的样本分别分配到左叶子结点和右叶子结点,两种情形都计算一遍后,选择分裂后增益最大的那个方向(左分支或是右分支),作为预测时特征值缺失样本的默认分支方向。
如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子结点。

损失函数

XGBoost支持自定义损失函数,只要损失函数一阶、二阶可导。

速度快

XGBoost的实现中使用了并行/多核计算,因此训练速度快;同时它的原生语言为C/C++,这是它速度快的实践原因。

参考引用

机器学习之Xgboost详解
终于有人说清楚了–XGBoost算法
XGBoost详解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雪龙无敌

你的鼓励是我们一起前进的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值