xgboost其实是GBDT的一种超牛的优化,然后Lightgbm是xgboost的变异。所以本博文主要是在讲xgboost与GBDT的区别。
损失函数的改进(原理)
众所周知,GBDT的损失函数是误差的一阶导数,然后xgboost的损失函数是将误差进行了泰勒展开到二阶,相当于加入了误差的二阶导数,损失函数比一阶效果更好。同时损失函数加入了正则化项防止过拟合。
it is easy to understand,xgboost的损失函数:
其中gi,hi分别表示误差的一阶和二阶导数。最后一项是对树的复杂度做的正则化项。
其中两个系数分别为L1,L2正则化系数,c表示单个叶子的输出均值。
可以自定义损失函数(API)
只要二阶可导就行
加入了正则化项(原理)
加入了特征抽样(API)
剪枝处理优化
GBDT遇见一个负增益则停止分裂,而xgboost会分裂知道最后,然后回过来“反思”,如果从某个节点开始往下的分裂带来的增益不如不分裂,则会剪枝。