xgboost 算法原理

article/2025/9/13 8:41:51

1、xgboost是什么

全称:eXtreme Gradient Boosting
作者:陈天奇(华盛顿大学博士)
基础:GBDT
所属:boosting迭代型、树类算法。
适用范围:分类、回归
优点:速度快、效果好、能处理大规模数据、支持多种语言、支 持自定义损失函数等等。
缺点:发布时间短(2014),工业领域应用较少,待检验

2、基础知识,GBDT

xgboost是在GBDT的基础上对boosting算法进行的改进,内部决策树使用的是回归树,简单回顾GBDT如下:
这里写图片描述

回归树的分裂结点对于平方损失函数,拟合的就是残差;对于一般损失函数(梯度下降),拟合的就是残差的近似值,分裂结点划分时枚举所有特征的值,选取划分点。
最后预测的结果是每棵树的预测结果相加。

3、xgboost算法原理知识

3.1 定义树的复杂度

这里写图片描述

把树拆分成结构部分q和叶子权重部分w。
树的复杂度函数和样例:
这里写图片描述
定义树的结构和复杂度的原因很简单,这样就可以衡量模型的复杂度了啊,从而可以有效控制过拟合。

3.2 xgboost中的boosting tree模型

这里写图片描述

和传统的boosting tree模型一样,xgboost的提升模型也是采用的残差(或梯度负方向),不同的是分裂结点选取的时候不一定是最小平方损失。
这里写图片描述

3.3 对目标函数的改写
这里写图片描述

最终的目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数。这么写的原因很明显,由于之前的目标函数求最优解的过程中只对平方损失函数时候方便求,对于其他的损失函数变得很复杂,通过二阶泰勒展开式的变换,这样求解其他损失函数变得可行了。很赞!
当定义了分裂候选集合的时候,这里写图片描述可以进一步改目标函数。分裂结点的候选响集是很关键的一步,这是xgboost速度快的保证,怎么选出来这个集合,后面会介绍。
这里写图片描述

求解:
这里写图片描述

3.4 树结构的打分函数
Obj代表了当指定一个树的结构的时候,在目标上面最多减少多少。(structure score)

这里写图片描述

对于每一次尝试去对已有的叶子加入一个分割
这里写图片描述
这样就可以在建树的过程中动态的选择是否要添加一个结点。
这里写图片描述
假设要枚举所有x < a 这样的条件,对于某个特定的分割a,要计算a左边和右边的导数和。对于所有的a,我们只要做一遍从左到右的扫描就可以枚举出所有分割的梯度和GL、GR。然后用上面的公式计算每个分割方案的分数就可以了。

3.5 寻找分裂结点的候选集
1、暴力枚举

2、近似方法 ,近似方法通过特征的分布,按照百分比确定一组候选分裂点,通过遍历所有的候选分裂点来找到最佳分裂点。
两种策略:全局策略和局部策略。在全局策略中,对每一个特征确定一个全局的候选分裂点集合,就不再改变;而在局部策略中,每一次分裂 都要重选一次分裂点。前者需要较大的分裂集合,后者可以小一点。对比补充候选集策略与分裂点数目对模型的影响。 全局策略需要更细的分裂点才能和局部策略差不多

3、Weighted Quantile Sketch

这里写图片描述
陈天奇提出并从概率角度证明了一种带权重的分布式的Quantile Sketch。

4、xgboost的改进点总结

1、目标函数通过二阶泰勒展开式做近似
2、定义了树的复杂度,并应用到目标函数中
3、分裂结点处通过结构打分和分割损失动态生长
4、分裂结点的候选集合通过一种分布式Quantile Sketch得到
5、可以处理稀疏、缺失数据
6、可以通过特征的列采样防止过拟合

5、参数

xgboost 有很多可调参数,具有极大的自定义灵活性。比如说:
(1)objective [ default=reg:linear ] 定义学习任务及相应的学习目标,可选的目标函数如下:
“reg:linear” –线性回归。
“reg:logistic” –逻辑回归。
“binary:logistic” –二分类的逻辑回归问题,输出为概率。
“multi:softmax” –处理多分类问题,同时需要设置参数num_class(类别个数)
(2)’eval_metric’ The choices are listed below,评估指标:
“rmse”: root mean square error
“logloss”: negative log-likelihood
(3)max_depth [default=6] 数的最大深度。缺省值为6 ,取值范围为:[1,∞]

参考:
官方文档:
http://xgboost.readthedocs.io/en/latest/

Github:
https://github.com/dmlc/xgboost

Xgboost论文:
http://cran.fhcrc.org/web/packages/xgboost/vignettes/xgboost.pdf

陈天奇的boosting tree的ppt:
http://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

Xgboost调参:
http://blog.csdn.net/wzmsltw/article/details/50994481

GBDT资料:
http://www.jianshu.com/p/005a4e6ac775


http://chatgpt.dhexx.cn/article/11u5NJoU.shtml

相关文章

xgboost入门与实战(原理篇)

xgboost入门与实战(原理篇) 前言: xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,其中包括两个以上kaggle比赛的夺冠方案。在工业界规模方面,x…

xgboost原理分析以及实践

摘要 本文在写完GBDT的三篇文章后本来就想写的&#xff0c;但一直没有时间&#xff0c;终于刚好碰上需要&#xff0c;有空来写这篇关于xgboost原理以及一些实践的东西&#xff08;这里实践不是指给出代码然后跑结果&#xff0c;而是我们来手动算一算整个xgboost流程&#xff0…

机器学习—XGboost的原理、工程实现与优缺点

文章目录 一、xgboost简介二、xgboost原理1.从目标函数生成一棵树1.1学习第t颗树1.2xgboost的目标函数1.3泰勒公式展开1.4定义一棵树1.5定义树的复杂度1.6叶子节点归组1.7树结构打分 2.一棵树的生成细节2.1最优切分点划分算法2.1.1贪心算法2.1.2近似算法 2.2加权分位数缩略图2.…

XGBoost原理介绍

1. Introduction 在这篇文章中&#xff0c;我将介绍XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;&#xff0c;一种tree boosting的可扩展机器学习系统。这个系统可以作为开源的软件包使用。该系统的影响已经在大量的机器学习和数据挖掘挑战中被广泛地认可。这些…

XGBoost算法介绍

XGBoost算法介绍 一、简介二、基本原理三、目标函数三、节点分裂3.1 贪心算法3.2 近似算法 四、其它特点4.1 缺失值处理4.2 防止过拟合 五、总结 一、简介 XGBoost(eXtreme Gradient Boosting)又叫极度梯度提升树&#xff0c;是boosting算法的一种实现方式。针对分类或回归问题…

xgboost原理(无推导就轻易理解)

一、模型训练过程 贪心优化算法。多颗决策树串行训练&#xff0c;第一棵树拟合训练目标、第二颗树拟合前面的残差、第三棵树拟合前两棵树留下的残差。 1、残差来源&#xff1a; &#xff08;1&#xff09;第k颗树训练时&#xff0c;行采样列采样&#xff08;即仅有部分样本、…

一文读懂机器学习大杀器XGBoost原理

【导读】XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。讲解其原理前,先讲解一下CART回归树…

XGBoost详解(原理篇)

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、XGBoost简介 二、XGBoost原理 1、基本组成元素 2、整体思路 &#xff08;1&#xff09;训练过程——构建XGBoost模型…

XGBoost 原理介绍

1.简介 XGBoost的全称是eXtreme Gradient Boosting&#xff0c;它是经过优化的分布式梯度提升库&#xff0c;旨在高效、灵活且可移植。XGBoost是大规模并行boosting tree的工具&#xff0c;它是目前最快最好的开源 boosting tree工具包&#xff0c;比常见的工具包快10倍以上。…

「Flink实时数据分析系列」6.基于时间和窗口的算子

来源 | 「Stream Processing with Apache Flink」 作者 | Fabian Hueske and Vasiliki Kalavri 翻译 | 吴邪 大数据4年从业经验&#xff0c;目前就职于广州一家互联网公司&#xff0c;负责大数据基础平台自研、离线计算&实时计算研究 校对 | gongyouliu 编辑 | auroral-L 全…

大数据Hadoop之——Flink DataStream API 和 DataSet API

文章目录 一、DataStream API概述二、什么是DataStream &#xff1f;三、DataStream 数据处理过程1&#xff09;Data Sources&#xff08;数据源&#xff09;1、Data Sources 原理2、Data Sources 实现方式1&#xff09;基于文件2&#xff09;基于套接字3&#xff09;基于集合4…

数据挖掘常用算法整理

前言&#xff1a; 找工作时&#xff08;IT行业&#xff09;&#xff0c;除了常见的软件开发以外&#xff0c;机器学习岗位也可以当作是一个选择&#xff0c;不少计算机方向的研究生都会接触这个&#xff0c;如果你的研究方向是机器学习/数据挖掘之类&#xff0c;且又对其非常感…

C++ 26 常用算法

目录 一、概述 1.1 常用遍历算法 1.1.1 算法简介 1.1.2 for_each遍历算法 1.1.3 transform遍历算法 1.2 常用查找算法 1.2.1 算法简介 1.2.2 find 查找算法 1.2.3 find_if 查找算法 1.2.4 adjacent_find 查找算法 1.2.5 binary_search 查找算法 1.2.6 count 查找算法…

干货 | 轻松看懂机器学习十大常用算法

通过本篇文章可以对ML的常用算法有个常识性的认识&#xff0c;没有代码&#xff0c;没有复杂的理论推导&#xff0c;就是图解一下&#xff0c;知道这些算法是什么&#xff0c;它们是怎么应用的&#xff0c;例子主要是分类问题。 每个算法都看了好几个视频&#xff0c;挑出讲的最…

常用十种算法

目录 1、二分查找算法&#xff08;非递归&#xff09;二分查找算法(非递归)介绍二分查找算法(非递归)代码实现 2、分治算法分治算法介绍分治算法的基本步骤分治算法最佳实践汉诺塔 3、动态规划动态规划算法介绍应用场景——背包问题 4、KMP算法*next数组生成KMP 算法介绍应用场…

Java常用算法

Java常用算法 一、二分查找算法&#xff08;非递归&#xff09; 1、介绍 ​ 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等)&#xff0c;将数列排序后再进行查找。 ​ 二分查找法的运行时间为对数时间O(㏒₂n) &#xff0c;即查找到需要的目标位置最多只需要㏒…

五大常用算法学习笔记

一。分治算法&#xff1a;快速排序、归并排序、大整数乘法、二分查找、递归&#xff08;汉诺塔&#xff09; 基本概念&#xff1a;把一个复杂的问题分成若干个相同或相似的子问题&#xff0c;再把子问题分成更小的子问题… &#xff0c; 知道最后子问题可以简单的直接求解&…

常见算法

首页 论坛 新闻 文章 下载 源码 网友作品 合作开发 招聘 刻盘服务 编程爱好者光盘 请登陆或者注册新用户 用户名 密 码 记住密码 注册新用户 忘记密码了 您所在位置&#xff1a;编程爱好者论坛 — C/C语言讨论区 — 我见到过的一些常用算法 C/C语言讨论区&#xff1a;…

最常用算法汇总(一)

一、贪心算法 贪心算法&#xff08;又称贪婪算法&#xff09;是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整…

十大常用算法

前言 最近在研究一些经常用到的东西想把它们做一个汇总&#xff0c;想了想用到最多的应该是排序算法&#xff0c;所以对排序算法做了个总结&#xff0c;并自己用C实现了一下。 一、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 非线性时间比较类排序…