什么是GBDT算法
GBDT算法是一种基于决策树实现的分类回归算法。GBDT 全称为 Gradient Boosting Decision Tree,从字面看GBDT算法是由两部分组成gradient boosting和 decision tree,那如何理解 gradient boosting 和 decision tree 呢
1.decision tree(决策树)
首先GBDT无论是处理回归问题、二分类问题还是多分类问题,使用的决策树都是CART回归树,因为GBDT的损失函数拟合的是负梯度值,是连续值,所以使用回归树而不是分类树。
构建回归树最重要的一个步骤就是找到最合适的特征划分点,在分类树种,划分点是依照熵或者基尼系数(每一层的纯度)来划分的,但是在回归树中,输入变量是连续变量,所以按照纯度划分的方式不太合适,所以这里我们使用平法误差作为划分的评判依据。
2. Gradient Boosting: 拟合负梯度
Gradient Boosting(梯度提升树)其实是对Boosting Tree(提升树)的一种改进,所以首先我们要知道什么是Boosting Tree。
下面是提升树的算法步骤:
我们通过一个例子来理解一个提升树的具体计算步骤:
假设现在有四个样本,样本的实际年龄分别是14岁,15岁,24岁,26岁,我们使用提升树的算法来预测样本的实际年纪。
(1)使用样本均值初始化f0(x) : (14+15+24+26)/4 = 20
(2)计算最小平方误差,选出最优划分特征(略)【划分后:左子树 14,16 右子树 24 26】
(3)左子树均值初始化:(14+16)/2 =15 右子树均值初始化:(24+26)/2 = 25
(a) 分别计算左右子树的残差
左子树:14-15 = -1 ;16-15 = 1
右子树:24-25 = -1 ;26-25 = 1
(b)拟合残差,学习得到一个新的回归树
重复(3)步骤,如下图所示
从上述的算法步骤中,我们能很明显的看出提升树算法的最大缺点就是难优化,因此Freidman提出了梯度提升算法,算法的核心是利用损失函数的负梯度将当前模型的值作为回归问题提升树算法中的残差的近似值,去拟合一个回归树。
区别于提升树,梯度提升树计算损失函数的负梯度在当前模型的值,将它作为残差的估计,传入下一颗树,去做拟合。
当损失函数是平方损失时,负梯度就是残差。