xgboost 学习:提升树(boosting tree)(含公式推导)

翻译自:Introduction to Boosted Trees

XGBoost  表示“极端梯度提升”,“梯度提升”源自于论文“Greedy Function Approximation: A Gradient Boosting Machine”这是一篇梯度提升书的教程。大部分内容基于 Tianqi Chen(xgboost的作者)的文章these slides

梯度提升树存在有一段时间了, 有很多参考资料. 本篇将使用监督学习的要素,以自完备和原理的方式来解释提升树. 我们觉得这种解释更清晰,更正式,也更有利于推导xgboost用到的公式

目录

监督学习的要素

模型与参数

目标函数:训练误差+正则化

为何引入一般原则?

决策树融合(集成)

树的提升

叠加性训练

模型复杂度

结构分数

学习树结构

注意

XGBoost总结


监督学习的要素

XGBoost用于监督学习问题, 使用训练集(多特征)x_i 来预测目标变量y_i 。在我们专门学习树之前,先来复习监督学习的基本概念

 

模型与参数

有监督学习的模型通常指从输入x_i 预测输出 y_i 的数学结构。一个普遍的例子是线性模型,预测方式为:\hat{y}_i = \sum_j \theta_j x_{ij},是输入特征的线性加权。所预测的值在不同任务中有不同解释(回归和分类)。做一个逻辑斯地变换可以用于正负类别概率预测,也可作为输出的分值用于排序。

参数是未知部分,需要从数据中学习。在线性回归中,参数是系数\theta。通常用\theta表示参数(模型中有很多参数,这里简略)。

 

目标函数:训练误差+正则化

对 y_i 的不同选择,表示了不同的任务,例如回归、分类、排序。训练任务的目标是找到能够拟合输入x和标签y的最佳参数\theta。为此,需要定义目标函数,以衡量模型拟合的好坏

目前函数的一个明显特征是它由两部分组成:训练误差和正则化项

L 是训练误差,\Omega 是正则化项。训练误差衡量了模型对训练集的估计。L 的普遍选择是均方误差:

另一个选择是对数损失,用于逻辑回归:

正则化项是人们常忘记加的,它控制着模型复杂度,避免过拟合。听起来有点抽象,考虑以下问题:要拟合一个阶跃函数,输入如下左上角图. 哪个图是最好的拟合?

正确答案用红色标注了。想想这个是否一个 合理的拟合。一般原则是,我们想要一个简单且可预测的模型,两者间的权衡也成为机器学习中的偏差-方差权衡(篇末参考)

 

为何引入一般原则?

以上所提到的形成了监督学习的基本要素。一般是机器学习工具的组成部分。例如,你必须做到能描述梯度提升树和随机森林的区别和共性(前者boosting后者bagging)。用正规方式理解此过程有助于我们理解学习的目标,还有修剪与平滑等启发式方法的原理。

决策树融合(集成)

现在我们介绍监督学习的要素。我们从树开始. 我们先学习XGBoost 的模型选择: 决策树集成. 树集成模型由多个分类回归树(CART树)组成。以下是 CART 的简单例子,判读某人是否会喜欢一个电脑游戏X

我们将一个家庭的成员分到两片叶子中,并为其赋上叶子的值。CART树与决策树有点不同,后者叶子节点只包含了决策值。而CART树的叶子包含了实际分值,可以提供除分类信息外更多的解释。这也便于从原理上统一优化,在后面部分即将看到。

通常一棵树在实际中不够鲁棒,在实际的集成模型中,会对多棵树的预测求和.

 

这是一个集成两棵树的例子。每棵树预测的分值求和以获得最终分值。仔细观察会发现一个重要事实,两棵树互相补充。模型在数学上的表示为:

K 是树的数量,f 是函数空间\mathcal{F}中的一个函数,\mathcal{F}是所有可能的CART 树模型。目标函数的优化:

这有一个关键问题,随机森林使用的模型是什么?树的集成! 那么随机森林和提升树是相同的模型,两者区别在训练的方式. 这意味着,如果你写为树集成写了一个可预测的服务,只需要写一个即可,它在随机森林和提升树上都能运行(详见Treelite )

 

树的提升

现在我们介绍模型,先看训练:如何学习一棵树? 答案正如所有监督学习模型:定义一个目标函数然后优化

目标函数如下(记住要包含训练误差和正则项):

 

叠加性训练

首先问个问题: 树的参数是什么? 你会发现我们需要学习那些函数 f_i,每个都包含了树的结构还有叶子的分值。学习树结构比传统的优化问题更难,后者只需要用到梯度。一次性学习所有树会比较难,我们使用加性策略:对我们已学到的模型进行校正,然后一次只添加一棵树。将第t步预测到的值记为\hat{y}_i^{(t)},则有:

剩余的问题: 每一步要学习什么样的树? 一个自然的想法是,能优化我们的目标的.

若考虑使用均方误差 (MSE) 作为损失函数,目标函数变为:

MSE 的形式比较友好, 一个一阶项(通常称为残差)与一个二次项。 对于其他损失函数(例如对数损失)想获得如此友好的表达式并不容易. 所以一般情况下,我们使用损失函数的二阶泰勒展开:

g_i 和 h_i 定义如下:

(泰勒展开: ,这里的x是loss function的自变量,也就是上面的y,所以x-a就是y - y(t-1),也就是f;这里的f是上面的loss function)

我们移走所有的常量,在时间步 t 的目标函数变为:

这就是训练新树的优化目标。这个定义的一个重要好处是目标函数的值只依赖于g_i 和 h_i  . 这也是XGBoost 对普通损失函数的支持。 我们可以优化每个损失函数包括对数回归和成对排序损失,使用以g_i 和 h_i 作为输入的求解器。

模型复杂度

我们介绍了训练步骤,但还有一件重要的事,正则化项! 我们需要定义树的复杂度 \Omega(f)。 我们先提炼树f(x)的定义:

w 是叶子节点的权值向量。q 是将不同样本点分配到对应叶子节点的函数T 是叶子的个数. 在XGBoost中,我们定义复杂度为:

当然定义复杂度的方法不止一种,但这个定义在实际中效果很好。正则化项在大多数树算法包里处理的并不细致,或者直接忽略了。这是因为传统的树学习只强调改进不纯度,复杂度控制交给启发式方法。通过正规的定义,我们可以更好地了解我们学习的内容,获得一个泛化性能更好的模型。

结构分数

这是推导过程中奇妙的部分. 在重写树模型公式后,我们将第t棵树的目标函数写成:

I_j = \{i|q(x_i)=j\} 是分配到第j片树叶的下标集合. 注意第二行的求和下标修改了,因为同一片树叶中的样本具有相同的分值。我们可以对其进一步压缩,通过定义:G_j = \sum_{i\in I_j} g_i 和 H_j = \sum_{i\in I_j} h_i:

等式中 w_j 互相独立。G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2 是二次的,对给定的q(x) 而言,最优的w_j 和最优的目标函数是:

最后一个等式衡量了一棵树结构q(x)是否够好.

如果这些听起来有点复杂,让我们看下这张图,看看分值是如何计算的. 对于给定的树结构,将统计量  g_i 和h_i 分配到各自的叶子。对统计量求和, 然后使用公式衡量这棵树的好坏。衡量标准类似决策树的纯度度量,  除此之外还考虑了模型复杂度 .

学习树结构

现在我们有了衡量树好坏的方法,理想情况下我们要穷举所有可能的树然后选最好的,实际过程中很难,所以我们尝试一次优化树的一个方面. 我们尝试将一片叶子分为两片,然后计算树得分的增加:

这个公式可以分为:

1)  新左叶子的分值 

2) 新右叶子的分值 

3) 原叶子的分值 

4) 新加叶子的正则化项.

我们看到一个重要的事实:  如果增益比\gamma 小,我们宁可不添加该分支,这也是树模型中的剪枝技巧 。通过使用监督学习的原理,我们可以自然得出这些技巧凑效的原因。

对于实际数据,我们通常会搜寻最优的分割。为了更有效率,我们将所有示例排好序,如下图:

一次从左到右的扫描足以计算出所有分割的分值,然后有效找出最好的

注意

加性树模型训练的限制

因为几乎不可能穷举所有情况,所以一次只加一个分割。这种方法在大多数情况下有效,但也有个别情况。对于哪些情况,训练会得到一个退化模型,因为一次只考虑一个特征维度。详见:Can Gradient Boosting Learn Simple Arithmetic?

 

XGBoost总结

现在你理解了什么是提升树,你可能会问,XGBOOST 的介绍呢?XGBOOST 是实现本文原理的一个工具。更重要的是,它在开发中仔细考虑了系统优化还有机器学习原理。这个库的目的在于激发机器计算的上限,提供一个可扩展、可移植、准确的库。确保你尝试过,更重要的是将你的智慧(代码、案例、教程)到社区中

 

本文是一篇自己的翻译,网上还有apachecn的翻译见:https://xgboost.apachecn.org/#/docs/3

XGBoost超详细推导,终于有人讲明白了 这也是篇对原文的翻译+理解

偏差和方差有什么区别?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值