机器学习集成学习进阶Xgboost算法原理

简介: 机器学习集成学习进阶Xgboost算法原理

1 最优模型的构建方法

XGBoost(Extreme Gradient Boosting)全名叫极端梯度提升树,XGBoost是集成学习方法的王牌,在Kaggle数据挖掘比赛中,大部分获胜者用了XGBoost。


XGBoost在绝大多数的回归和分类问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。


我们在前面已经知道,构建最优模型的一般方法是最小化训练数据的损失函数。


我们用字母 L表示损失,如下式:


f5a3ddd7ca7bb4ec42f9d2793a518b96.jpg


其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情况的一种毫无遗漏的假设集合。


N是所有样本数,L代表损失函数,yi代表目标值,f(xi)代表预测值。


式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。当训练数据较小时,模型很容易出现过拟合问题。


因此,为了降低模型的复杂度,常采用下式:


1383db7b2d8a257f14ae9bc4de492b5b.jpg


其中 J(f)为模型的复杂度,


式(2.1)称为结构风险最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测 。


应用:


决策树的生成和剪枝分别对应了经验风险最小化和结构风险最小化,

XGBoost的决策树生成是结构风险最小化的结果,后续会详细介绍。

2 XGBoost的目标函数推导

2.1 目标函数确定

目标函数,即损失函数,通过最小化损失函数来构建最优模型。


由前面可知, 损失函数应加上表示模型复杂度的正则项,且XGBoost对应的模型包含了多个CART树,因此,模型的目标函数为:

dd7811d83286eec8a636794e2abb6907.jpg



(3.1)式是正则化的损失函数;


其中yi是模型的实际输出结果,19e60f4b996839c217948964e3ed42cd.jpg是模型的输出结果;


等式右边第一部分是模型的训练误差,第二部分是正则化项,这里的正则化项是K棵树的正则化项相加而来的。


2.2 CART树的介绍


279f6480bb8a8ee5a23d85315cd9274b.jpg

上图为第K棵CART树,确定一棵CART树需要确定两部分,


第一部分就是**树的结构,**这个结构将输入样本映射到一个确定的叶子节点上,记为fk(x;


第二部分就是各个叶子节点的值,q(x)表示输出的叶子节点序号,wq(x)表示对应叶子节点序号的值。


由定义得:


d37ce821b74a25162028ecbb6a1502b5.jpg


2.3 树的复杂度定义

2.3.1 定义每课树的复杂度

XGBoost法对应的模型包含了多棵cart树,定义每棵树的复杂度:


e1f3062ba263b906bf4b7c84109a80c9.jpg


其中T为叶子节点的个数,||w||为叶子节点向量的模 。γ表示节点切分的难度,λ表示L2正则化系数。


2.3.2 树的复杂度举例

假设我们要预测一家人对电子游戏的喜好程度,考虑到年轻和年老相比,年轻更可能喜欢电子游戏,以及男性和女性相比,男性更喜欢电子游戏,故先根据年龄大小区分小孩和大人,然后再通过性别区分开是男是女,逐一给各人在电子游戏喜好程度上打分,如下图所示:


dfb097916a9a4f2b9a12e422398b82ce.jpg


就这样,训练出了2棵树tree1和tree2,类似之前gbdt的原理,两棵树的结论累加起来便是最终的结论,所以:


小男孩的预测分数就是两棵树中小孩所落到的结点的分数相加:2 + 0.9 = 2.9。

爷爷的预测分数同理:-1 + (-0.9)= -1.9。

具体如下图所示:


d49b5aa7f74477c49e73f893cda495ad.jpg


如下例树的复杂度表示:


d7239b69009c0b4b769d832d4aa0f755.jpg


2.4 目标函数推导

根据(3.1)式,共进行t次迭代的学习模型的目标函数为:

f6ce612d608ea96213906d493a3327f5.jpg



由前向分布算法可知,前t-1棵树的结构为常数

929340f8cba89f16e0fb63f63208d9c1.jpg



我们知道,泰勒公式的二阶导近似表示:


aa3b0c6bd7848ac24211b4951f763885.jpg


1c1c4bd7e0e87bf169b49281e862413d.jpg 为Δx , 则(3.5)式的二阶近似展开:


6d175af0c4e5f30fb981845541fbea5e.jpg


其中:


d565326b71891c5e7284049b5a10857b.jpg


gi和hi分别表示预测误差对当前模型的一阶导和二阶导;

0ece71b9a3c10598f478d9f2e9acf8c2.jpg

表示前t-1棵树组成的学习模型的预测误差。


当前模型往预测误差减小的方向进行迭代。


忽略(3.8)式常数项,并结合(3.4)式,得:


ca3f5cc0a39c56219253879e4b58193e.jpg


通过(3.2)式简化(3.9)式:


ea5825a1bcd4a3a1029a8784be68de8e.jpg


(3.10)式第一部分是对所有训练样本集进行累加,


此时,所有样本都是映射为树的叶子节点,


所以,我们换种思维,从叶子节点出发,对所有的叶子节点进行累加,得:



11b734fe1d7b540f1da1a584e330a798.jpg

Gj 表示映射为叶子节点 j 的所有输入样本的一阶导之和,同理,Hj表示二阶导之和。


得:


019dcdefc753d61cc5e0be5c6c8b045b.jpg


对于第 t 棵CART树的某一个确定结构(可用q(x)表示),其叶子节点是相互独立的,


Gj 和Hj是确定量,因此,(3.12)可以看成是关于叶子节点w的一元二次函数 。


最小化(3.12)式,得:


633f053caf3fb718a82a2e34e58136c0.jpg


把(3.13)带入到(3.12),得到最终的目标函数:


b25bb6977cc3c2ce0e3aa99481504292.jpg


(3.14)也称为打分函数(scoring function),它是衡量树结构好坏的标准,


值越小,代表这样的结构越好 。

我们用打分函数选择最佳切分点,从而构建CART树。

3 XGBoost的回归树构建方法

3.1 计算分裂节点

在实际训练过程中,当建立第 t 棵树时,XGBoost采用贪心法进行树结点的分裂:


从树深为0时开始:


对树中的每个叶子结点尝试进行分裂;

每次分裂后,原来的一个叶子结点继续分裂为左右两个子叶子结点,原叶子结点中的样本集将根据该结点的判断规则分散到左右两个叶子结点中;

新分裂一个结点后,我们需要检测这次分裂是否会给损失函数带来增益,增益的定义如下:


dbc15c0a0de0e1fa7fcf4b2c6a5a3c70.jpg

如果增益Gain>0,即分裂为两个叶子节点后,目标函数下降了,那么我们会考虑此次分裂的结果。


那么一直这样分裂,什么时候才会停止呢?


3.2 停止分裂条件判断

情况一:上节推导得到的打分函数是衡量树结构好坏的标准,因此,可用打分函数来选择最佳切分点。首先确定样本特征的所有切分点,对每一个确定的切分点进行切分,切分好坏的标准如下:


2b7ea9b2582e8222b5102ecd630d1b1d.jpg


Gain表示单节点obj与切分后的两个节点的树obj之差,

遍历所有特征的切分点,找到最大Gain的切分点即是最佳分裂点,根据这种方法继续切分节点,得到CART树。

若 γ 值设置的过大,则Gain为负,表示不切分该节点,因为切分后的树结构变差了。

γ 值越大,表示对切分后obj下降幅度要求越严,这个值可以在XGBoost中设定。

情况二:当树达到最大深度时,停止建树,因为树的深度太深容易出现过拟合,这里需要设置一个超参数max_depth。


情况三:当引入一次分裂后,重新计算新生成的左、右两个叶子结点的样本权重和。如果任一个叶子结点的样本权重低于某一个阈值,也会放弃此次分裂。这涉及到一个超参数:最小样本权重和,是指如果一个叶子节点包含的样本数量太少也会放弃分裂,防止树分的太细,这也是过拟合的一种措施。


4 XGBoost与GDBT的区别

区别一:

XGBoost生成CART树考虑了树的复杂度,

GDBT未考虑,GDBT在树的剪枝步骤中考虑了树的复杂度。

区别二:

XGBoost是拟合上一轮损失函数的二阶导展开,GDBT是拟合上一轮损失函数的一阶导展开,因此,XGBoost的准确性更高,且满足相同的训练效果,需要的迭代次数更少。

区别三:

XGBoost与GDBT都是逐次迭代来提高模型性能,但是XGBoost在选取最佳切分点时可以开启多线程进行,大大提高了运行速度。

5 小结

XGBoost的目标函数


fb1b841b3f2262fe9955896dbd39fc2d.jpg


知道XGBoost的回归树构建方法


c3e186e5d0b1c67cec774a3c223267cf.jpg


XGBoost与GBDT的区别


区别一:

XGBoost生成CART树考虑了树的复杂度,

GBDT未考虑,GBDT在树的剪枝步骤中考虑了树的复杂度。

区别二:

XGBoost是拟合上一轮损失函数的二阶导展开,GDBT是拟合上一轮损失函数的一阶导展开,因此,XGBoost的准确性更高,且满足相同的训练效果,需要的迭代次数更少。

区别三:

XGBoost与GDBT都是逐次迭代来提高模型性能,但是XGBoost在选取最佳切分点时可以开启多线程进行,大大提高了运行速度。


目录
相关文章
|
24天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
5天前
|
机器学习/深度学习 缓存 算法
【视频】Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例-2
【视频】Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例
23 5
|
16天前
|
机器学习/深度学习 自然语言处理 算法
|
4天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
31 12
|
10天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
31 7
|
10天前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
10天前
|
机器学习/深度学习 数据采集 算法
探索NumPy与机器学习库的集成之路
【4月更文挑战第17天】本文探讨了NumPy在机器学习中的核心作用,它为各类机器学习库提供基础数据处理和数值计算能力。NumPy的线性代数、优化算法和随机数生成等功能,对实现高效模型训练至关重要。scikit-learn等库广泛依赖NumPy进行数据预处理。未来,尽管面临大数据和复杂模型的性能挑战,NumPy与机器学习库的集成将继续深化,推动技术创新。
|
10天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
20 0
|
26天前
|
存储 异构计算
System Generator学习——使用 AXI 接口和 IP 集成器(三)
System Generator学习——使用 AXI 接口和 IP 集成器
15 3
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。