当前位置 博文首页 > dastu的博客:学习笔记 ——GBDT(梯度提升决策树)
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?=argminr∈Rtj?∑?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=1∑J