之Xgboost算法,xgboost算法( 四 )


正如前面讨论的那样,MART 和 XGBoost 使用了两种不同的 boosting 算法来拟合叠加树模型,分别被称为 GTB(梯度树提升)和 NTB(牛顿树提升) 。这两种算法都是要在每一次迭代 m 最小化: 其基函数是树: 其一般步骤包含 3 个阶段:1. 确定一个固定的候选树结构的叶权重 ;2. 使用前一阶段确定的权重,提出不同的树结构,由此确定树结构和区域;3. 一旦树结构确定,每个终端节点中的最终叶权重(其中 j=1,..,T)也就确定了 。
算法 3 和 4 使用树作为基函数,对算法 1 和 2 进行了扩展:XGBoost 和 MART 的差异最后,论文对两种树提升算法的细节进行了比较,并试图给出 XGBoost 更好的原因 。算法层面的比较正如之前的章节所讨论的那样,XGBoost 和 MART 都是要通过简化的 FSAM(Forward Stage Additive Modelling/前向阶段叠加建模)求解同样的经验风险最小化问题:即不使用贪婪搜索,而是每次添加一个树 。
在第 m 次迭代时,使用下式学习新的树:XGBoost 使用了上面的算法 3,即用牛顿树提升来近似这个优化问题 。而 MART 使用了上面的算法 4,即用梯度树提升来做这件事 。这两种方法的不同之处首先在于它们学习树结构的方式,然后还有它们学习分配给所学习的树结构的终端节点的叶权重的方式 。再看看这些算法,我们可以发现牛顿树提升有 Hessian 矩阵,其在确定树结构方面发挥了关键性的作用,XGBoost: 而使用了梯度树提升的 MART 则是: 然后,XGBoost 可以直接这样定义牛顿树提升的叶权重:使用梯度树提升的 MART 则这样定义:总结一下,XGBoost 使用的 Hessian 是一种更高阶的近似,可以学习到更好的树结构 。
但是,MART 在确定叶权重上表现更好,但却是对准确度更低的树结构而言 。在损失函数的应用性方面,牛顿树提升因为要使用 Hessian 矩阵,所以要求损失函数是二次可微的 。所以它在选择损失函数上要求更加严格,必须要是凸的 。当 Hessian 每一处都等于 1 时,这两种方法就是等价的,这就是平方误差损失函数的情况 。
因此,如果我们使用平方误差损失函数之外的任何损失函数,在牛顿树提升的帮助下,XGBoost 应该能更好地学习树结构 。只是梯度树提升在后续的叶权重上更加准确 。因此无法在数学上对它们进行比较 。尽管如此,该论文的作者在两个标准数据集上对它们进行了测试:Sonar 和 Ionosphere(Lichman, 2013) 。
这个实证比较使用了带有 2 个终端节点的树,没有使用其它正则化,而且这些数据也没有分类特征和缺失值 。梯度树提升还加入了一个线搜索(line search),如图中红色线所示 。这个比较图说明这两种方法都能无缝地执行 。而且线搜索确实能提升梯度提升树的收敛速度 。正则化比较正则化参数实际上有 3 类:1.boosting 参数:树的数量 M 和学习率η2. 树参数:在单个树的复杂度上的约束和惩罚3. 随机化参数:行子采样和列子采样两种 boosting 方法的主要差别集中在树参数以及随机化参数上 。
对于树参数,MART 中的每个树都有同样数量的终端节点,但 XGBoost 可能还会包含终端节点惩罚 γ,因此其终端节点的数量可能会不一样并且在最大终端节点数量的范围内 。XGBoost 也在叶权重上实现了 L2 正则化,并且还将在叶权重上实现 L1 正则化 。在随机化参数方面,XGBoost 提供了列子采样和行子采样;而 MART 只提供了行子采样 。
为什么 XGBoost 能赢得「每一场」竞赛?通过使用模拟数据,论文作者首次表明树提升可以被看作是自适应地确定局部邻域 。使用 生成然后使用局部线性回归(使用了两种不同灵活度的拟合)来拟合它:然后使用平滑样条函数(使用了两种不同灵活度的拟合)来拟合它: 现在我们尝试提升的树桩(boosted tree stump)(两个终端节点)拟合:本论文详细说明了权重函数影响拟合的确定的方式,并且表明树提升可以被看作是直接在拟合阶段考虑偏置-方差权衡 。

推荐阅读