- A+
在解决实际优化问题的时候需要对结果进行优化,梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是一种基于boosting集成学习思想的加法模型,训练时采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。XGBoost,LightGBM则是在GBDT的基础上对其改进和优化
本文展示的是不同算法对温度流量特性数据的优化结果。
GBDT
GBDT残差图
Xgboost
1)对树每次做分裂候选时,是使用的Gain增益,而不是普通的gini指数或者均方差,是一种优化过的误差计算.
2)将树模型的复杂度加入到正则项中,参与到损失函数,来避免过拟合问题
3)对损失函数进行了优化,优化成了二阶泰勒展开形式,同时使用了一阶导和二阶导,加速了优化速度
4)相比于GBDT只支持Cart作为基分类器的方式,Xgboost还支持线性分类器,在使用线性分类器时候可以使用L1正则化和L2正则化
5)使用Shrinkage缩减的方法,相对于对学习率的设置,xgboost在进行玩一次迭代后,会将叶子结点的权重乘该系数,主要是削弱每棵树的影响,放置过拟合,实际使用时候,刚开始会设置的大一些,之后迭代次数多了时候会设置小一些
6)Xgboost并不是完全的贪心寻找最佳分割点的方法,而是使用了一种近似的方法
XGBoost残差图
常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制。而GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。
LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。
LightGBM残差图
LightGBM的话对Xgboost的优化主要是在速度优化上,但是这里的效果并不好,我认为可能时因为LightGBM更适合数据较大时的回归问题,对与数据小的时候并不能有比xgboost更好的回归效果。
