机器学习算法(11)——集成技术(Boosting——梯度提升)

一、说明

        在在这篇文章中,我们学习了另一种称为梯度增强的集成技术。这是我在机器学习算法集成技术文章系列中与bagging一起介绍的一种增强技术。我还讨论了随机森林和 AdaBoost 算法。但在这里我们讨论的是梯度提升,在我们深入研究梯度提升之前,了解决策树很重要。因此,如果您不熟悉决策树,那么理解梯度提升可能并不容易。请参阅本文以更好地了解决策树。        

二、建立模型

        我们以身高最喜欢的颜色、性别作为独立特征,体重作为输出特征的数据集为例。我们有 6 条记录。

2.1 步骤1:

        决策树的第一步是计算基本模型,它是所有权重的平均值

Average Salary(ŷ)  = (88 + 76 + 56 + 73 + 77 + 57)/ 6 = 71.17 ≈ 71

        当我们给出训练数据集时,预测值为71.17。这只是我们计算的平均工资。为了更好的解释,我们将其用作≈71 。

2.2 第2步:

        在第二步中,我们将计算残差,也称为伪残差。在回归中,我们使用损失函数来计算误差。有不同的损失函数,例如均方误差、回归和对数损失的均方根误差以及分类的铰链损失。根据所选的损失函数,我们将计算残差。在这种情况下,我们将使用一个简单的损失函数。损失将通过从预测值中减去实际值来计算(例如,我们使用此计算),从而产生一个名为R1的新列,表示残差。

        例如,如果我们从 88 中减去 71 ,则第一条记录的残差将为17

2.3 步骤3:

        建立好这个基础模型后,我们将依次添加一棵决策树。在这个决策树中,我的输入是身高、最喜欢的颜色和性别。我的依赖特征不是重量。这将是残余误差 R1。基于此我们可以创建决策树。

        现在我们有了一个基本模型和一个决策树。我们已经训练了决策树。当我们将新数据传递给决策树时,它将预测残差值的输出。我们将其命名为残差 2(R2)输出。

        在此基础上,让我们检查一下预测的进展情况。假设我们得到这样的 R2 值。

R2 值

        因此,每当我们通过基本模型获取第一条记录时,它将是71(我们计算的平均值)。转到决策树 1,我们将获得一些残差值。从上图中,您可以看到我们获得的第一条记录的残差值(R2)为 15 。如果我们将其与 71 相加,我们将得到一个值86,该值非常接近实际值。

1st Record
==================
R1 = 15
Average Weight = 71
Predicted Weight = 71 + 15 = 86

        然而,这凸显了决策树模型中的过度拟合问题。我们想要创建一个具有低方差和低偏差的通用模型。在这种情况下,我们的偏差较低,但方差较高,这意味着当引入新的测试数据时,该值可能会下降。为了解决这个问题,我们将向模型添加学习率Alpha (α)和 R2 值。学习率应该在 0 到 1 之间。

Assume α = 0.1
Predicted Weight  = Avearge Weight + α (R2 Value)
                  = 71 + (0.1)15 = 72.5

在这里您可以看到72.5,这与实际重量存在显着差异。将根据残差 2(R2) 值和相同的独立特征添加额外的决策树来解决此问题。该决策树将依次计算我的下一个残差。通用公式可以写成:

F(x) = h0x + α1 h1x + α2 h2x + α3 h3x + ....... + αn hnx

F(x) = i = 1 -> n Σ αi hix

h0x = Base Model 
hnxn = Output given by any desicion tree

目标是通过根据残差顺序创建决策树来减少残差。Alpha(α)次要参数将使用次要参数调整来决定。

基本上,在基本模型之后,我们会依次使用决策树来增强模型。这就是为什么它被称为增强技术。

三、该算法背后的伪代码

        现在我们将深入研究我们创建的伪算法背后的数学原理。尽管看起来很复杂,但我们将分解每个步骤以帮助您理解该过程。我们使用的数据集包括身高、喜欢的颜色、性别和体重,共有 6 条记录。身高、喜欢的颜色和性别是我的独立特征,体重是我的从属特征

3.1 遵循伪算法所需的基本步骤

  • 提供输入——独立和相关特征。
  • 提供损失函数——这对于分类问题(对数损失和铰链损失)或回归问题(均方误差、均方根误差)可能有所不同。所有的损失函数应该是可微的(能够求导数)。
  • 找出梯度提升算法中需要多少棵树。

3.2 计算步骤

3.2.1 步骤1 -

        梯度提升的第一步是构建一个基础模型来预测训练数据集中的观察结果。为简单起见,我们取目标列 (ŷ) 的平均值,并假设其为预测值,如红色列下方所示。

为什么我说我们取目标列的平均值?嗯,这涉及到数学。从数学上讲,第一步可以写为:

---------------------------------------------
F0(x) = arg min γ (i = 1 -> n Σ Loss(y,γ))
---------------------------------------------

L      = loss function
γ      = predicted value
argmin = we have to find a predicted value/γ for which the loss function is minimum.

Loss Function (Regresion)
==========================
Loss  = [i = 0 -> n Σ 1/n (yi - γi)²]

yi     = observed value (weight)
γ      = predicted value

// Now we need to find a minimum value of γ such that this loss function is minimum. 
// We use to differentiate this loss function and then put it equal to 0 right? Yes, we will do the same here.
d(Loss)/ dγ = d([i = 0 -> n Σ 1/n (yi - γi)²])/ dγ
d(Loss)/ dγ = 2/2(i = 0 -> n Σ (yi - γi)) * (-1) = - (i = 0 -> n Σ (yi - γi)) - equation 1

// Let’s see how to do this with the help of our example. 
// Remember that yi is our observed value and γi is our predicted value, by plugging the values in the above formula we get:
d(Loss)/ dγ = - [88 - γ + 76 - γ + 56 - + 73 - γ + 77 - γ + 57 - γ]
            = - 427 + 6γ

d(Loss)/ dγ = 0 
- 427 + 6γ  = 0
6γ          = 427
γ           = 71.16 ≈ 71

// We end up over an average of the observed weight and this is why I asked you to take the average of the target column and assume it to be your first prediction.

Hence for γ=71, the loss function will be minimum so this value will become our prediction for the base model.
==============================================================================================================

3.2.2 第2步-

        下一步是计算伪残差,即(观测值 - 预测值)。图中R1是计算出的残值。

        问题又来了,为什么只是观察到预测?一切都有数学证明,我们看看这个公式从何而来。这一步可以写成:

----------------------------------
rim = - [dL(y1, F(x1)) / dF(x1)]
----------------------------------

F(xi) = previous model output
m     = number of DT made

// From the equation 1 We are just taking the derivative of loss function
d(Loss)/ dγ = - (i = 0 -> n Σ (yi - γi)) = -(i = 0 -> n Σ (Observed - Predicted))

// If you see the formula of residuals above, we see that the derivative of the loss function is multiplied by a negative sign, so now we get:
Observed - Predicted
// The predicted value here is the prediction made by the previous model. 
// In our example the prediction made by the previous model (initial base model prediction) is 71, to calculate the residuals our formula becomes:
(Observed - 71)

Finding the rim values for the dataset
-----------------------------------------
r11 = 1st Record of model 1 = (y - ŷ) = 88 - 71 = 17
r21 = 2nd Record of model 1 = (y - ŷ) = 76 - 71 = 5
r31 = 3rd Record of model 1 = (y - ŷ) = 56 - 71 = -15
r41 = 4th Record of model 1 = (y - ŷ) = 73 - 71 = 2
r51 = 5th Record of model 1 = (y - ŷ) = 77 - 71 = 6
r61 = 6th Record of model 1 = (y - ŷ) = 57 - 71 = -14

3.2.3 步骤3—

        下一步,我们将根据这些伪残差建立模型并进行预测。我们为什么要做这个?

        因为我们希望最小化这些残差,最小化残差最终将提高我们的模型准确性和预测能力。因此,使用残差作为目标和原始特征高度最喜欢的颜色和性别,我们将生成新的预测。请注意,在这种情况下,预测将是错误值,而不是预测的权重,因为我们的目标列现在是错误的(R1)

3.2.4 步骤4 -

        在此步骤中,我们找到决策树每个叶子的输出值。这意味着可能存在1 个叶子获得超过 1 个残差的情况,因此我们需要找到所有叶子的最终输出。为了找到输出,我们可以简单地取叶子中所有数字的平均值,无论只有 1 个数字还是多于 1 个数字。

        让我们看看为什么我们要取所有数字的平均值。从数学上讲,该步骤可以表示为:

-----------------------------------------------
γm = argmin γ [i = 1 -> n Σ L(y1, Fm-1(x1) + γhm(xi))]
-------------------------------------------------

hm(xi) = DT made on residuals
m      = number of DT
γm     = output value of a particular leaf 

// m = 1 we are talking about the 1st DT and when it is “M” we are talking about the last DT.
// The output value for the leaf is the value of γ that minimizes the Loss function

[Fm-1(xi)+ γhm(xi))] = This is similar as step 1 equation but here the difference is that we are taking previous predictions whereas earlier there was no previous prediction.

Let’s understand this even better with the help of an example. Suppose this is our regressor tree:


                 Height(> 1.5)
                /            \
               /              \
              /                \
          Fav Clr               Gender
            / \                    / \
           /   \                  /   \
          /     \                /     \
       R1,1     R2,1           R3,1    R4,1
      17        5, 2           -15    6, -14

γm = argmin γ [i = 1 -> n Σ L(y1, Fm-1(x1) + γhm(xi))]
// Using lost function we can write this as,
L(y1, Fm-1(x1) + γhm(xi) = 1/2 (y1 - (Fm-1(x1) + γhm(xi)))^2
Then,
γm = argmin γ [i = 1 -> n Σ 1/2 (y1 - (Fm-1(x1) + γhm(xi)))^2]

Let's see 1st residual goes in R1,1
γ1,1 = argmin 1/2(80 - (71 + γ))^2

//Now we need to find the value for γ for which this function is minimum. 
// So we find the derivative of this equation w.r.t γ and put it equal to 0.
d (γ1,1) / d γ = d (1/2(88 - (71 + γ))^2) / dγ
0              = d (1/2(88 - (71 + γ))^2) / dγ
80 - (71 + γ)  = 0
γ              = 17


Let's see 1st residual goes in R2,1
γ2,1 = argmin 1/2(76 - (71 + γ))^2  +  1/2(73 - (71 + γ))^2

//Now we need to find the value for γ for which this function is minimum. 
// So we find the derivative of this equation w.r.t γ and put it equal to 0.
d (γ2,1) / d γ = d (1/2(76 - (71 + γ))^2  +  1/2(73 - (71 + γ))^2) / dγ
0              = d (1/2(76 - (71 + γ))^2  +  1/2(73 - (71 + γ))^2) / dγ
-2γ + 5 + 2    = 0
γ              =  7 /2 = 3.5


Let's see 1st residual goes in R3,1
γ3,1 = argmin 1/2(56 - (71 + γ))^2 

//Now we need to find the value for γ for which this function is minimum. 
// So we find the derivative of this equation w.r.t γ and put it equal to 0.
d (γ3,1) / d γ = d (1/2(56 - (71 + γ))^2) / dγ
0              = d (1/2(56 - (71 + γ))^2) / dγ
-γ - 15        = 0
γ              = -15


Let's see 1st residual goes in R4,1
γ4,1 = argmin 1/2(77 - (71 + γ))^2  +  1/2(57 - (71 + γ))^2

//Now we need to find the value for γ for which this function is minimum. 
// So we find the derivative of this equation w.r.t γ and put it equal to 0.
d (γ4,1) / d γ = d (1/2(77 - (71 + γ))^2  +  1/2(57 - (71 + γ))^2) / dγ
0              = d (1/2(77 - (71 + γ))^2  +  1/2(57 - (71 + γ))^2) / dγ
-2γ + 6 -14    = 0
γ              =  -8/2 = -4


// We end up with the average of the residuals in the leaf R2,1 and R4,1. Hence if we get any leaf with more than 1 residual, we can simply find the average of that leaf and that will be our final output.

现在计算所有叶子的输出后,我们得到,

3.2.5 步骤 5 —

这最终是我们必须更新先前模型的预测的最后一步。它可以更新为:

---------------------------
Fm(x) = Fm-1(x) + vmhm(x)
---------------------------
m       = number of decision trees made
Fm-1(x) = prediction of the base model (previous prediction) 
Hm(x)   = recent DT made on the residuals

// since F1-1= 0 , F0 is our base model hence the previous prediction is 71.
vm is the learning rate that is usually selected between 0-1. It reduces the effect each tree has on the final prediction, and this improves accuracy in the long run. Let’s take vm=0.1 in this example.

Let’s calculate the new prediction now:

New Prediction F1(x) = 71 + 0.1 * Height(> 1.5)
                                 /            \
                                /              \
                               /                \
                           Fav Clr               Gender
                             / \                    / \
                            /   \                  /   \
                           /     \                /     \
                        R1,1     R2,1           R3,1    R4,1
                       17        5, 2           -15    6, -14

        假设我们想要找到高度为 1.7 的第一个数据点的预测。这个数据点将经过这个决策树,它得到的输出将乘以学习率,然后添加到之前的预测中。

        现在,更新预测后,我们需要再次迭代步骤 2 中的步骤以找到另一个决策树。这种情况将会发生,直到我们通过基于残差顺序创建决策树来减少残差。

        现在假设m=2,这意味着我们已经构建了 2 个决策树,现在我们想要有新的预测。

        这次我们将把之前的预测F1(x)添加到对残差进行的新 DT 中。我们将一次又一次地迭代这些步骤,直到损失可以忽略不计。

New Prediction F2(x) = 71 + (0.1 * DT value) + (0.1 * DT value)

        这就是梯度提升算法的全部内容。我希望您对这个主题有更好的理解。我们下一篇文章讨论XgBoost算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/266293.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python实现AR协方差结构线性回归模型(GLSAR算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 GLSAR是具有AR协方差结构的广义最小二乘法线性回归模型。 本项目通过GLSAR回归算法来构建AR协方差结构…

RocketMQ实践:确保消息不丢失与顺序性的高效策略

一、使用RocketMQ如何保证消息不丢失? 这个是在面试时,关于MQ,面试官最喜欢问的问题。这个问题是所有MQ都需要面对的一个共性问 题。大致的解决思路都是一致的,但是针对不同的MQ产品又有不同的解决方案。分析这个问题要从以 下几…

02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统

02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统 项目及实现框架 我们先来整体了解一下这个项目。 项目名称:“易速鲜花”内部员工知识库问答系统。 项目介绍:“易速鲜花”作为一个大型在线鲜花销售平台,有自…

基于java的病房管理系统论文

摘 要 当下,如果还依然使用纸质文档来记录并且管理相关信息,可能会出现很多问题,比如原始文件的丢失,因为采用纸质文档,很容易受潮或者怕火,不容易备份,需要花费大量的人员和资金来管理用纸质文…

Linux多线程

目录 一、Linux线程概念1.1 什么是线程?1.2 线程的优点1.3 线程的缺点1.4 线程异常1.5 线程用途1.6 进程VS线程1.7 关于进程和线程的问题 二、Linux线程控制2.1 POSIX线程库2.2 创建线程2.3 线程ID及进程地址空间布局 三、Linux线程终止四、线程等待4.1 为什么需要线…

MySQL——复合查询

目录 一.基本查询回顾 二. 多表查询 三.自连接 四.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 一.基本查询回顾 准备数据库: 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为…

stm32项目(14)——基于stm32f103zet6的循迹避障小车

1.功能设计 stm32循迹避障小车,使用超声波测距,使用红外循迹模块追踪黑线,实现循迹功能。此外,还可以检测烟雾、火焰、人体、温湿度。温湿度显示在LCD屏幕上。检测到有人、有火焰、有烟雾时,蜂鸣器报警! 功…

ESP32运行MicroPython——环境搭建

1、准备工作 硬件:ESP32-DevKitC V4 开发板、USB串口线 软件: flash_download_tool_3.9.5(乐鑫烧录工具)、官方下载地址 CP210x(USB驱动程序)、官方下载地址 ESP32_GENERIC-20231005-v1.21.0.bin&#xff…

串口通信(7)-C#串口通信通信帮助类实例

本文讲解C#串口通信通信帮助类实例 首先创建winform项目添加界面和控件 UI界面 namespace SerialPortDemo {partial class MainForm{/// <summary>/// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <sum…

2024年个人目标制定清单~有没有适合你的那一款

在2024年&#xff0c;个人的生活目标可以有多种多样&#xff0c;这主要取决于个人的价值观、兴趣和生活情况。 个人生活目标&#xff1a; 健康和健身&#xff1a;保持身体健康和良好的心理状态是许多人重要的生活目标。这可能包括定期运动&#xff0c;均衡饮食&#xff0c;以…

MySQL报错:1366 - Incorrect integer value: ‘xx‘ for column ‘xx‘ at row 1的解决方法

我在插入表数据时遇到了1366报错&#xff0c;报错内容&#xff1a;1366 - Incorrect integer value: Cindy for column name at row 1&#xff0c;下面我演示解决方法。 根据上图&#xff0c;原因是Cindy’对应的name字段数据类型不正确。我们在左侧找到该字段所在的grade_6表&…

陪诊软件|北京陪诊系统提升医疗服务无限可能

我们深知陪诊软件搭建系统在医疗服务中的重要性。它不仅可以提高医患沟通的效率&#xff0c;还可以提供更个性化、便捷的服务体验。因此&#xff0c;我们为您搭建的陪诊软件系统集合了丰富的功能&#xff0c;旨在提升您的医疗服务质量。 首先&#xff0c;我们的陪诊软件搭建系统…

1.关于浏览器

一、认识主流浏览器 Chrome谷歌浏览器Safari苹果浏览器Firefox火狐浏览器Opera欧朋浏览器 二、浏览器内核是什么&#xff1f; 三、五大浏览器&#xff0c;四大内核 四、前端做网页开发用什么浏览器&#xff1f; Chrome谷歌浏览器。

JavaWeb笔记之WEB项目

一. 版本控制 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一。 版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变&a…

leetCode算法—11. 盛最多水的容器

11.给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 难度&#xff1a;中等 ** 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#x…

[python]python实现对jenkins 的任务触发

目录 关键词平台说明背景一、安装 python-jenkins 库二、code三、运行 Python 脚本四、注意事项 关键词 python、excel、DBC、jenkins 平台说明 项目Valuepython版本3.6 背景 用python实现对jenkins 的任务触发。 一、安装 python-jenkins 库 pip install python-jenkin…

智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹈鹕算法4.实验参数设定5.算法结果6.参考文献7.MA…

天软特色因子看板 (2023.12 第13期)

该因子看板跟踪天软特色因子A06008聪明钱因子(beta)&#xff0c;该因子为以分钟行情价量信息为基础&#xff0c;识别聪明钱交易&#xff0c;用以刻画机构交易行为 值越大&#xff0c;越反映其悲观情绪&#xff0c;反之&#xff0c;反映其乐观情绪。 今日为该因子跟踪第13期&…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)Channel 模块的实现

在这篇文章中虽然实现了能够和多客户端建立连接&#xff0c;并且同时和多个客户端进行通信。 基于多反应堆的高并发服务器【C/C/Reactor】&#xff08;上&#xff09;-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135141316?spm1001.2014.3001.5501但是有…

在线渗透盒子,集成了近百个常见的渗透渗透工具,类似软件商城的工具可以进行工具下载

现在简单统计了一下大概有80个渗透工具左右&#xff0c;3个运行环境&#xff0c;1个破解工具 工具包介绍 该工具是一个类似软件商城的工具可以进行工具下载&#xff0c;工具的卸载&#xff0c;工具的更新&#xff0c;工具编写了自动化的安装脚本&#xff0c;不用担心工具跑不起…