本文是《统计学习方法》李航著学习笔记。现在的数据科学比赛中用到的算法大杀器GBDT(gradient boosting decision tree)终于要出场了!
提升方法的基本思想是将学习到的若干弱分类器组合形成强分类器,即sembling里的boosting思想。这里的弱分类器通常是同一类模型,比如都是决策树、或都是神经网络等,下面的论述中弱分类器是树形模型。有关决策树的内容参考http://blog.****.net/cymy001/article/details/78027083
不同问题的提升树学习算法主要区别在于选用的损失函数不同:
(a.)回归问题,用平方误差损失函数(eg.二差回归树提升算法)
(b.)分类问题,用指数损失函数(eg.AdaBoost)
(c.)一般决策问题,用一般损失函数(eg.GBDT)
利用boosting预测:
(1.)利用二类分类提升模型进行预测就是将训练实例点xi代入学习到的分类决策函数模型f(x),根据f(xi)的取值正负决定点xi的类,f(xi)的绝对值表示分类的置信度。
(2.)利用回归树进行预测时就是判断训练实例点xi位于回归树f(x)模型的哪个区间,根据对应区间找出f(xi)的值。
boosting模型学习:
提升方法可用于分类问题和回归问题,模型学习过程大致如下:
(1.)在分类问题中,通过“改变训练样本集的权重分布”,再“对应每个训练样本集的权重分布学习一个分类器”,最后“将这些分类器根据分类误差率进行线性组合得到最终的决策模型,提高分类的性能”。
(2.)在回归问题中,以平方损失函数为目标,通过拟合“叠加的回归树与训练实例点标记值间的残差”学习回归树,最后的模型是学习到的各回归树的和。
本文下述主要是提升方法的模型学习过程。
分类问题的AdaBoost算法:
输入:二类分类训练数据集T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中xi∈Rn,yi∈{1,−1};某种弱学习算法(如决策树)
输出:强分类器G(x)
(1)给定训练数据集T的初始分布D1=(w11,⋯,w1i,⋯,w1N),其中w1i=N1,i=1,2,⋯,N
(2.)学习M个弱分类器Gm(x),m=1,2,⋯,M:
- 对“具有分布Dm的训练数据集”用“某种弱学习算法”学习到二类分类弱分类器Gm(x)
-
Gm(x)在T上的分类误差率
em=P(Gm(xi)̸=yi)=i=1∑NwmiI(Gm(xi)̸=yi)
- 弱分类器Gm(x)的系数
αm=21lnem1−em
- 更新训练数据集T的分布
Dm+1=(wm+1,1,⋯,wm+1,i,⋯,wm+1,N)wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,N
其中,概率归一化因子Zm=i=1∑Nwmiexp(−αmyiGm(xi))
(3.)由弱分类器Gm(x)的线性组合构建强分类器G(x):
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
将Adaboost算法看作前向分布算法,即每步学习一个基函数b(x;γm)及相应的系数βm,最终的强学习器是叠加m次的加法模型m=1∑Mβmb(x;γm)。
损失函数为指数损失函数L(y,f(x))=exp[−ym=1∑Mβmb(x;γm)]。
以决策树为弱分类器的提升方法称为提升树:对分类问题,只需要在Adaboost算法中的第(2)步中对“具有分布Dm的训练数据集”用“决策树”学习二类分类弱分类器Gm(x);对回归问题,根据加法原理和平方损失最小的目标构建残差拟合模型
L(y,fm−1(x)+T(x;Θm))=[y−fm−1(x)−T(x;Θm)]2
其中fm−1(x)=j=1∑m−1T(x;Θj),残差项为r=y−fm−1(x),每一步拟合残差利用的是回归树模型T(x;Θm)=j=1∑JcjI(x∈Rj)。
回归问题的提升树算法:
输入:训练数据集T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中xi∈Rn,yi∈R
输出:提升树fM(x)
(1.)初始化f0(x)=0
(2.)学习M个弱回归树fm(x),m=1,2,⋯,M:
-
分别计算i=1,2,⋯,N个训练实例点的残差
rmi=yi−fm−1(xi)
-
拟合残差rmi,学习一个回归树T(x;Θm)
-
更新组合树模型fm(x)=fm−1(x)+T(x;Θm)
(3.)最终的回归提升树fM(x)=m=1∑MT(x;Θm)
注:这里没有改变数据集的分布,每次学习新的树模型时,拟合的是训练数据集对应的残差项。
GBDT:
针对一般损失函数,类似回归树的拟合残差,这里用损失函数的负梯度作为残差项。
输入:训练数据集T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中xi∈Rn,yi∈R;损失函数L(y,f(x))
输出:回归树f(x)
(1.)初始化f0(x)=argcmini=1∑NL(yi,c)
(2.)学习M个弱回归树fm(x),m=1,2,⋯,M:
-
分别计算i=1,2,⋯,N个训练实例点的残差
rmi=−[∂fm−1(xi)∂L(yi,fm−1(xi))]
-
拟合残差rmi,学习一个回归树j=1∑JcmjI(x∈Rmj):先生成树,即确定J个叶结点数目,再对每个叶结点根据最小化损失函数选取cmj
-
更新组合树模型fm(x)=fm−1(x)+j=1∑JcmjI(x∈Rmj)
(3.)最终的回归提升树f(x)=m=1∑Mj=1∑JcmjI(x∈Rmj)
注:GBDT算法中拟合残差生成回归树步里,生成树遍历选择切分点时,只需要一层遍历(因为拟合残差值是一维向量运算,维度上不需要遍历选取),但是当构建的回归树不是二叉树时,切分点的选取组合遍历比二叉树时要复杂。有了切分点后,利用平方损失最小,在每个区间内的cmj通过求导易求得。