xgboost是目前效果最优的一款集成模型。那么,xgboost是个啥东西,xgboost的boost思路又是怎么产生的呢。
阅读了paper 《greedy function approximation: A gradient boosting machine》之后,有些模糊的东西有了解答。
question 1. xgboost是啥?
boosting,顾名思义,增长的意思。也就是说,F的计算方法,是每个基分类器的总和,训练的过程,是一步一步建立每个基分类器的过程,这种过程,就可以成为boost。
原文中,Y值的计算方法是这样的:
从公式可以看出,最终的Y值是由N个基分类器的加权平均。
question2. boost的思想是怎么来的?
boost是一种贪心求最佳参数的方法,也就是说,在第m步,前面一步(m-1)生成的分类器不用优化参数,第m步优化的目标就是最大化gm,也就是最小化负梯度,被定义为最陡下降的目标,是一种直线搜索的方法。这种思路将目标函数简化为每个step中求最小化的负梯度,需要调整的参数量变少了很多。
question3. 总之,最后的loss计算和优化方法是啥?
在公式中,可以看到,h(x,a)是每个基分类器的打分,乘以一个beta权值,最终的predict值是各个基分类器的加权分数。对于boost的优化思想,就是公式(9)中,Fm-1(x) + h(x,a)* beta, 代表第m个基分类器加入后,predict的值。调优的过程,就是找到最优化的beta,和基分类器的a参数值。
question4. 基分类器的数是怎么分裂的?
根据陈天奇的xgboost的论文,loss的表达式还可以展开式泰勒级数的形式,分裂的增益可以写成如上形式,其中,gi是第i个样本在前m次迭代的损失函数一阶导,hi是第i个样本在前m次迭代的损失函数二阶导。