boosting 提升方法实际采用的是加法模型和前向分步算法   【之前在讲 Adaboost 时,讲过这两个算法,参考我的博客

 

提升树 boosting tree

以决策树为基学习器的提升方法称为提升树,提升树可以解决分类和回归问题,分类问题以分类树为基学习器,回归问题以回归树为基学习器,决策树均为二叉树

提升树模型可以表示为

M为决策树个数,T(x, θ) 为决策树模型, θ为决策树参数

 

提升树算法采用前向分步算法,初始提升树 f0(x)=0,第m步提升树

fm-1(x) 是当前模型,相当于是个已知数,模型误差可以表示为

由于 fm-1(x) 是个常数,y也是常数,最小化误差就是求 T(x, θ) 中的 最优θ,也就是只求第 m 步的最佳模型,所以是一种贪心算法

 

不同类型的提升树有不同的损失函数,回归问题就是均方误差,分类问题为指数损失函数

 当yy相同时,损失函数趋近于0

 

回归提升树

由于分类树比较常见,所以这里主要讲回归问题。

 

回归树

假设数据样本为

,x为输入空间,输入空间为实数域, 【回归问题中 x 一般为连续值,处理方式类似于决策树处理连续值】

将 x 划分成 J 个互不相交的区域,R1、R2、R3...RJ,每个区域的输出为 cj,决策树可表示为

 

具体理解如图

可以看到 J 就是叶节点的个数,也表示了决策树的复杂度,只分裂一次的树称为 树桩

 

回归提升树

依然采用前向分步算法

1. 初始提升树 f0(x)=0

2. 第 m 步训练决策树 T(x, θ),得到该步的提升树

需要最优化 θ

 

回归问题损失函数为 均方差

r 就是当前模型的残差,所以 提升树 只需学习当前模型的残差,这使得算法变得简单

3. 输出组合模型

 

回归提升树算法总结

输入:

输出:

1)初始提升树 f0(x)=0

2)对 m = 1,2,3...M

3)计算残差  r= yi - fm-1(x)

4)拟合fm-1的残差 r 学习一个回归树 T(x, θ)    【注意,每步要更新 f(x),f(x)是前n步的和,而不是计算单步的残差,损失

5)更新

6)输出回归提升树

 

实例

x 1 2 3 4 5 6 7 8 9 10
y 5.56 5.70 5.91 6.40 6.80 7.05 8.90 8.70 9.00 9.05

 

 

 

 

以树桩作为基学习器。

1. 求 T1(x) ====> 将样本集按x分成2分,分别求平均即可,那如何分呢?

目标函数为 

 当 x 属于 R1时,y_predict = c1,误差 y-c1,同理,最终得到上面的损失函数,当损失函数最小时,其对应的划分方式就是最佳划分方式。

 

下面就是按决策树处理连续值的方式

划分点s为 [1.5  2.5  3.5  4.5  5.5  6.5  7.5  8.5  9.5]

R1 = {x|x<s};R2={x|x>s}

对叶子结点求平均即可求得 c1,c2

经计算,当 s = 1.5 时,c1 = 5.56,c2 = 7.50,

同理可得到所有划分的损失

s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5  
m(s) 15.72 12.07 8.36 5.78 3.91 1.93 8.01 11.73 15.74  

 

 

 

 

可见,当 s = 6.5 时,损失最小,为1.93,此时 c1 = 6.24,c2 = 8.91,回归树为

 

当前残差

x 1 2 3 4 5 6 7 8 9 10
y -0.68 -0.54 -0.33 0.16 0.56 0.81 -0.01 -0.21 0.09

0.14

 

 

 

 

当前损失

 

第一步只是个弱学习器,可见效果不怎么地

 

2. 求 T2(x) ====> 此时只需学习  T1(x) 的残差

方法同第一步,回归树为

 

当前损失

注意损失是 f2(x) 的损失,残差也是  f2(x) 的残差,而不是 T2(x) 的损失,所以先计算 f2(x)

 损失为 0.79,比1.93要小。

 

3. 继续求 Tm(x) ====> 此时只需学习  fm-1(x) 的残差

比如学习 6 个回归树,则最终模型为

 损失为 0.17,比之前要小很多。

 

现在我们需要考虑几个问题

1. 上述基学习器 只是 一层,如果是2层、3层,那么基学习器如何表示?会相当麻烦

2. 多层的基学习器又如何相加呢?更麻烦

3. 提升树的基学习器通过最小化均方差来学习,如果损失函数不是 均方差,又如何?

为了解决上述问题,有人提出了改进算法。

 

梯度提升树 GBDT

GBDT 也可以解决回归和分类问题,有些地方把 回归 GBDT 叫做 GBRT。

GBDT 损失函数可以有多种,在 sklearn 中,回归问题损失函数有4种:ls 平方损失,lad 绝对损失,huber huber损失,quantile:分位数损失,分类问题损失函数有2种:exponential 指数损失,deviance 对数损失

 

GBDT 利用梯度下降的近似方法,其 关键是利用 损失函数的负梯度 在当前模型的值 作为 回归提升树中残差的近似

第 m 轮第 i 个样本的损失函数的负梯度,得到 (xi,rmi) 作为新数据,拟合一个回归树

 

具体算法如下

输入:,损失函数 L(y,f(x))

输出:回归树组合模型F(x)

1)初始化提升树 ====> 估计一个使得损失函数最小的常数c,他只有根节点,如果loss是mes,一般取均值,如果loss是绝对损失,一般取中位数

2)for m = 1,2...M  ====> 训练M个基学习器

3)for i = 1,2...N ====> 遍历N个样本,计算残差  【为什么带负号,因为f(x)是自变量,在损失函数中它前面有个减号,求导时相当于复合函数,得乘以-1,前面带个负号,刚好和这个-1抵消,r=y-f(x)】

4)拟合一棵cart树,对x进行划分,建立决策树,得到第m棵树的叶节点区域 Rmj,j=1,2..J (j表示叶节点的个数)

5)for j=1,2...J ====> 遍历 J 个叶节点,利用线性搜索,估计每个叶节点的值,使得损失函数最小化  

c=βf(x),决策树只是输出了 f(x),但是 β 是多少,需要根据 min loss 求解,最终把 c 作为叶子结点的输出

6)更新模型

7)输出回归树

 

实例

数据如下:5个样本,4个训练,1个测试,特征为年龄、体重,标签为身高

编号年龄(岁)体重(kg)身高(m)(标签值)
0 5 20 1.1
1 7 30 1.3
2 21 70 1.7
3 30 60 1.8
4 25 65 预测

 

 

 

 

 

 

 

 

 

参数设置

迭代次数:n_trees = 5

树的深度:max_depth = 3

学习率:lr = 0.1

损失函数:mes

 

1. 初始化提升树 ,loss为mes,取均值即可  f0(x) = 1.475

也可以正规求,估计一个使得损失函数最小的常数,loss = Σ(y_true - y_pred)2,要最小,求导,Σ(y_true - y_pred)=Σy_true - Σy_pred=Σy_true - Ny_pred

令导数等于0,y_pred = Σy_true / N,即均值

2. 计算  f0(x) 的近似残差

编号 真实值 f0(x) 残差
0 1.1 1.475 -0.375
1 1.3 1.475 -0.175
2 1.7 1.475 0.225
3 1.8 1.475 0.325

 

 

 

 

 

 

 

此时残差变成了真实的标签

3. 基于特征的划分

划分点小于划分点的样本大于等于划分点的样本SSElSSSElSErSErSEsumSEsum
年龄5 / 0,1,2,3 0 0.327 0.327
年龄7 0 1,2,3 0 0.140 0.140
年龄21 0,1 2,3 0.020 0.005 0.025
年龄30 0,1,2 3 0.187 0 0.187
体重20 / 0,1,2,3 0 0.327 0.327
体重30 0 1,2,3 0 0.140 0.140
体重60 0,1 2,3 0.020 0.005 0.025
体重70 0,1,3 2 0.260 0 0.260




 

 

 

 

 

 

 

 

 

 

损失函数是mes,我们这里简单计算每个叶节点的平方和损失,上图第4列是左节点的损失,第5列是右节点的损失,以年龄7为例,右节点损失计算如下

误差最小为0.025,有两种划分方式,随便选一种,年龄21,做如下划分

 max_depth 为3,还需继续划分,同理可得

 

4)计算叶节点的值        【关键点】

遍历叶节点,线性搜索,计算节点值,使得损失函数最小

r 其实就是基学习器,f0(x) 是之前基学习的和,f0(x)+r 就是本次预测,yi为真实值,最初的真实值

相当于给节点找一个参数r,使得损失函数最小,方法是求导,令导数等于0,计算可得

 

r11 = -0.375,r12 = -0.175,r21 = 0.225,r22 = 0.325

 

5)更新模型

6)重复上述步骤即可

 

 

注意

1. 提升树的基学习器只能是 cart 树

2. 加法模型可以带学习率,放慢学习速度,防止过拟合

 

 

 

参考资料:

《统计学习方法》  李航