如果你想很好地理解某些内容,请尝试简单地给别人解释出来。 ——费曼

XGBoost是一个很优美的算法,它的过程不乏启发性。这些通常简单而美丽的概念在数学术语中消失了。我在理解数学的过程中也遇到过同样的挑战,所以我写这篇文章的目的是巩固我的理解,同时帮助其他人完成类似的过程。

为了解XGBoost是什么,我们首先要了解什么是梯度提升机Gradient Boosting,以及梯度提升机背后的数学概念。请注意,这篇文章假设你对梯度提升机非常熟悉,并试图触及梯度提升机和XGBoost背后的直觉和数学。现在我们开始吧。

理解梯度提升机

第一步 - 初始函数

与往常一样,让我们从粗略的初始函数

开始,类似于回归时所有值的平均值。 它将为我们提供一些输出,无论效果如何。

第二步 - 损失函数

下面我们计算损失函数

那么什么是损失函数?它是一种度量预测值与真实值之间差异的算式,这里有几个例子:

从下表可以理解为什么对异常值的鲁棒性很重要:

其思想是,损失函数的值越低,我们的预测就越准确,所以获取最佳的预测值等价为损失函数的最小化问题。

第三步 - 新的目标

到目前为止,我们已经建立了我们的初始模型,并进行了预测。接下来,我们应该在损失函数给出的残差上拟合一个新模型,但有一个微妙的转折:我们将拟合损失函数的负梯度,下面给出我们为什么这样做以及为什么它们相似的直觉:

梯度可以解释为函数的“最快增加的方向和速率”,因此负梯度告诉我们函数最小值的方向,在这种情况下为损失函数的最小值。

我们将遵循梯度下降法,逐步逼近损失函数的极小值,算法的学习速率将给出每一次更新的步长。在损失函数最小的情况下,我们的错误率也最低。

因此,我们将在损失函数的

梯度处建立新模型

第四步 - 累加

梯度上迭代拟合模型的过程将继续进行,直到我们达到给定的弱学习器数量的最小值或极限T为止,这称为累加。

回想一下,在Adaboost中,模型的“缺点”是由高权重数据点确定的。在梯度提升机中,“缺点”是通过梯度来识别的。

简单来说,这就是梯度提升机的工作机制。在回归和分类任务中,唯一不同的是所使用的损失函数。

XGBoost

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

牛顿法

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

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

牛顿法试图通过构造一个序列

来解决最小化问题,该序列从随机起点

开始,通过

的二阶泰勒展开序列收敛到

的最小值

附近的二阶泰勒展开式是

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

损失函数

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

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

这就成了我们对新树的优化目标。该定义的一个重要优点是,目标函数的值仅依赖于

。这就是XGBoost支持自定义损失的方式。我们可以使用完全相同的以

作为输入的求解器来优化每个损失函数,包括逻辑回归和成对排序

正则化

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

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

1. 将数据点

给一片叶子

2. 将相应分数

配给第

数据点

在XGBoost中,复杂度定义为:

XGBoost中的超参数描述如下:

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

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

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

基本上,对于给定的树结构,我们将统计信息

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

学习树的结构

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

该公式可分解为: 1)新左叶上的分数;2)新右叶上的分数;3)原始叶上的分数;4)附加叶上的正则化。 我们在这里可以看到一个重要的事实:如果增益小于

,我们最好不要添加该分支,这正是基于树的模型中的修剪技术! 通过使用监督学习的原理,我们自然可以得出这些技术起作用的原因

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

作者:Dip Ranjan Chatterjee

deephub翻译组:Alexander Zhao

xgboost 正则项_XGBoos算法背后的数学:尽可能简单地解释XGBoost算法背后的机制相关推荐

  1. xgboost算法_XGBoost算法背后的数学:尽可能简单地解释XGBoost算法背后的数学机制...

    如果你想很好地理解某些内容,请尝试简单地给别人解释出来.--费曼 XGBoost是一个很优美的算法,它的过程不乏启发性.这些通常简单而美丽的概念在数学术语中消失了.我在理解数学的过程中也遇到过同样的挑 ...

  2. 轻量级的网页Rank算法,365Rss.cn的Rank技术解释以及算法讨论(一)

    写这片文章,是想讨论一下轻量级(相对于Google那种重型复杂的PageRank而言)的网页Rank算法. 一般而言,一个网页是否受欢迎,365Rss.cn所能想到的,应该涉及到3个分子因素:&quo ...

  3. 【轻松学排序算法】眼睛直观感受几种常用排序算法(转)

    1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  4. 常见机器学习算法背后的数学

    来源:DeepHub IMBA 本文约2300字,建议阅读5分钟. 在本文中,我们将介绍一些机器学习算法的功能,以及在这些算法中实现的有助于学习过程的一些数学方程. 不同的机器学习算法是如何从数据中学 ...

  5. 机器学习算法背后的数学原理

    不同的机器学习算法是如何从数据中学习并预测未知数据的呢? ​ 机器学习算法的设计让它们从经验中学习,当它们获取越来越多的数据时,性能也会越来越高.每种算法都有自己学习和预测数据的思路.在本文中,我们将 ...

  6. 逻辑回归算法c语言_逻辑回归算法背后的数学

    逻辑回归算法背后的数学 看完深蓝学院的机器学习公开课后,对于逻辑回归部分,打算写篇学习笔记记录总结一下,也和大家共同分享. 1 基本思能 逻辑回归(Logistic Regression)和线性回归( ...

  7. xgboost 正则项_深入理解Boosting算法(4)-XGBoost

    导语:记得第一次使用XGBoost的时候还是2016年,那会的XGBoost工具还不完善,深度模型还没有怎么样火起来,大家用的最多的还是Sklearn里面的GBDT,或者R语言的GBM.后来在工作中也 ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法17:XGBoost

    Python机器学习算法实现 Author:louwill Machine Learning Lab 自从陈天奇于2015年提出XGBoost以来,该模型就一直在各大数据竞赛中当作大杀器被频繁祭出.速 ...

  9. 逻辑回归算法背后的数学

    看完Andrew Ng老师的机器学习公开课后,对于逻辑回归部分,打算写篇学习笔记记录总结一下,也和大家共同分享. 1 基本思能 逻辑回归(Logistic Regression)和线性回归(Linea ...

最新文章

  1. SQL Server执行计划的理解
  2. [webapi] 如何在查看api时 显示api的说明
  3. 总结 贪心算法_这几道经典例题帮你轻松搞透贪心算法
  4. 新注册了一个BLOG
  5. 每日一皮:学PHP的不容易...
  6. php 扩展的so文件位置
  7. java 原理图_Java中比较重要的原理图(三大框架、、、、)
  8. JAVA反射机制及其原理实现
  9. Elasticsearch数据库
  10. 基于SIMD的AVS整数反变换算法设计与优化
  11. 测试博客园代码插入格式显示
  12. python canny算法_Python 实现 Canny 边缘检测算法
  13. ThinkPHP高仿蓝奏云网盘系统源码/对接易支付系统程序
  14. 时间线故事脚本_时间轴的创意脚本
  15. 【JZOJ4246】san【最短路】【搜索】
  16. 手机怎么用外嵌字幕_剪映教程大全:剪映加字幕、设置封面、变速等教程详解!...
  17. 阿里P10、腾讯T4、华为18都是怎样的神级收入?
  18. 【附源码】计算机毕业设计SSM校园流浪猫关爱系统
  19. win7系统64位安装MATLAB(R2016)
  20. java利用条件运算符的嵌套来完成此题:学习成绩 =90分.....(java50道经典编程题)

热门文章

  1. python观察日志(part7)--可变长参数元祖
  2. oracle允许空行,oracle用户权限的一些基本操作
  3. SAP S/4HANA Cloud 系统集成的一些场景介绍
  4. 使用Schematics启用SAP Spartacus的SSR模式
  5. Angular jasmine returnValue方法的实现原理
  6. 我这满目疮痍的2020年
  7. Jerry的反省:程序员不要轻易说出“这个功能技术上无法实现“
  8. 程序员的职业病(职业素养)之一:动手写业务代码之前先考虑异常处理
  9. why there is error after adding DocumentHistories
  10. why debug log could not be displayed in console