XGBoost: A Scalable Tree Boosting System

本文深入解析了XGBoost的设计原理和优化技术,包括目标函数、稀疏数据处理、近似算法、系统设计等。文章介绍了如何通过优化算法减少过拟合,如缩减和列采样,并探讨了缓存感知访问和外存计算策略,以应对大规模数据处理挑战。
摘要由CSDN通过智能技术生成

系统设计那里不是很明白。

ABSTRACT

提出xgboost,一个端到端的梯度提升算法的实现。具有如下特点:
1.提出稀疏感知算法来处理稀疏数据
2.加权分位点概要算法进行近似
3.在缓存命中模式、数据压缩和分片上的创新

目标函数

在这里插入图片描述
第一部分是损失函数,用来拟合label,第二部分是正则项,用来防止过拟合。

去掉正则项之后,目标函数就是传统的GBDT。

GBDT 算法通过加性学习,每轮迭代学习一棵CART树来优化损失函数,并将新的树加入到模型中。
在这里插入图片描述
对该损失函数进行泰勒二阶展开,如下
在这里插入图片描述
其中,一阶梯度和二阶梯度如下:
在这里插入图片描述
在这里插入图片描述

去掉常数项,损失函数变成如下形式:
在这里插入图片描述
将上式由样本维度改写成叶节点维度:
在这里插入图片描述

在这里插入图片描述
表示叶子节点j上的样本集合。

假设树模型结构固定,那么每个叶子节点的最优权重为:
在这里插入图片描述
并求得此时的最优损失函数:
在这里插入图片描述
文中给出了最优损失函数的计算的一个示例:
在这里插入图片描述
每个样本计算一阶和二阶梯度,得到树结构之后即可计算最优损失函数。

由于树结构不可能都遍历一遍,文中使用贪心算法,从根节点开始每次迭代都加入一个分支。并使用如下公式评估候选切分点

在这里插入图片描述
即切分前的损失函数减去切分后左右子节点的损失函数之和,即使用该切分点划分后损失函数的降幅。

缩减和列采样

这两个方法也是用来防止过拟合的。

缩减(shrinkage)类似学习率,减小单个tree的影响。

列采样是随机森林的做法。 文中提到,列采样比行采样更能防止过拟合。

切分点查找算法

精确贪心算法

在这里插入图片描述
k表示特征。
该算法遍历每个特征的每个可能的切分点。
在遍历前需要对样本的特征值进行排序。
复杂度为 m ∗ n ∗ l o g ( n ) m*n*log(n) mnlog(n)

近似算法

精确算法在数据无法全部放入内存和分布式环境下 效率都比较低,为此有了如下的近似算法。

即,首先在查找候选切分点之前计算每个特征的分位点,分为全部模式和局部模式。
然后,在查找切分点时将连续特征分到对应的特征分桶(分桶即使用上面的分位点进行切分的)中,然后聚合每个分桶中的统计值(一阶梯度和二阶梯度)算出最优的切分点(分位点)。
在这里插入图片描述
s k , v s_k,v sk,v表示特征k的第v个分位点。

前面提到,有两个模式,一个是全局模式。该模式在初始化阶段就算出所有特征的分位点。然后后面在所有分裂的地方都使用这些分位点。
局部模式,或者叫本地模式。即在每次分裂的时候都再算一遍分位点。明显全局模式需要的计算更少,但是需要更多的分位点来保证选出来的切分点是比较精确的。 后面也有实验证明,全局模式在分位点足够多时可以达到和本地模式一样的效果。
在这里插入图片描述
xgboost 支持单机模式下的精确查找和所有场景(分布式、单机和单机数据无法放入内存?)下的近似查找。

加权分位点概要算法

顾名思义,这个算法不是简单的分位点作为候选切分点,而是使用了权重。这个权重就是样本的二阶梯度。
使用二阶梯度的原因后面说。
先说下使用二阶梯度计算分位点的逻辑:
在这里插入图片描述
上式表示第k个特征值小于z时 使用二阶梯度作为权重时的带权分位点。
在这里插入图片描述
表示样本的第k个特征和对应的二阶梯度。
根据上式,带权分位点满足如下条件:
在这里插入图片描述

ϵ \epsilon ϵ 表示近似参数,对应的切分点个数为 1 / ϵ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值