对于XGBoost,相信大家都不陌生了,小白也曾经看了很多次,不过每次都没有很系统的学习,都是在使用过程中,遇到什么问题,就查什么问题,对于整个算法都是“星星点点”的学习,最近几天又看到了这个算法,小白就在学习中总结了一下这个算法的要点。
目录
1.XGBoost描述
XGBoost是一种集成学习算法,通过回归树,每一次对残差(实际值与预测值之差)进行拟合,最后把预测值相加得到最终的预测值。
比如:灯泡的寿命是10年,经过三棵树的训练,第一颗树的训练结果为5年,那么残差为10-5=5年,在此基础上训练,第二棵树的训练结果为3年,残差为5-3=2年,接着第三棵树,训练结果为1年,残差为2-1=1年,结束,那么这棵树最终预测的寿命=5+3+1=9年,这个结果显然更接近于真实值。

2.浅析XGBoost思路
XGBoost是通过建立K个回归树,使树群的预测值趋近于真实值,且有尽量大的泛化能力,目标函数为:

其中,i:第i个样本,第一个函数:每个样本的预测误差和,误差越小越好,第二个函数:树的复杂度函数,越小泛化能力越强,复杂度越低。函数表达试为:

对于求解,使用二次最优化(贪心策略+最优化):决策时刻按照当前目标最优化决定。
选择feature分裂成两个节点,需要:
1)确定分裂用的feature。枚举所有feature,选择loss function效果最好的那个(关于粗暴枚举,Xgboost的做了改良,以并行方式同时计算每个feature的loss function);
2)如何确立节点的w以及最小的loss function二次函数的求最值(细节的会注意到,计算二次最值是不是有固定套路,导数=0的点)
那么整体就变成:选择一个feature分裂,计算loss function最小值,然后再选一个feature分裂,又得到一个loss function最小值,枚举完,找一个效果最好的,把树给分裂,就得到了小树苗。在分裂的时候,每次节点分裂,loss function被影响的只有这个节点的样本,因而每次分裂,计算分裂的增益(loss function的降低量)只需要关注打算分裂的那个节点的样本。接下来,继续分裂,按照上述的

最低0.47元/天 解锁文章
1万+





