GBDT,XGboost,Lightgbm,Catboost总结
mark一下,感谢作者分享!
一、DBDT
分裂
GBDT使用的决策树就是CART回归树,无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树自始至终都是CART回归树。
对于回归树算法来说最主要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签也是连续数值,所以再使用熵之类的指标不再合适,取而代之的是平方误差,它能很好的评判数据分散程度。我们希望最佳划分节点能够使得划分得到的两组数据组内的标签值相近,如果每组的方差都很小,这就说明每组的组内相似度很高,确实应该被划分。
取自李航《统计学习方法》回归树伪代码:
从上图可以看出:利用方差寻找最佳划分点,预测值选择决策树的叶子节点中所有样本的真实值的均值。
Gradient Boosting: 负梯度——残差
在上述损失函数中,GBDT选取了相对来说容易优化的损失函数——平方损失。针对怎样去拟合这个损失,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值。第t轮的第i个样本的损失函数的负梯度为:
对应损失函数列表可知,GBDT使用的平方损失,经过负梯度拟合得到了y−f(xi),这就是我们最终要去拟合的,它的另一个名字叫作残差。回到我们上面讲的那个通俗易懂的例子中,第一次迭代的残差是10岁,第二 次残差4岁……
上面两节分别将Decision Tree和Gradient Boosting介绍完了,下面将这两部分组合在一起就是我们的GBDT了。先上一张伪代码的图:
算法流程:
1.初始化弱学习器
2.对迭代轮数m=1,2,…M有:
a)对每个样本i=1,2,…,N,计算负梯度,即残差我算出来,上图中的总方差,实际上为4个样本平均方差。
5.预测样本5:
样本5在根节点中(即初始学习器)被预测为1.475,样本5的年龄为25,大于划分节点21岁,所以被分到了右边的叶子节点,同时被预测为0.275。此时便得到样本5的最总预测值为1.75。
参考资料
李航 《统计学习方法》
https://www.cnblogs.com/pinard/p/6140514.html
https://www.cnblogs.com/ModifyRong/p/7744987.html
https://www.jianshu.com/p/005a4e6ac775