当前位置 博文首页 > dastu的博客:学习笔记 ——GBDT(梯度提升决策树)

    dastu的博客:学习笔记 ——GBDT(梯度提升决策树)

    作者:[db:作者] 时间:2021-09-19 19:22

    一.前言

    GBDT(Gradient Boosting Decision Tree)梯度提升决策树,通过多轮迭代生成若干个弱分类器,每个分类器的生成是基于上一轮分类结果来进行训练的。

    GBDT使用的也是前向分布算法,这一点和Adaboost类似,但不同的是,GBDT的弱分类器一般为Cart回归树(Adaboost一般不做限制)。这里之所以用回归树的原因是GBDT是利用残差逼近,是累加选择,这就和回归输出的连续值不谋而合(不同于RF采用的是投票的方式)。

    在GBDT中,前一轮学习到的弱学习器为 h t ? 1 ( x ) h_{t-1}(x) ht?1?(x),组合得到的强学习器为 f t ? 1 ( x ) f_{t-1}(x) ft?1?(x),其损失函数为 L ( y , f t ? 1 ( x ) ) L(y,f_{t-1}(x)) L(y,ft?1?(x)).我们这一轮学习第t个弱学习器的目标是: m i n L ( y , f t ? 1 ( x ) + h t ( x ) ) min L(y,f_{t-1}(x)+h_t(x)) minL(y,ft?1?(x)+ht?(x)).如何去找到这个 h t ( x ) h_t(x) ht?(x),GBDT采用的是负梯度拟合

    二.负梯度拟合

    在GBDT的论文中,采用损失函数的负梯度来拟合残差。从而可以获得一个新的弱分类器(Cart树)。在第t轮的第i个样本的负梯度为: r t i = ? ? L ( y , f t ? 1 ( x i ) ) ? f t ? 1 ( x i ) r_{ti}=-\frac{ \partial L(y,f_{t-1}(x_i))}{\partial f_{t-1}(x_i)} rti?=??ft?1?(xi?)?L(y,ft?1?(xi?))?
    那么,基于负梯度,我们可以得到新的训练数据: ( x i , r t i ) (x_i,r_{ti}) (xi?,rti?).用这一部分数据训练Cart树,得到一个新的弱分类器。

    假设这个Cart树共有J个叶子节点,对应的叶子节点区域为 R t j , j = 1 , 2 , . . . , J R_{tj},j=1,2,...,J Rtj?,j=1,2,...,J.可以根据Cart树的生成规则知道,第j个叶子节点的输出为: c t j = arg ? min ? ∑ r ∈ R t j L ( y r , f t ? 1 ( x j ) + c ) c_{tj}=\mathop{\arg \min} \sum_{r \in R_{tj}} L(y_r,f_{t-1}(x_j)+c) ctj?=argminrRtj??L(yr?,ft?1?(xj?)+c)

    所以,此次迭代的决策树拟合的函数为: h t ( x ) = ∑ j = 1 J c t j I ( x ∈ R t j ) h_t(x)=\sum_{j=1}^Jc_{tj}I(x\in R_{tj}) ht?(x)=j=1J