GBDT
首先GBDT是集成学习的一种,而且属于boosting家族。我们知道Bagging的思想比较简单,即每一次从原始数据中根据均匀概率分布有放回的抽取和原始数据大小相同的样本集合,样本点可能出现重复,然后对每一次产生的训练集构造一个分类器,再对分类器进行组合。常见的随机森林算法就是bagging的集成算法。
boosting的每一次抽样的样本分布都是不一样的。每一次迭代,都根据上一次迭代的结果,增加被错误分类的样本的权重,使得模型能在之后的迭代中更加注意到难以分类的样本,这是一个不断学习的过程,也是一个不断提升的过程,这也就是boosting思想的本质所在。
迭代之后,将每次迭代的基分类器进行集成。那么如何进行样本权重的调整和分类器的集成是我们需要考虑的关键问题。传统的Adaboost,利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。
GBDT同样也是一种迭代的方法,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同。
提升树
什么是残差
假设有一组数据 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) (x_1,y_1),(x_2,y_2),...,(x_n,y_n) (x1,y1),(x2,y2),...,(xn,yn)有一个模型 F ( x ) F(x) F(x),用这个模型去拟合这一批数据,拟合的过程中使得我们选择的损失函数最小,最终成功拟合后,假设得到 F ( x 1 ) = 1.2 , F ( x 2 ) = 2.5 F(x_1) = 1.2,F(x_2) = 2.5 F(x1)=1.2,F(x2)=2.5,但实际 y 1 = 1.1 , y 2 = 2.4 y_1 = 1.1,y_2 = 2.4 y1=1.1,y2=2.4,可以看得出虽然已经拟合的不错了,但和真实的还是有一点差距,如果想要进一步提升拟合的效果,一个最直观的做法就是使用一个新的学习器对上一批数据拟合过后的残差进一步拟合,也就是形成了一批新的数据$$ ( x 1 , y 1 − F ( x 1 ) ) , ( x 2 , y 2 − F ( x 2 ) ) , . . . , ( x n , y n − F ( x n ) ) (x_1,y_1-F(x_1)),(x_2,y_2-F(x_2)),...,(x_n,y_n-F(x_n)) (x1,y1−F(x1)),(x2,y2−F(x2)),...,(xn,yn−F(xn)),所以残差实际上真实值和预测值之差也就是 y − F ( x ) y-F(x) y−F(x)
加法模型
提升树模型可以表示为以决策树为基本学习器的加法模型:
f
(
x
)
=
f
M
(
x
)
=
∑
m
=
1
M
h
m
(
x
;
a
m
)
f(\mathbf{x})=f_{M}(\mathbf{x})=\sum_{m=1}^{M} h_{m}\left(\mathbf{x} ; a_{m}\right)
f(x)=fM(x)=m=1∑Mhm(x;am)
其中
h
m
(
x
;
a
m
)
h_{m}\left(\mathbf{x} ; a_{m}\right)
hm(x;am)表示的是第m棵决策树
M表示基学习器决策树的数量
a
m
a_m
am表示决策树的参数
加法模型求解
最直观的是迭代求解,也称为前向分布算法
首先确定初始提升树:
f
0
(
x
)
=
0
f_0(x) = 0
f0(x)=0
然后第m步的模型为:
f
m
(
x
)
=
f
m
−
1
(
x
)
+
h
(
x
;
a
m
)
f_m(x) = f_{m-1}(x)+h\left(\mathbf{x} ; a_{m}\right)
fm(x)=fm−1(x)+h(x;am)
然后经过经验封箱极小化(损失函数)来确定
a
^
m
=
argmin
a
m
∑
i
=
1
N
L
(
y
i
,
f
m
(
x
i
)
)
\hat{a}_{m}=\operatorname{argmin}_{a_{m}} \sum_{i=1}^{N} L\left(y_{i}, f_{m}\left(x_{i}\right)\right)
a^m=argminam∑i=1NL(yi,fm(xi)),其中L()为对应选择的损失函数
平方损失下的加法模型
损失函数是平方损失,
loss
=
∑
i
=
1
N
L
(
y
i
,
f
m
(
x
i
)
)
=
∑
i
=
1
N
(
y
i
−
f
m
−
1
(
x
i
)
−
h
m
(
x
i
;
a
m
)
)
2
\text {loss}=\sum_{i=1}^{N} L\left(y_{i}, f_{m}\left(x_{i}\right)\right)=\sum_{i=1}^{N}\left(y_{i}-f_{m-1}\left(x_{i}\right)-h_{m}\left(x_{i} ; a_{m}\right)\right)^{2}
loss=i=1∑NL(yi,fm(xi))=i=1∑N(yi−fm−1(xi)−hm(xi;am))2
可以看出
y
i
−
f
m
−
1
(
x
i
)
y_{i}-f_{m-1}\left(x_{i}\right)
yi−fm−1(xi)实质上就是上面说的残差,也可以看出来基于加法模型的提升树算法当前的分类器实质上是在拟合上一个分类器之后数据的残差。