简介
GBDT即梯度提升树,提升方法依然采用的是加法模型与前向分布算法。以决策树为基函数的提升方法称为提升树。对分类问题决策树是二叉分类树,对回归问题决策树是二叉决策树。例如前文中的例子中所使用的决策树桩即为一个根节点直接连接两个叶节点的简单决策树。与Adboost的区别
GBDT与Adboost最主要的区别在于两者如何识别模型的问题。Adaboost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。GBDT通过负梯度来识别问题,通过计算负梯度来改进模型。学习过程
针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,是指数损失函数的分类问题,以及用一般损失函数的一般决策问题。对于分类问题,GBDT实质是把它转化为回归问题。在多分类问题中,假设有k个类别,那么每一轮迭代实质是构建了k棵树,对某个样本x的预测值为
f1(x),f2(x),.........fk(x)
之后使用softmax可以得到属于每一个类别的概率,此时该样本的loss即可以用logitloss来表示,并对所有类别的f(x)都可以算出一个梯度,即可以计算出当前轮的残差,供下一轮迭代学习。下面主要对回归问题的提升树进行说明。
依然采用前向分步算法,过程如下:
是当前模型拟合数据的残差。所以,对于回归问题的提升树算法来说,只需简单地拟合当前模型的残差。即每一轮产生的残差作为下一轮回归树的输入,下一轮的回归树的目的就是尽可能的拟合这个输入残差。
举例
我们以简单的年龄预测为例,训练集共包括4个人:A,B,C,D,他们的年龄分别是14,16,24,26。每个人都有两个属性:每周的购物金额、每周的上网时间。数据集如下:
- A:购物金额<=1K,上网时间<=20h
- B:购物金额<=1K,上网时间>=20h
- C:购物金额>=1K,上网时间<=20h
- D:购物金额>=1K,上网时间>=20h
我们的目的就是构建一个GBDT模型来预测年龄。简单起见,我们限定每棵树只有一个分支,如下图所示:
通过比较上边两种方法,我们选择每周的购物金额作为划分属性,结果如上图左边的树。此时可以看到A、B被划分到了左节点。左节点的均值为(14+16)/2=15,则A的残差为14-15=-1,B的残差为16-15=1,同理可得C和D的残差分别为-1和1。这样当4个样本经过第一颗树后,分别产生的残差为(-1,1,-1,1),这个残差作为第二课树的输入,如上图右边第二颗树的根节点。
第二轮(树)
第二颗树的目的是尽量去拟合由第一颗树产生的残差(-1,1,-1,1),特征选取的过程同第一棵树,不再复述。现在我们用每周的上网时间来作为划分的属性,则结果如上图第二颗树。A、C被划分到左节点,B、D被划分到右节点,两个节点的均值分别为-1和1。此时两个子节点的残差都为0,训练结束。结果
不考虑泛化性,我们简单地使用训练集进行测试。
A = 15 + (–1) = 14
B = 15 + 1 = 16
C = 25 + (–1) = 24
D = 25 + 1 = 26
全部预测正确,厉(fei)害(hua)了我的哥。- 总结
- GBDT每一轮训练时所关注的重点是本轮产生结果的残差,下一轮以本轮残差作为输入,尽量去拟合这个残差,使下一轮输出的残差不断变小。所以GBDT可以做到每一轮一定向损失函数减小的梯度方向变化,而传统的boosting算法只能是尽量向梯度方向减小,这是GBDT与传统boosting算法最大的区别,这也是为什么GBDT相比传统boosting算法可以用更少的树个数与深度达到更好的效果。
- 和AdaBoost一样,Gradient Boosting也是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。不同的是,AdaBoost是通过提升错分数据点的权重来定位模型的不足,而GBDT是通过算梯度来定位模型的不足。因此相比AdaBoost,GBDT可以使用更多种类的目标函数。
- 抽象地说,模型的训练过程是对一任意可导目标函数的优化过程,通过反复地选择一个指向负梯度方向的函数,该算法可被看作在函数空间里对目标函数进行优化。
- 回归问题
1) 用回归树去拟合残差,其实就是用回归树去拟合目标方程关于f(x)的梯度。
2) 回归的目标函数并不一定会用square loss。square loss的优点是便于理解和实现,缺点在于对于异常值它的鲁棒性较差,一个异常值造成的损失由于二次幂而被过分放大,会影响到最后得到模型在测试集上的表现。可以算则Absolute loss或者Huber loss代替。 - 分类问题
1) 此时的目标函数常用log loss,如KL-散度或者交叉熵。
2) 除了损失函数的区别外,分类问题和回归问题的区别还在于当多分类问题时,每轮可能会训练多个分类器。 - 由于决策树是非线性的,并且随着深度的加深,非线性越来越强,所以基于决策树的GBDT也是非线性的。