XGBoost原理简介
XGBoost是GBDT的改进和重要实现,主要在于:
- 提出稀疏感知(sparsity-aware)算法。
- 加权分位数快速近似学习算法。
- 缓存访问模式,数据压缩和分片上的实现上的改进。
- 加入了Shrinkage和列采样,一定程度上防止过拟合。
提升算法
XGBoost也是一个加法模型,首先其在目标函数中加入了正则化项:

泰勒级数

yi(t)是第i个实例在第t次迭代的预测值,需要加入 ft来最小化以下目标

通过泰勒二阶展开近似来快速优化目标函数

其中

即l的一阶和二阶导数。移除常数项得到:

定义 Ij = {i|q(xi)=j}作为叶子结点j的实例集合。将上式展开为:

计算权重公式:

带入目标函数得(一阶和二阶导数合并成了一项):

这一项算出的值就是第t棵树要优化目标函数,使其尽量小。下图展示计算过程,目标函数越小越好。

枚举所有可能结构的树是不可能的,通过贪心算法从叶节点开始迭代得添加分支,IL、IR分别是分割点左右分支的实例集,分割的损失下降定义为:

Weighted Quantile Sketch-加权分位
近似算法通过特征百分位点作为划分候选。使集合
代表样本点的第k个特征值和二阶导数。定义排序函数:

上式表示特征值小于z的样本占整体的比例。目标是找到候选切分点{sk1, sk2, ···,skl}使得:

其中ε是近似因子,这意味着有1/ε个候选点,每个数据点权重是hi,下式说明为什么用它做权重:

其中hi即为平方损失的权重,对于大数据集,找到满足条件的候选分裂是非常重要的。以前的分位算法中没有权重,因为加权数据集没有分位数。
为了解决这个问题,XGBoost提出了新颖的分布式加权的分位数算法,作者理论证明它可以处理加权的数据。总的思路是提出一个支持合并和修剪操作的数据结构,每个操作都被证明保持一定的准确性水平。 证明见xgboost-supp.pdf。
Sparsity-aware Split Finding
真实数据很多都是稀疏的数据,有很多原因:1.数据中有缺失值。2.统计中频繁出现0条目。3.人工特征工程造成,例如one-hot。为了算法稀疏感知,XGBoost每个树节点加入了默认方向,如图:

当数据值缺失的时候,样本被划分到默认方向,默认方向是通过学习数据获得的,其算法如下图,关键提升在于只看不缺失的实例进入Ik,所提出的算法将不存在作为缺失值处理,并学习处理缺失值的最佳方向。 通过将枚举限制为恒定的解决方案,当不存在对应于用户指定的值时,也可以应用相同的算法。

大多数现有的树学习算法或者只是针对密集数据进行优化,或者需要特定的程序来处理有限的情况,如分类编码。 XGBoost以统一的方式处理所有的稀疏模式。 更重要的是,作者的方法利用稀疏性使计算复杂度与输入中非缺失条目的数量成线性关系。 下图显示了稀疏感知和对Allstate-10K数据集简单实现的比较。 作者发现稀疏感知算法的运行速度比原始版本快50倍。这证实了稀疏感知算法的重要性。

参考
XGBoost原理-XGBoost A Scalable Tree Boosting System
XGBoost原理简介的更多相关文章
- xgboost原理及应用
1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT 地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboo ...
- storm 原理简介及单机版安装指南——详细版【转】
storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...
- Java进阶(二十四)Java List集合add与set方法原理简介
Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...
- kafka原理简介并且与RabbitMQ的选择
kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...
- InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)
上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 p ...
- 一文读懂机器学习大杀器XGBoost原理
http://blog.itpub.net/31542119/viewspace-2199549/ XGBoost是boosting算法的其中一种.Boosting算法的思想是将许多弱分类器集成在一起 ...
- xgboost原理
出处http://blog.csdn.net/a819825294 1.序 距离上一次编辑将近10个月,幸得爱可可老师(微博)推荐,访问量陡增.最近毕业论文与xgboost相关,于是重新写一下这篇文章 ...
- Nginx 负载均衡原理简介与负载均衡配置详解
Nginx负载均衡原理简介与负载均衡配置详解 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...
- Nginx 反向代理工作原理简介与配置详解
Nginx反向代理工作原理简介与配置详解 by:授客 QQ:1033553122 测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...
随机推荐
- 转载一篇让你全面了解什么是.NET。
转载于:https://www.52abp.com/BlogDetails/10009 阅读文本大概需要 8 分钟. 持续进化的 .NET 这张图即是一个学习的路线图同样他也是 .NET 平台的进化图 ...
- 运行tomcat7w.exe提示指定的服务未安装 解决办法
一.问题重现点击bin下tomcat7w.exe出现如下提示:提示指定的服务未安装 二.原因分析tomcat7.exe和tomcat7w.exe要起作用必须先为这两个文件安装服务.其中tomcat7. ...
- 【Linux常用命令】Linux kill, killall, kill -9,
参考链接 https://blog.csdn.net/zong596568821xp/article/details/77899454 kill + PID kill -9 + PID 加上-9 是 ...
- java——spring中bean的作用域
文章:理解Spring框架中Bean的作用域 博客地址:https://baijiahao.baidu.com/s?id=1610298792072480906&wfr=spider& ...
- Word2Vec详解
Word2Vec详解 word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练:其次,该工具得到的训练结果--词向量(word embedding),可以很好地度量词与词之间的相似性.随着 ...
- Training #2 cell battle (BFS)
Constraints: 1 <= R, C <= 500 1 <= T <= 5 Sample Input: 5 3 5 ##### a...b ##### 3 4 #### ...
- Python3+Appium学习笔记04-自动下载apk
在项目中,app更新后,都会发布新的apk版本,然后去蒲公英对应的网站上扫码下载对应的apk进行测试.所以就在想,通过app参数进行安装时,是否可以先通过代码去拉取一遍最新的apk安装包. 因为学 ...
- CF901C Bipartite Segments[点双+二分+前缀优化]
不想翻译了,直接放luogu翻译 说了没有偶环,也就是说全是奇环,再结合二分图性质,那么暴力的话,固定左端点,增大序号,加点直到产生环就不合法了.也就是说,任何一个环,只要他上面的数全都被加了,就不合 ...
- SARS病毒 (生成函数 + 快速幂)
链接:https://ac.nowcoder.com/acm/contest/992/A来源:牛客网 题目描述 目前,SARS 病毒的研究在世界范围内进行,经科学家研究发现,该病毒及其变种的 DNA ...
- Ubuntu14版桌面突然卡住怎么办
参考:https://blog.csdn.net/hautxuhaihu/article/details/78924926 (1)ctrl+alt+f1...6进入命令行终端.用户名,密码登录. (2 ...