xgboost实例_XGBoost模型(1)——原理介绍

XGBoost的全称是 eXtremeGradient Boosting,2014年2月诞生的专注于梯度提升算法的机器学习函数库,作者为华盛顿大学研究机器学习的大牛——陈天奇。他在研究中深深的体会到现有库的计算速度和精度问题,为此而着手搭建完成 xgboost 项目。xgboost问世后,因其优良的学习效果以及高效的训练速度而获得广泛的关注,并在各种算法大赛上大放光彩。

原始论文:https://arxiv.org/pdf/1603.02754.pdf

1.【 基本概念】

监督学习

XGBoost 主要是用来解决有监督学习问题,此类问题利用包含多个特征的训练数据

,来预测目标变量
。在我们深入探讨GBDT前,我们先来简单回顾一下监督学习的一些基本概念。

模型与参数

在监督学习中模型(model)表示一种数学函数,通过给定

来对
进行预测。以最常见的线性模型(linear model)举例来说,模型可以表述为
,这是一个输入特性进行线性加权的函数。那么针对预测值的不同,可以分为回归或者分类两种。

在监督学习中参数(parameters)是待定的部分,我们需要从数据中进行学习得到。在线性回归问题中,参数用
来表示。

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

根据对

的不同理解,我们可以把问题分为,回归、分类、排序等。我们需要针对训练数据,尝试找到最好的参数。为此,我们需要定义所谓的目标函数,此函数用来度量参数的效果。

这里需要强调的是,目标函数必须包含两个部分:训练误差和正则化。

其中,L表示训练误差函数,

表示正则项。训练误差用来衡量模型在训练数据上的预测能力。比较典型的有用均方差来衡量。

另外针对逻辑回归,比较常见的损失函数为Logistic函数:

正则项是用来控制模型的复杂度,以防止过拟合(overfitting),XGBoost的正则项稍后解释。

CART回归树

CART中的一个例子,一类分类器用来辨别某人是否喜欢计算机游戏。

bb29112fef8b7fe1f4a9210969ff0281.png

我们把家庭中的成员分到了不同的叶子节点,同时每个叶子节点上都有一个分数。CART与决策树相比,细微差别在于CART的叶子节点仅包含判断分数。在CART中,相比较于分类结果,每个叶子节点的分数给我们以更多的解释。

组合树模型

通常情况下,在实践中往往一棵树是不够用的。这个时候往往需要把多棵树的预测结果综合起来,这就是所谓的组合树模型(ensemble)。

6cab290da386159345e362556e56db5a.png

上面就是由两棵树组成的组合树的例子。每棵树上的分数简单相加就得到了最终的分数。用数学式子可以表达如下:

表示树的数目,
是函数空间
中的一个函数,
F 表示CART的所有可能集合。所以我们的优化目标可以写作:

现在问题来了,随机森林对应的模型是什么呢?对了,也是组合树模型。所以在模型的表述上,随机森林和提升树是一样的,他们俩的区别只是在于如何训练

需要指出的是: 这样的模型很难用SGD方法训练,难以同时获得K棵回归树

2. 【XGBoost】

基本思路

假设我们有如下的目标函数(需要切记目标函数必须包含损失函数及正则项)

增量训练 方式(Additive Training)

首先我们需要问的是,这些树的参数是什么?我们会发现,我们所要学习的就是这些f i方法,每个方法中定义树的结构以及叶子节点的分数。这比传统最优化问题要更难,传统最优化问题我们可以通过梯度来解决。而且我们无法在一次训练所有的树。相反,我们用增量(additive)的方式:每一步我们都是在前一步的基础上增加一棵树,而新增的这棵树是为修复上一颗树的不足。我们把第t步的预测用

表示,这样我们就有了:

其中,在第t步,可以把前面的模型当作已知值,只关心如何获得f t即可

更具体的,在每一步中如何确定哪棵树是我们需要的呢?一个很自然的想法就是,增加这棵树有助于最小化我们的目标函数:

注意: constant代表第t步之前的t-1的已知模型的复杂度,视为常数。

此时,第t轮的预测:

4df58956fb3b4a58900259a193054f25.png

如果,我们用MSE(均方差)作为损失函数 L,优化目标就变成了:

但是对于其他形式的损失函数 L (XGBoost支持自定义损失函数),就很难推导出这么友好的损失函数式子了。那么针对这种情形,我们就用泰勒展开公式:(将L(.)进行泰勒展开,

)其中,
取值
取值
来逼近:

其中

定义如下, (第t代时,
是已知值,因此 它们都是常数):

优化目标函数:

删除常数项,那么在

代,XGBoost模型的
目标函数就变成:

(Eq.1)

式子只需要考虑

。这就是xgboost为什么能支持自定义损失函数的原因。我们能够优化每一个损失函数,包括逻辑回归和加权逻辑回归,只需要把对应的
作为输入传入即可。

模型的复杂性度量方法

回归树的重定义:

我们将CART回归树定义为“由叶子节点的值组成的向量

叶子索引映射函数

,把实例
x 映射到其中一个叶子节点上,其定义为:
,
是树的叶子节点总数。

则回归树可以定义为:

例子:回归树的表示:

b59d6cab75e99098eb11ee13b63eff4d.png

在XGBoost中,我们用如下公式定义回归树的复杂度:

39b32736bc2159e8f069794034da62ce.png

XGBoost如何求解优化目标?

现在,XGBoost的优化目标Eq.(1)中的除

以外的值都是可以求解的,怎么求解该优化问题呢?

XGBoost采用和大多数决策树一致的方法,通过定义某种评价指标,从所有可能的候选树中,选择指标最优者作为第t 轮迭代的树

, 作为XGBoost的优化'目标Eq.(1)的解。

把上面的一些定义代入目标Eq.(1),我们写出第

步树的目标值:

这里

表示每个映射到第jj个叶子节点对应的数据样本。需要注意的是,因为映射到相同叶子节点上的数据样本他们的分数是相同的,所以在第二行我们改变了一下求和顺序。

同时我们令

以及
,那么上述公式简化为:

在上述式子中,每一个

是相互独立的,那么针对一元二次方程
而言,可以比较容易求出当新增的这棵树的结构
已知的情况下,目标函数最小值下的

Eq.(2)

上述第二个式子计算的是回归树

的评分,用于评价其优劣:

c2ee6f09a5a92d760e2f4601ff718ba7.png

如果上面的式子看着比较复杂的话,那么根据上面的这幅图来看如何计算这些分数,就会显得更直观些。一旦树的结构(q, T) 已知的话,我们只需要通过计算每个节点上的

,然后把各个叶子节点上的这些数值加起来,用上述方程式就可以计算这棵树的优劣了。

初步的XGBoost算法——求解第t轮迭代的最优回归树

b59643d92ca1845370b9f0c42224be76.png

因为需要遍历的情况实在是太多了。所以我们来寻求一种贪婪的解法

07bbc85d24933c458aaf37a720ec2625.png

注意,最后一项

的系数为1, 因为左右子结点只比父结点多一个叶子。

怎么找到最优分割(参考CART树)

2d6353d117ea14002be53e5a0af0476b.png

具体步骤:

f25e526cf445f6a7418f46e6d48e1a8e.png

寻找一棵最优回归树的复杂度

5d67ca5db02624d133b131fd9d835905.png

关于树的停止生成和修剪方法:

17329773c241cd6b296000b561c8813c.png

(待续...)

参考文献:

  1. 陈运文:XGBoost原理解析

2. https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值