1、xgboost模型函数形式算法
xgboost也是GBDT的一种,只不过GBDT在函数空间进行搜索最优F的时候,采用的是梯度降低法也就是一阶泰勒展开;而xgboost采用的是二阶泰勒展开也就是牛顿法,去每次逼近最优的F,泰勒展开越多与原函数形状越接近,好比在x0处进行展开,其展开越多,x0附近与原函数值越接近,且这个附近的区域越大。另一个xgboost加入了正则化项,有效防止过拟合。机器学习
xgboost与GBDT都是采用的cart树中的回归树来解决全部问题,回归树的预测输出是实数分数,能够用于回归、分类、排序等任务中。对于回归问题,能够直接做为目标值,对于分类问题,须要映射成几率,好比采用逻辑回归的sigmoid函数。函数
additive表示附加的,所谓additive training,就是每次add一颗树进行学习,直到损失最小。学习
偏差函数尽可能去拟合训练数据,正则化项则鼓励更加简单的模型。由于当模型简单以后,有限数据拟合出来结果的随机性比较小,不容易过拟合,使得最后模型的预测更加稳定。优化
2、目标函数spa
1)回顾传统参数空间的目标函数3d
偏差函数能够是square loss,logloss等,正则项能够是L1正则,L2正则等。正则项若是从Bayes角度来看,至关于对模型参数引入先验分布:blog
L1正则,模型参数服从拉普拉斯分布,对参数加了分布约束,大部分取值为0。排序
L2正则,模型参数服从高斯分布,对参数加了分布约束,大部分绝对值很小。索引
2)xgboost在函数空间搜索的目标函数
函数空间的目标函数是多棵树一块儿构建的目标损失函数,求解多棵树一块儿的总体最优解。
第一部分属于偏差项,训练模型的精度;第二部分正则项对每一棵回归树的复杂度进行了惩罚,使得学习出来的模型不容易过拟合。
哪些指标能够衡量树的复杂度呢?
树的深度,内部节点个数,叶子节点个数,叶子节点分数等。
xgboost采用叶子节点个数T和叶子节点分数w(其实就是预测值)对树的复杂度进行约束:
对叶子节点个数进行惩罚,至关于进行了剪枝。
3、泰勒展开
基本形式:
一阶与二阶泰勒展开:
1)一阶泰勒展开(梯度降低法)
在机器学习任务中,须要最小化损失函数L(θ) ,其中θ 是要求解的模型参数。梯度降低法经常使用来求解这种无约束最优化问题,它是一种迭代方法:选取初值 θ0,不断迭代,更新θ的值,进行损失函数的极小化。
从上面可知,当△θ=-αL丶(θt-1)时候,θ的更新就跟咱们以前理解的梯度降低方法是一摸同样。将△θ带入损失函数便可知,这个时候L(θt)是确定比L(θt-1)变小的。
因此,从梯度降低法角度理解,就是函数值沿着梯度的负方向进行减小;从泰勒展开角度理解,就是函数在θt-1处进行一阶展开,并根据展开公式找到了比L(θt-1)更小的近似于L(θt)的值,由于泰勒展开自己就是用多项式形式近似表达函数的原形式。
2)二阶泰勒展开(牛顿法)
此时如何进行优化,寻找更小的L(θt)?
这时候利用泰勒二阶展开求解最优的△θ,使得L(θt)更小,泰勒二阶比一阶确定更接近原函数的值,所求得的△θ也使得L(θt)降低的更快,这就是牛顿法的优点。
4、xgboost目标函数进行泰勒展开
xgboost在第t次迭代后,模型的预测等于前t-1次的模型预测加上第t棵树的预测:
因为模型已经进行了t-1次迭代,也就是已经学习了t-1棵树,此时只要学习寻找最优的第t棵树函数ft便可,因此目标函数以下:
其中yi和yi(t-1)都属于已知的,能够理解为常数。
将目标函数在yi(t-1)处进行泰勒二次展开,由于咱们一步步寻找的是最优的函数yi(t)使得L最小,就是上面所说的在函数空间进行的搜索,因此在yi(t-1)处进行泰勒二次展开寻找并学习下一颗树ft,这里的ft其实就至关于上文第三部门牛顿法中的△θ,不停的寻找ft,最后将这些树加起来就成了最优的yt,上文中也是不停的寻找△θ,最后θ*=θ0+Σ△θ,同样的道理。无非一个是在参数空间进行搜索,一个是在函数空间进行搜索。二次展开以下:
其中gi和hi分布以下:
将常数项去掉,并把树的结构形式带入获得以下:
其实这个时候已经简洁地变成对t棵树的学习优化问题了,以叶子节点形式表示上述目标函数以下,其中Ij={i|q(xi)=j}表示j叶子节点上的样本集合。
为了使目标函数最小,能够令其导数为0,解得每一个叶节点的最优预测分数为:
带入目标函数,获得最小损失为:
5、如何进行分裂?
1)如何评测节点分裂的优劣?
ID3采用信息增益来评测,C4.5采用信息增益率、CART树采用基尼系数和平方损失来评测,xgboost采用以下的打分评测:
其实就是上面的最小损失值的公式,若是分裂后能让损失变得更小,就值得去分裂,因此分裂先后增益定义为:
这个Gain就是分裂前的损失-分裂后的损失,差值越大,表明分裂后的损失越小,因此当对一个节点进行分裂时,计算全部候选(feature,value)对应的gain,选区gain最大的进行分裂。
2)寻找分裂节点
一、精确算法-暴力穷举搜索法
遍历全部特征的全部可能的分割点,计算gain值,选取gain值最大的(feature,value)去分割。该方式优势是精度高,缺点是计算量太大。
二、近似算法-分位点分割
对于某一个特征,按照百分比肯定候选分裂点,经过遍历全部特征的全部候选分裂点来找到最佳分裂点,减小了计算复杂度。
3.weighted quantile sketch(按权重的分位点算法)
该方法将样本对应的残差二阶导h做为划分依据,假设每个分位点区间的h之和占总h的比率为rk(z),则两个相邻区间的rk之差小于一个固定值,以下所示: