前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[机器学习算法]XGBoost

[机器学习算法]XGBoost

作者头像
TOMOCAT
发布于 2020-06-09 03:33:08
发布于 2020-06-09 03:33:08
9750
举报

简介

XGBoost算法是以CART为基分类器的集成学习方法之一,由于其出色的运算效率和预测准确率在数据建模比赛中得到广泛的应用。与随机森林赋予每一颗决策树相同的投票权重不同,XGBoost算法中下一棵决策树的生成和前一棵决策树的训练和预测相关(通过对上一轮决策树训练准确率较低的样本赋予更高的学习权重来提高模型准确率)。相比于其他集成学习算法,XGBoost一方面通过引入正则项和列抽样的方法提高了模型稳健性,另一方面又在每棵树选择分裂点的时候采取并行化策略从而极大提高了模型运行的速度。

需要提前了解的知识

关于XGBoost本身的原理及相关知识,陈天奇的课件已经写得很完善了,只不过我一直都喜欢将他人的知识用自己的语言阐述从而内化吸收的笨方法。

1.监督学习的相关概念

监督学习简单理解就是研究自带训练标签的数据,通过构造一个目标函数来描述自变量和因变量的映射关系。其中目标函数可抽象为训练误差

和正则项

之和:

其中

叫做损失函数,衡量了预测值和真实值的偏差程度;

叫做正则项,

取值一般为

正则项)或者

正则项)。

2.分类与回归树CART

CART树本身的原理我在此前的文章已经阐述地比较清楚了,这里不再赘述。

决策树引论和CART算法

3.泰勒展开式

处具有

阶连续导数,我们可以用

次多项式逼近函数

公式:

其中

表示泰勒余项,它是

的高阶无穷小。

模型建立与目标函数

XGBoost本身属于监督学习,假设XGBoost模型本身由

CART构成,那么模型可表示如下,其中

表示第

棵树,

表示第

个样本在第

棵树的得分:

需要注意的是,XGBoost中基分类树每个叶子节点都会给出对应的得分,通过加总多棵树的得分实现集成学习。下图以“一个人是否喜欢玩电脑游戏”展示了多棵树如何进行预测(预测分值越高表示越喜欢玩游戏):

image.png

image.png

同大部分机器学习模型一样,XGBoost的目标函数也能表示为损失函数和正则项之和,分别控制模型的准确度和复杂度(这两者往往难以同时最优化,需要进行权衡):

参数优化思路

按照机器学习的思路,给出具体的目标函数之后就是参数求解的过程(通过求解参数表达式使损失函数最小化)。由于

XGBoost模型的参数

CART树组成的向量:

模型的损失函数值

越小表明模型的拟合效果越佳,正则项

越小表明模型的复杂度越低,因此我们的目的就是最小化目标函数

从而求解出参数向量

。 接下来就是如何描述一棵树

的问题,要确定一棵树需要如下两方面的内容:

  • 树的结构,即将样本映射到不同叶子节点的函数
  • 各个叶子节点的分数

在不清楚每棵树的具体结构情况下,直接最优化目标函数是不可能的,XGBoost利用加法模型简化模型目标函数,在前一棵CART基础上训练下一棵决策树:

参数估计

将目标函数最优化的过程通过贪心算法的思想转化为

轮迭代,其中第

轮迭代时的目标函数可表示为:

考虑以均方误差作为损失函数,我们可以将目标函数表示为:

仔细观察上述这个式子,由于求解

时前一棵树

是已知的,因此

也就是常量。因此

就是关于

的二次表达式,为后续的参数求解提供便利。

就是第

棵树由样本集到叶子节点的映射函数,

就是样本对应的某个叶子节点的分数值。

在机器学习竞赛中用过XGBoost的小伙伴肯定还知道该算法可以自定义损失函数,对于一般的损失函数,我们人为定义损失函数一阶微分和二阶微分:

利用泰勒展开式我们可以把目标函数近似化简为:

之前我们提到一棵树

可由它的结构(即样本到叶子节点的映射函数)和每个叶子节点上的分数唯一确定,现在我们给出第

棵树的描述函数:

其中

表示树的结构,

表示每个叶子节点的分数的

维向量,

分别表示训练数据集特征维度和叶子节点数。

image.png

我们再定义树的复杂度

为:

上式出现的

都是自定义惩罚系数,前者用于控制叶子节点的个数,后者用于控制参数向量的模,两者都是在约束CART的复杂度。

代入

的定义到目标函数中,再定义映射到叶子节点

的样本集合为

每一轮迭代中

在给定损失函数下都相当于是常量,其中

表示训练集样本量,我们人为定义

再一次精简一下目标函数:

基于二次函数最优化,我们可以求解出参数和目标函数的最优值:

如何确定树的复杂度

在上一步参数估计中,我们构造了映射到第

个叶子节点的样本集合

,这相当于我们在已知每棵树结构的基础上进行参数估计。 当特征维度较大时,树的结构难以穷尽,因此XGBoost借助普通决策树的贪心算法思路求解“最优”的结构,即从深度为

开始,每次split对目标函数的影响为:

中括号内第一部分表示split后左叶子节点的得分,第二部分表示右叶子节点的得分,第三部分表示不进行split的得分。

是我们引入的复杂度惩罚因子,衡量了额外叶子节点带来的复杂度损失。 自此求解最优树结构的思想和CART几乎一致,这里便不再赘述。求解完树结构后,根据前面参数估计的内容我们可以很方便地给出来每个叶子节点的权重。

Reference

[1] https://xgboost.readthedocs.io/en/latest/tutorials/model.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java落地AI模型案例分享:xgboost模型java落地
XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。
AI拉呱
2024/10/01
2630
java落地AI模型案例分享:xgboost模型java落地
终于有人说清楚了--XGBoost算法
XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。
mantch
2019/07/30
6.9K0
终于有人说清楚了--XGBoost算法
【白话机器学习】算法理论+实战之Xgboost算法
如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法:
黄博的机器学习圈子
2020/05/26
3.2K0
【白话机器学习】算法理论+实战之Xgboost算法
XGBoost原理与实现
XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。
大数据技术与机器学习
2019/11/20
7720
机器学习|XGBoost
接下来几周的时间,我们将会推出关于《西瓜书》读书笔记的连载文章,updating~
数据山谷
2020/07/21
5710
机器学习|XGBoost
通俗的将Xgboost的原理讲明白
初看Xgboost,翻了多篇博客发现关于xgboost原理的描述实在难以忍受,缺乏逻辑性,写一篇供讨论。 观其大略,而后深入细节,一开始扎进公式反正我是觉得效率不高,还容易打消人的积极性。 首先说下决策树 决策树是啥? 举个例子,有一堆人,我让你分出男女,你依靠头发长短将人群分为两拨,长发的为“女”,短发为“男”,你是不是依靠一个指标“头发长短”将人群进行了划分,你就形成了一个简单的决策树,官方细节版本自行baidu或google 划分的依据是啥? 这个时候,你肯定问,为什么用“头发长短”划分啊,我可
机器学习AI算法工程
2018/03/30
3.8K0
通俗的将Xgboost的原理讲明白
xgboost的原理没你想像的那么难
xgboost 已然火爆机器学习圈,相信不少朋友都使用过。要想彻底掌握xgboost,就必须搞懂其内部的模型原理。这样才能将各个参数对应到模型内部,进而理解参数的含义,根据需要进行调参。 本文的目的就是让大家尽可能轻松地理解其内部原理。主要参考文献是陈天奇的这篇文章introduction to xgboost(https://xgboost.readthedocs.io/en/latest/model.html)。在我看来,这篇文章是介绍xgboost最好的,没有之一。英语好的同学建议直接看英文,若有
用户1332428
2018/03/09
1.2K0
xgboost的原理没你想像的那么难
【机器学习】xgboost系列丨xgboost原理及公式推导
本文主要针对xgboost的论文原文中的公式细节做了详细的推导,对建树过程进行详细分析。
黄博的机器学习圈子
2021/01/11
1.8K0
【机器学习】xgboost系列丨xgboost原理及公式推导
xgboost的原理没你想像的那么难
作者:milter 链接:https://www.jianshu.com/p/7467e616f227
zenRRan
2019/11/19
3260
博客 | 干货 | 一文读懂横扫Kaggle的XGBoost原理与实战(一)
首先说一下,大家的催更我都有看到,无奈我请假出差了,预计十来天,这期间也会尽力更新文章,感谢大家的支持。今天发一篇北大18级硕士Jason Cai关于xgboost的文章,后续还有相关内容的进阶。首先说一下,xgboost也算是集成学习的一种。正文如下:
AI研习社
2018/12/26
1.1K1
一文读懂机器学习大杀器XGBoost原理
【磐创AI导读】:本文详细介绍了Xgboost的原理。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2018/08/03
3.7K0
一文读懂机器学习大杀器XGBoost原理
GBDT与XGBOOST串讲
最近,一直被GBDT和XGBOOST烦恼,产生了如下的问题,由此产生了这篇文章。
张小磊
2020/09/21
6940
GBDT与XGBOOST串讲
一文详尽XGBOOST的前世今生
XGBOOST:简单来说是集成了很多个基学习器(如Cart决策树)的模型。它是集成学习的串行方式(boosting)的一种经典实现,是广泛应用在工业、竞赛上的一大神器。
算法进阶
2022/06/01
8950
一文详尽XGBOOST的前世今生
面试、笔试题集:集成学习,树模型,Random Forests,GBDT,XGBoost
分类和回归树(简称 CART)是 Leo Breiman 引入的术语,指用来解决分类或回归预测建模问题的决策树算法。它常使用 scikit 生成并实现决策树: sklearn.tree.DecisionTreeClassifier 和 sklearn.tree.DecisionTreeRegressor 分别构建分类和回归树。
流川疯
2022/05/10
9890
面试、笔试题集:集成学习,树模型,Random Forests,GBDT,XGBoost
决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。下图是决策树的一个示例图:
统计学家
2019/09/03
1.7K0
决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
从决策树到GBDT梯度提升决策树和XGBoost
决策树可以转换成if-then规则的集合,也可以看作是定义在特征空间划分类的条件概率分布。决策树学习算法包括三部分:特征选择,数的生成和数的剪枝。最大优点: 可以自学习。在学习的过程中,不需要使用者了解过多背景知识,只需要对训练实例进行较好的标注,就能够进行学习。显然,属于有监督学习。 常用有一下三种算法:
大鹅
2021/06/15
1.2K0
从决策树到GBDT梯度提升决策树和XGBoost
机器学习7:集成学习--XGBoost
对于XGBoost算法原理看陈天奇的PPT和一份算法实战指导文档就够了(文末附网盘链接)。
用户5473628
2019/08/08
1.4K0
机器学习7:集成学习--XGBoost
【ML】项目中最主流的集成算法XGBoost 和 LightGBM
本文是决策树的第三篇,主要介绍基于 Boosting 框架的主流集成算法,包括 XGBoost 和 LightGBM。
yuquanle
2019/11/25
6420
推荐收藏 | 10道XGBoost面试题送给你
XGBoost的威名想必大家都有所耳闻,它不仅是数据科学竞赛神器,在工业界中也被广泛地使用。本文给大家分享珍藏了多年的XGBoost高频面试题,希望能够加深大家对XGBoost的理解,更重要的是能够在找机会时提供一些帮助。
Sam Gor
2019/10/08
1.1K0
推荐收藏 | 10道XGBoost面试题送给你
珍藏版 | 20道XGBoost面试题
XGBoost的威名想必大家都有所耳闻,它不仅是数据科学竞赛神器,在工业界中也被广泛地使用。本文给大家分享珍藏了多年的XGBoost高频面试题,希望能够加深大家对XGBoost的理解,更重要的是能够在找机会时提供一些帮助。
石晓文
2019/09/09
12.8K0
珍藏版 | 20道XGBoost面试题
相关推荐
java落地AI模型案例分享:xgboost模型java落地
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档