GBDT算法

一、GBDT是什么

全称是:gradient boosting desicion tree 梯度提升决策树
决策树是基学习器是;
boosting: 利用集成学习技术中的boosting技术将多个决策树的结果融合起来得到一个效果强大的学习器
gradient: 梯度是一个函数上升或者下降最快的方向
梯度提升:每棵决策树都是去拟合上一棵决策树的预测结果跟目标值之间的目标函数的负梯度,朝着目标函数的梯度下降最快的方向来拟合一颗回归树

二、boosting是什么?

属于集成学习技术,将多个弱学习器的结果进行加权融合得到一个强学习器的技术;
boosting是提升的意思,一般都是一个迭代的过程,每一次新的训练过程都是为了改进上一次的结果。每一次迭代的样本是一样的,不同的是样本的权重或者目标值不同
boosting当前基学习器跟上一个基学习器是有关联的,当前决策树是对上一个决策树结果的优化提升,是去拟合上一个决策树的预测结果跟label之间的残差,最终通过将多个弱学习器的结果进行加权求和,可将弱学习器提升为强学习器
gradient boosting:每一次的计算时为了减少上一次的残差,而为了降低残差,我们可以在残差减少的方向也就是负梯度的方向建立一个新的模型。如果我们的模型能够让损失函数持续下降,则说明我们的模型在不断的改进,是在损失函数的负梯度上不断下降

boosting技术属于加法模型:
将每个样本作为树的叶子结点的得分进行加权求和
也就是说将历史所有决策树的结果进行加权求和

三:为啥用决策树作为基学习器?

原因是决策树是if-then的规则的组合,便于人的理解和解释;
决策树的运行效率高;
决策树对缺失值不敏感;
较少的特征工程;
决策树可以挖掘组合特征;
但是,决策树容易过拟合
集成学习可以降低模型的过拟合,跟决策树结合有天然的优势

四、如何降低决策树的过拟合:

1)需要设置决策树参数来降低过拟合:
限制树的最大深度;
限制叶子结点的最小权重(限制叶子结点的最小样本数)
增大中间节点分裂的阈值等
2)将多个决策树融合起来也可以降低过拟合
3)通过设置正则化参数,来降低决策树的叶子结点的总数和叶子结点的总得分来降低模型的复杂度

五、为啥gbdt既适用于分类也适用于回归?

既可以做分类问题也可以做回归问题,gbdt本质上是回归模型,每个叶子结点都会有一个预测得分,每棵树都是去拟合预测值跟目标值之间的残差为目的来建树的
分类是在回归的基础上,进行sigmoid函数或者softmax将分数映射到标签
分类的话是交叉熵损失函数;如果是回归的话是均方差损失函数

六、为啥gbdt对高纬特征效果不好,容易过拟合?

如果特征纬度较多,每个特征的分裂节点下的样本就会变少,导致统计结果不准确,模型的效果不好,容易过拟合;但是gbdt的正则化项的目的是限制树的叶子结点的个数,并未真正解决这个问题

七、叶子结点的得分是如何计算出来的?

首先根据分裂前后的信息增益选择最佳分裂点,然后根据树的结构来计算叶子结点的得分
(w = -G/ (H+r))
G:是叶子结点内样本的损失函数的一阶导数总和
H:是叶子节点内样本的损失函数的二阶导数总和
r : 正则化系数

八、xgboost在gbdt的基础上做了哪些改进?

1、借鉴了随机森林的思路,在训练基学习器时随机抽样样本和随机抽样特征,避免过拟合
2、增加了并行计算的能力,能够并行计算特征分裂结果
3、基学习器除了决策树外,也可以是LR等其他的学习器
4、目标函数除了参考一阶导数,还参考二阶导数,目标函数只要能够进行二阶可导就可以作为优化函数
5、对缺失值也做了处理
训练阶段:将缺失样本划分到收益较大的分支中
预测阶段:将缺失值默认划分到某个分支中
6、防止过拟合
增加了正则项,惩罚复杂的树结构

九、gbdt的步长的作用?怎样设置步长?

步长作用是使得在每次更新模型时,使得loss能够平稳的沿着负梯度的方向下降,不至于发生振荡
如果步长太大,在训练时容易发生振荡,使得模型学的不好,导致精度不高
而步长过小,导致训练的时长过长,迭代的次数增大,从而产生太多的树,湿的模型变得过于复杂,容易导致过拟合以及增加计算量,模型不容易收敛

如何设置步长?
1)策略:每一步的步长是固定的,一般设置较小的值
2)学习:因为在训练第K棵树时,前面的k-1棵树是已知的,而且求梯度的时候是利用前面k-1棵树来获取的,所以这时,就可以把步长当作一个变量来学习

十、gbdt中哪些部分可以并行?

1)计算每个样本的梯度
2)计算最佳特征的分裂点时
3)最后的预测过程,每个样本将之前的所有树的结果进行累加时

你可能感兴趣的:(xgboost算法,算法,决策树)