GBDT相关

Boosting算法族:

boosting方法通过分步迭代(stage-wise)的方式来构建模型,在迭代的每一步构建的弱学习器都是为了弥补已有模型的不足

1、AdaBoost:

通过给已有模型预测错误的样本更高的权重,使得先前的学习器做错的训练样本在后续受到更多的关注的方式来弥补已有模型的不足

2、梯度提升方法--以GBDT(Gradient Boosting Decison Tree)为代表

在迭代的每一步构建一个能够沿着梯度最陡的方向降低损失(steepest-descent)的学习器来弥补已有模型的不足

现实中,用得最多的基学习器是决策树。

Q:为什么梯度提升方法倾向于选择决策树(通常是CART树)作为基学习器呢?

A:1、易于理解,可解释性强,预测速度快。

2、不用做特征标准化,可以处理缺失数据,也可以不用关心特征间是否相互依赖

3、决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分

 

 

总结一下GBDT的学习算法:
1. 算法每次迭代生成一颗新的决策树
2. 在每次迭代开始之前,计算损失函数在每个训练样本点的一阶导数gi和二阶导数hi
3. 通过贪心策略生成新的决策树,通过等式(7)计算每个叶节点对应的预测值
4. 把新生成的决策树ft(x)添加到模型中:\hat{y}_{i}^{t}=\hat{y}_{i-1}^{t}+f_{t}\left ( x_{i} \right )

 

其中贪心策略指的是:
1. 从深度为0的树开始,对每个叶节点枚举所有的可用特征
2. 针对每个特征,把属于该节点的训练样本根据该特征值升序排列,通过线性扫描的方式来决定该特征的最佳分裂点,并记录该特征的最大收益(采用最佳分裂点时的收益)
3. 选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,把该节点生长出左右两个新的叶节点,并为每个新节点关联对应的样本集
4. 回到第1步,递归执行到满足特定条件为止

即:遍历所有特征及其样本数据中的特征值,计算收益,从而找到最佳分裂方式

分裂的收益:

假设当前节点记为CC,分裂之后左孩子节点记为LL,右孩子节点记为RR,则该分裂获得的收益定义为当前节点的目标函数值减去左右两个孩子节点的目标函数值之和:Gain=Obj_{C}-Obj_{L}-Obj_{R},具体地,根据等式(8)可得:

Gain=\frac{1}{2}[\frac{G_{L}^{2}}{H_{L}+\lambda }+\frac{G_{R}^{2}}{H_{R}+\lambda }-\frac{\left ( G_{L}+G_{R} \right )^{2}}{H_{L}+H_{R}+\lambda }]

其中,−γ项表示因为增加了树的复杂性(该分裂增加了一个叶子节点)带来的惩罚。

 

Q:so,last question,以上在用的都是回归树,那GBDT是如何完成分类任务的呢?

A:我们在训练的时候,是针对样本 X 每个可能的类都训练一个回归树(可以理解为类-回归树,即有M类就生成M个回归树,每个回归树只负责自己的类,因为输入虽然都一样,但是目标值y是不同的),其目标值(样本X属于某一类的概率值)y=0(为假)或1(为真)

对得出的每一棵树的结果再套一个softmax,算出每棵树的概率值,进而能计算残差,循环迭代。

模型训练完成后,对于新的样本数据,分别计算所有回归树的值,再套一个softmax,算出属于该类的概率值

 

https://blog.csdn.net/yangxudong/article/details/53872141#%E5%8A%A0%E6%B3%95%E6%A8%A1%E5%9E%8Badditive-model

 

你可能感兴趣的:(机器学习及统计学习)