1 回归树算法分析
Adaboost算法是提升树的特殊情况,主要用于分类问题,对于回归问题怎么处理呢??
已知一个训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)} ,假设输入空间为 χ ,如果将输入空间划分为J个互不相交的区域 R1,R2,...,RJ 并在每个区域上确定输出的常量 cj ,那么回归树可以表示为:
T(x;Θ)=∑j=1JcjI(x∈Rj)
其中,参数
Θ={(R1,c1),(R2,c2),...,(RJ,cJ)} 表示树的区域划分和各区域上的常数,J是回归树的叶节点个数
所以回归算法模型可以表示成:
fM(x)=∑m=1MT(x;Θm)
在前向分布算法的第m步,给定当前模型
fm−1(x) ,优化目标为:
Θ̂ m=argminΘm∑i=1NL(yi,fm−1(xi)+T(xi;Θm))
损失函数-平方损失:
L(y,f(x))=(y−f(x))2=L(yi,fm−1(xi)+T(xi;Θm))=[y−fm−1(xi)−T(xi;Θm)]2=[r−T(xi;Θm)]2
其中
r=y−fm−1(x) 为当前模型拟合的残差,所以回归问题的提升树只需要简单的拟合当前模型的残差。
2 示例解析
训练数据如下,x的取值范围为区间[0.5,10.5],y的取值范围为区间[5.0,10.0],学习这个回归问题的提升树模型,考虑只用树桩作为基函数
xi |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
yi |
5.56 |
5.70 |
5.91 |
6.40 |
6.80 |
7.05 |
8.90 |
8.70 |
9.00 |
9.05 |
寻找切分点方式:
mins[minc1∑xi∈R1(yi−c1)2+minc2∑xi∈R2(yi−c2)2]
其中:
R1=x|x≤s,R2=x|x>s
其实每个区域内使平方误差达到最小的
c1,c2 就是所有数据点的平均值.
第一步:求解 T1(x)
分别以1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5为分割点可以得到
当以1.5为分割点时, R1=1,R2=2,3,...,10 , c1=5.56,c2=7.50
min1.5=(5.56−5.56)2+(5.70−7.50)2+...+(9.05−7.50)2=15.72
min2.5=12.07min6.5=1.93min9.5=15.74
所以以6.5为切分点时
mins 达到最小值,回归树为:
T1(x)={6.24,x<6.58.91,x≥6.5
f1(x)=T1(x)
残差表r2i=yi−f1(xi)
xi |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
yi |
-0.68 |
-0.54 |
-0.33 |
0.16 |
0.56 |
0.81 |
-0.01 |
-0.21 |
0.09 |
0.14 |
损失误差为:
L(y,f1(x))=∑i=110(yi−f1(xi))2=1.93
循环迭代:
T3(x)={0.15,x<6.5−0.22,x≥6.5L(y,f3(x))=0.47
T4(x)={−0.16,x<4.50.11,x≥4.5L(y,f4(x))=0.30
T5(x)={0.01,x<6.5−0.11,x≥6.5L(y,f5(x))=0.23
T6(x)={−0.15,x<2.50.04,x≥2.5
f6(x)=T1(x)+T2(x)+...+T6(x)=⎧⎩⎨⎪⎪⎪⎪⎪⎪5.63,x<2.55.82,2.5≤x<3.56.56,3.5≤x<4.56.83,4.5≤x<6.58.95,x≥6.5
L(y,f6(x))=∑i=110(yi−f6(xi))2=0.17
3 GBDT的负梯度拟合
提升树用加法模型和前向分布算法实现算法的学习优化过程,当损失函数是平方损失和指数损失函数时,每一步的优化都比较简单。但是对于一般的损失函数往往每一步的优化并不容易,所以Freidman提出了梯度提升算法,就是利用损失函数的负梯度信息,作为回归问题提升树算法中的残差的近似值,拟合一个回归树
−[L(∂L(y,f(xi)))∂f(xi)]f(x)=fm−1(x)
4 GBDT回归树
GBDT算法
输入:假设训练数据集为 T=(x1,y1),(x2,y2),...(xN,yN) ,损失函数 L(y,f(x))
输出:回归树 f̂ (x)
(1)初始化
f0(x)=argminc∑i=1NL(yi,c)
(2)for m=1,2,…,M
(a)for i=1,2,…N,计算
rmi−[L(∂L(y,f(xi)))∂f(xi)]f(x)=fm−1(x)
(b) 对
rmi 拟合一个CART回归树,得到第m棵的叶结点区域
Rmj ,j=1,2,…J
(c) for j=1,2,…,J,计算
cmj=argminc∑xi∈RmjL(yi,fm−1(xi)+c)
(d)更新
fm(x)=fm−1(x)+∑Jj=1cmjI(x∈Rmj)
(3)回归树
f̂ (x)=fM(x)=∑m=1M∑j=1JcmjI(x∈Rmj)