1概述
xgboost是GBM(Gradient Boosting Machine)的一个优化版本,结合树模型的结构特点,使用函数空间的梯度下降,实现优化损失函数的集成模型;
1.1 主要优点
可以处理回归及分类问题(覆盖机器学习有监督学习的主要问题)
基于决策树模型,具有决策树的所有优点如计算简单,易于理解,可解释性强;比较适合处理有缺失属性的样本;
可以自定义损失函数更为灵活
包含正则项,可以防止过拟合
优化过程中加入二阶导数,优化速度更快,
支持继续训练功能,可以依据原有模型进行继续训练
支持分布式
训练过程中,支持使用验证集通过交叉验证评估效果
基模型除了决策树,支持多种模型如linear,gamma等模型
1.2算法原理
目标函数由两部分组成——训练损失+正则项
训练损失,主要衡量模型拟合数据的情况,目标是随着训练迭代次数的增加,模型的损失函数降至最低,此处举了两个例子常用于回归任务的Square loss(均分损失),以及用于分类任务的logistic loss(交叉熵损失),由于xgboost继承了决策树的特点,而决策树存在的较为严重的确定点就是过拟合的问题,xgboost也考虑了该问题,模型中包含了正则项。
正则项:主要针对数据过拟合问题,分为L1、L2两种正则化,其中xgboost主要使用的是L2正则方法,主要逻辑是使整体系数规模减小,从而导致异常值不会过度影响模型的训练。L1正则话更倾向于将模型中的参数向0和1两个方向靠近,从而实现对不重要参数的舍弃功能。
xgboost的主要模型结构,其中整体模型F(x)由k个f(x)(使用决策树作为基模型)组成每增加一个f(x),F(x)的整体损失函数会下降,否则不会增加第k个f(x)
定义目标函数,其中损失函数可自由设置
代码如下:
使用二阶泰勒展开式泰勒,将目标函数转化为红色部分的Obj(t)
其中将l(y,y<t-1>hat)看作泰勒展开式中的f(x),将f<t>(x)看作泰勒展开式的Δx,
因此训练损失被展开为训练损失(F<t-1>时期的损失函数,下同)函数结果、损失函数一阶导数乘以新增的f<t>(x),以及损失函数二阶项与f<t>(x)**2,
同时用gi表示损失函数的一阶导数,hi表示损失函数的二阶导数
而且l(y,y<t-1>hat)为常熟,不影响目标函数求最小值的过程,因此归入常数项
经整理后,目标函数需要优化最小值的部分被整合成本式
定义模型复杂度部分参数,其中T为基模型的样本节点数量,wj为各节点的输出数值,γ与λ为超参数,使用者可以用于调整正则项对整体模型的影响
f<t>(x)的实际输出其实就是找到数据x进入模型后预测到的叶子节点(此处概念不清楚可参考决策树模型)输出数值,因此将f<t>(x)转化为图片中输出的式子
将目标函数结合上述提到的损失函数泰勒展开式、模型正则项以及输出表达式,整合为本图的形式,其中倒数第二行到最后整合结果可以如下图所示
向f<t>(x)输入九条数据,产生9条预测,由于树模型的结构特点,输出位置为模型的叶子节点,因此基于树模型的输出结果与下图等同
实际上即将n条数据的加和结果转化为双层循环每个叶子节点下数值的加和
再次回到主线目标函数的优化上
使用G、H替代原先的g、h并对结果进行求导的出使得目标函数最小的w向量以及此时的目标函数值
使用已经得出的目标函数最优质进行节点分裂判断,从本途中也可以看出,xgboost基模型的分裂是二分模式,当收益Gain大于0时可以继续分裂,可以看出分裂与否主要受损失函数导数以及正则项的影响
3 功能展示