XGBoost算法背后的数学:尽可能简单地解释XGBoost算法背后的数学机制(二)

简介: XGBoost算法背后的数学:尽可能简单地解释XGBoost算法背后的数学机制(二)

XGBoost

XGBoost和梯度提升机都遵循梯度提升决策树的原理,但是XGBoost使用更加正则化的模型公式来控制拟合,这使它具有更好的性能,这就是为什么它也被称为“正则提升”技术。

image.png

牛顿法

那么什么是牛顿法呢?在随机梯度下降中,我们用更少的数据点来计算梯度更新的方向,耗时也相对更少,但如果我们想要加速更新,就需要更多的数据点。而在牛顿法中,我们用来计算梯度更新的方向的耗时更多,但是需要的计算点也更少。

需要注意的重要一点是,即使梯度提升机在解决回归问题时使用梯度下降法进行优化,在解决分类问题仍然使用牛顿方法来解决优化问题。而XGBoost在分类和回归的情况下都使用此方法。

image.png

牛顿法试图通过构造一个序列{xₖ}解决最小化问题,该序列从随机起点x₀∈ R始,通过f二阶泰勒展开序列收敛到f最小值x*。{xₖ}近的二阶泰勒展开式是

image.png

二阶导数对于加快梯度下降非常重要,因为在一个损失函数的山谷里,如果算法的修正方向是锯齿状的下降,那么您在沿着山谷的实际梯度上的进展就非常缓慢, 通过二阶导数调整方向将使您的下降方向朝山谷的实际梯度方向倾斜,从而将缓慢的下降转换为更快的下降。

损失函数

我们已经看到了平方损失函数在梯度提升机中的行为,让我们快速看一下XGBoost中平方损失函数的作用:

image.png

均方误差损失函数的形式是非常友好的,有一个一次项(通常称为剩余项)和一个二次项。对于其他值得注意的损失函数(例如logistic损失),要得到这样一个好的形式并不容易。所以在一般情况下,我们把损失函数的泰勒展开式推广到二阶

image.png

这就成了我们对新树的优化目标。该定义的一个重要优点是,目标函数的值仅依赖于。这就是XGBoost支持自定义损失的方式。我们可以使用完全相同的以和作为输入的求解器来优化每个损失函数,包括逻辑回归和成对排序


正则化

接下来,我们将处理正则化项,但在此之前,我们需要了解如何以数学方式定义决策树。直观来说,决策树主要是叶节点、数据点和将数据点分配给这些叶节点的函数的组合。数学上它写为:

image.png

其中JT是叶数。此定义将树上的预测过程描述为:

  1. 将数据点赋给一片叶子m
  2. 将相应分数wₘ₍ₓ₎配给第m(x)数据点

在XGBoost中,复杂度定义为:

bf.png

XGBoost中的超参数描述如下:

bvvvv.png

当然,定义复杂度的方法不止一种,但这一种方法在实践中效果很好。正则化是大多数基于树的方法处理得不太仔细或忽略掉的一部分。这是因为传统的树学习方法只强调提升纯度,而复杂度的控制则只能基于试探。通过正式定义它,我们可以更好地了解我们的模型正在学习的内容,并获得泛化能力良好的模型

bvvv.png

最后一个方程衡量的是树的结构的优劣。

如果听起来有些复杂,让我们看一下图片,看看如何计算分数。

bvv.png

基本上,对于给定的树结构,我们将统计信息推入它们所属的叶节点,将统计信息求和,然后使用这一公式计算树的质量。该分数类似于决策树中的纯度度量,不同之处在于它还考虑了模型的复杂性

学习树的结构

现在,我们有了一种方法来衡量一棵树的质量。理想情况下,我们将枚举所有可能的树并选择最佳的树,但实际上这是非常棘手的,因此我们将尝试一次优化一个树的部分。具体来说,我们尝试将一片叶子分成两片叶子,其得分为

bv.png

该公式可分解为: 1)新左叶上的分数;2)新右叶上的分数;3)原始叶上的分数;4)附加叶上的正则化。我们在这里可以看到一个重要的事实:如果增益小于,我们最好不要添加该分支,这正是基于树的模型中的修剪技术!通过使用监督学习的原理,我们自然可以得出这些技术起作用的原因

很好,现在希望我们对XGBoost有一个初步的了解,以及为什么它会这样工作。下次见!

参考文献

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

https://drive.google.com/file/d/1CmNhi-7pZFnCEOJ9g7LQXwuIwom0ZND/view

https://arxiv.org/pdf/1603.02754.pdf

http://www.ccs.neu.edu/home/vip/teach/MLcourse/4boosting/slides/gradientboosting.pdf

https://mlexplained.com/2018/02/02/an-introduction-to-second-order-optimization-for-deep-learning-practitioners-basic-math-for-deep-learning-part-1/

http://learningsys.org/papers/LearningSys2015paper32.pdf

https://www.youtube.com/user/joshstarmer

目录
相关文章
|
8天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
23 2
|
7月前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
4月前
|
机器学习/深度学习 算法
【Deepin 20系统】机器学习分类算法模型xgboost、lightgbm、catboost安装及使用
介绍了在Deepin 20系统上使用pip命令通过清华大学镜像源安装xgboost、lightgbm和catboost三个机器学习分类算法库的过程。
74 4
|
5月前
|
并行计算 算法 Python
Dantzig-Wolfe分解算法解释与Python代码示例
Dantzig-Wolfe分解算法解释与Python代码示例
|
6月前
|
机器学习/深度学习 数据采集 存储
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
**摘要:** 这篇文章介绍了决策树作为一种机器学习算法,用于分类和回归问题,通过一系列特征测试将复杂决策过程简化。文章详细阐述了决策树的定义、构建方法、剪枝优化技术,以及优缺点。接着,文章讨论了集成学习,包括Bagging、Boosting和随机森林等方法,解释了它们的工作原理、优缺点以及如何通过结合多个模型提高性能和泛化能力。文中特别提到了随机森林和GBDT(XGBoost)作为集成方法的实例,强调了它们在处理复杂数据和防止过拟合方面的优势。最后,文章提供了选择集成学习算法的指南,考虑了数据特性、模型性能、计算资源和过拟合风险等因素。
84 0
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
|
6月前
|
算法 Java Go
斐波那契数列是一个非常经典的数学问题,在计算机科学中也经常被用作算法设计和分析的例子。
斐波那契数列是一个非常经典的数学问题,在计算机科学中也经常被用作算法设计和分析的例子。
|
5月前
|
机器学习/深度学习 数据采集 算法
Python实现xgboost分类模型(XGBClassifier算法)项目实战
Python实现xgboost分类模型(XGBClassifier算法)项目实战
|
5月前
|
算法 安全 网络安全
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
|
6月前
|
存储 算法 安全
深入解析RSA算法原理及其安全性机制
深入解析RSA算法原理及其安全性机制
|
6月前
|
机器学习/深度学习 自然语言处理 算法
XGBoost算法
XGBoost是高效、灵活且强大的梯度提升决策树算法,擅长处理结构化数据,广泛应用在数据挖掘和Kaggle竞赛中。它通过迭代地添加决策树优化目标函数,支持自定义损失函数和正则化以防止过拟合。与AdaBoost相比,XGBoost支持更复杂的基分类器,如线性模型,使用二阶导数加速优化,并有内置并行处理能力。XGBoost在模型构建时考虑缺失值处理,并提供了Python等多语言接口,便于参数调优和模型评估,如使用GridSearchCV进行交叉验证。