之Xgboost算法,xgboost算法( 三 )


这篇论文描述了 CART,因为 MART 使用的 CART,XGBoost 也实现了一种与 CART 相关的树模型 。CART 以一种自上而下的方式生长树 。通过考虑平行于坐标轴的每次分割,CART 可以选择最小化目标的分割 。在第二步中,CART 会考虑每个区域内每次平行的分割 。在这次迭代结束时,最好的分割会选出 。
CART 会重复所有这些步骤,直到达到停止标准 。给定一个区域 Rj,学习其权重 wj 通常很简单 。令 Ij 表示属于区域 Rj 的索引的集合,即 xi∈Rj,其中 i∈Ij 。其权重是这样估计的:对于一个树模型,经验风险为:其中我们令 表示节点 j 处的累积损失 。在学习过程中,当前树模型用 和 表示 。我们可以计算所考虑的分割所带来的增益: 对于每一次分割,每个可能节点的每个可能分割都会计算这种增益,再取其中最大的增益 。
现在让我们看看缺失值 。CART 会使用替代变量(surrogate variable)来处理缺失值,即对于每个预测器,我们仅使用非缺失数据来寻找分割,然后再基于主分割寻找替代预测因子,从而模拟该分割 。比如,假设在给定的模型中,CART 根据家庭收入分割数据 。如果一个收入值不可用,那么 CART 可能会选择教育水平作为很好的替代 。
但 XGBoost 是通过学习默认方向来处理缺失值 。XGBoost 会在内部自动学习当某个值缺失时,最好的方向是什么 。这可以被等价地看作是根据训练损失的减少量而自动「学习」缺失值的最佳插补值 。根据类别预测器,我们可以以两种方式处理它们:分组类别或独立类别 。CART 处理的是分组类别,而 XGBoost 需要独立类别(one-hot 编码) 。
这篇论文以列表的形式总结了树模型的优缺点:优点(Hastie et al., 2009; Murphy, 2012):? 容易解释? 可以相对快地构建? 可以自然地处理连续和分类数据? 可以自然地处理缺失数据? 对输入中的异常值是稳健的? 在输入单调变换时是不变的? 会执行隐式的变量选择? 可以得到数据中的非线性关系? 可以得到输入之间的高阶交互? 能很好地扩展到大型数据集缺点(Hastie et al., 2009; Kuhn and Johnson, 2013; Wei-Yin Loh, 1997; Strobl et al., 2006):? 往往会选择具有更高数量的不同值的预测器? 当预测器具有很多类别时,可能会过拟合? 不稳定,有很好的方差? 缺乏平滑? 难以获取叠加结构? 预测性能往往有限树提升在上述发展的基础上,现在我们将 boosting 算法与基本学习器树方法结合起来 。
提升后的树模型可以看作是自适应基函数模型,其中的基函数是回归树:提升树模型(boosting tree model)是多个树 fm 的和,所以也被称为树集成(tree ensemble)或叠加树模型(additive tree model) 。因此它比单个树模型更加平滑,如下图所示:拟合 Boston Housing 数据的叠加树模型的可视化在提升树模型上实现正则化的方法有很多:1. 在基函数扩展上进行正则化2. 在各个树模型上进行正则化3. 随机化一般来说,提升树往往使用很浅的回归树,即仅有少数终端节点的回归树 。
相对于更深度的树,这样的方差较低,但偏置更高 。这可以通过应用复杂度约束来完成 。XGBoost 相对于 MART 的优势之一是复杂度的惩罚,这对叠加树模型而言并不常见 。目标函数的惩罚项可以写成: 其中第一项是每个单个树的终端节点的数量,第二项是在该项权重上的 L2 正则化,最后一项是在该项权重上的 L1 正则化 。
Friedman(2002) 最早引入了随机化,这是通过随机梯度下降实现的,其中包括在每次迭代时进行行子采样(row subsampling) 。随机化有助于提升泛化性能 。子采样的方法有两种:行子采样与列子采样(column subsampling) 。MART 仅包含行子采样(没有替代),而 XGBoost 包含了行子采样和列子采样两种 。

推荐阅读