梯度提升算法决策过程的逐步可视化

梯度提升回归树(GBDT) 本文的主要内容是基于Python机器学习基础教程决策树部分进行整理和总结。 模型描述 梯度提升回归树和随机森林一样,是一种决策树集成方法,通过合并多个决策树来构建一个更为强大的模型。虽然名字中有“回归”,但是该方法既能用于回归问题,也能用于分类问题,与随机森林不同的是,梯度提升回归树(GBDT)采用连续的方式构造树,每棵树都在试图修正前一棵树的错误。默认情况下,梯度提升回归树没有随机化,而是用到了... 阅读详情

梯度提升算法是最常用的集成机器学习技术之一,该模型使用弱决策树序列来构建强学习器。这也是XGBoost和LightGBM模型的理论基础,所以在这篇文章中,我们将从头开始构建一个梯度增强模型并将其可视化。

梯度提升算法介绍

梯度提升算法(Gradient Boosting)是一种集成学习算法,它通过构建多个弱分类器,然后将它们组合成一个强分类器来提高模型的预测准确率。

梯度提升算法的原理可以分为以下几个步骤:

  1. 初始化模型:一般来说,我们可以使用一个简单的模型(比如说决策树)作为初始的分类器。

  1. 计算损失函数的负梯度:计算出每个样本点在当前模型下的损失函数的负梯度。这相当于是让新的分类器去拟合当前模型下的误差。

  1. 训练新的分类器:用这些负梯度作为目标变量,训练一个新的弱分类器。这个弱分类器可以是任意的分类器,比如说决策树、线性模型等。

  1. 更新模型:将新的分类器加入到原来的模型中,可以用加权平均或者其他方法将它们组合起来。

  1. 重复迭代:重复上述步骤,直到达到预设的迭代次数或者达到预设的准确率。

由于梯度提升算法是一种串行算法,所以它的训练速度可能会比较慢,我们以一个实际的例子来介绍:

假设我们有一个特征集Xi和值Yi,要计算y的最佳估计

我们从y的平均值开始

每一步我们都想让F_m(x)更接近y|x。

在每一步中,我们都想要F_m(x)一个更好的y给定x的近似。

首先,我们定义一个损失函数

然后,我们向损失函数相对于学习者Fm下降最快的方向前进:

因为我们不能为每个x计算y,所以不知道这个梯度的确切值,但是对于训练数据中的每一个x_i,梯度完全等于步骤m的残差:r_i!

所以我们可以用弱回归树h_m来近似梯度函数g_m,对残差进行训练:

然后,我们更新学习器

这就是梯度提升,我们不是使用损失函数相对于当前学习器的真实梯度g_m来更新当前学习器F_{m},而是使用弱回归树h_m来更新它。

也就是重复下面的步骤

1、计算残差:

2、将回归树h_m拟合到训练样本及其残差(x_i, r_i)上

3、用步长\alpha更新模型

看着很复杂对吧,下面我们可视化一下这个过程就会变得非常清晰了

决策过程可视化

这里我们使用sklearn的moons 数据集,因为这是一个经典的非线性分类数据

 import numpy as np
 import sklearn.datasets as ds
 import pandas as pd
 import matplotlib.pyplot as plt
 import matplotlib as mpl
 
 from sklearn import tree
 from itertools import product,islice
 import seaborn as snsmoonDS = ds.make_moons(200, noise = 0.15, random_state=16)
 moon = moonDS[0]
 color = -1*(moonDS[1]*2-1)
 
 df =pd.DataFrame(moon, columns = ['x','y'])
 df['z'] = color
 df['f0'] =df.y.mean()
 df['r0'] = df['z'] - df['f0']
 df.head(10)

让我们可视化数据:

下图可以看到,该数据集是可以明显的区分出分类的边界的,但是因为他是非线性的,所以使用线性算法进行分类时会遇到很大的困难。

那么我们先编写一个简单的梯度增强模型:

 def makeiteration(i:int):
    """Takes the dataframe ith f_i and r_i and approximated r_i from the features, then computes f_i+1 and r_i+1"""
    clf = tree.DecisionTreeRegressor(max_depth=1)
    clf.fit(X=df[['x','y']].values, y = df[f'r{i-1}'])
    df[f'r{i-1}hat'] = clf.predict(df[['x','y']].values)
     
    eta = 0.9
    df[f'f{i}'] = df[f'f{i-1}'] + eta*df[f'r{i-1}hat']
    df[f'r{i}'] = df['z'] - df[f'f{i}']
    rmse = (df[f'r{i}']**2).sum()
    clfs.append(clf)
    rmses.append(rmse)

上面代码执行3个简单步骤:

将决策树与残差进行拟合:

 clf.fit(X=df[['x','y']].values, y = df[f'r{i-1}'])
 df[f'r{i-1}hat'] = clf.predict(df[['x','y']].values)

然后,我们将这个近似的梯度与之前的学习器相加:

 df[f'f{i}'] = df[f'f{i-1}'] + eta*df[f'r{i-1}hat']

最后重新计算残差:

 df[f'r{i}'] = df['z'] - df[f'f{i}']

步骤就是这样简单,下面我们来一步一步执行这个过程。

第1次决策

Tree Split for 0 and level 1.563690960407257

第2次决策

Tree Split for 1 and level 0.5143677890300751

第3次决策

Tree Split for 0 and level -0.6523728966712952

第4次决策

Tree Split for 0 and level 0.3370491564273834

第5次决策

Tree Split for 0 and level 0.3370491564273834

第6次决策

Tree Split for 1 and level 0.022058885544538498

第7次决策

Tree Split for 0 and level -0.3030575215816498

第8次决策

Tree Split for 0 and level 0.6119407713413239

第9次决策

可以看到通过9次的计算,基本上已经把上面的分类进行了区分

我们这里的学习器都是非常简单的决策树,只沿着一个特征分裂!但整体模型在每次决策后边的越来越复杂,并且整体误差逐渐减小。

plt.plot(rmses)

这也就是上图中我们看到的能够正确区分出了大部分的分类

如果你感兴趣可以使用下面代码自行实验:

https://github.com/trenaudie/GradientBoostingVisualized/blob/main/fromScratch.ipynb

梯度提升算法的决策过程可视化及编程实现 梯度提升算法的决策过程可以通过可视化来帮助我们理解每个弱学习器的贡献和整个模型的决策过程。在本篇文章中,我们将详细介绍梯度提升算法决策过程的逐步可视化,并提供相应的编程实现。通过这种可视化方法,我们可以更好地理解梯度提升算法的决策过程,以及每个弱学习器在整个模型中的贡献。接下来,我们将使用一个经典的回归问题来演示梯度提升算法的决策过程可视化。在图中,每一列代表一个弱学习器的决策结果,每一行代表一个样本的决策结果。通过观察决策过程的可视化图,我们可以看到随着迭代的进行,模型逐步减小了误差并优化了决策结果。 阅读详情

相关推荐

机器学习分类算法之LightGBM(梯度提升框架)

目录 走进LightGBM 什么是LightGBM? XGBoost的缺点 LightGBM的优化 LightGBM的基本原理 Histogram 算法 直方图加速  LightGBM并行优化 代码实践 参数详解 ​ 代码实操 最优模型及参数(数据集1000) 模型调参 每文一语 走进LightGBM 什么是LightGBM? 在上一篇的文章里,我介绍了XGBoost算法,它是是很多的比赛的大杀器,但是在使用过程中,其训练耗时很长,内存占用比较大。 在2017年年..

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 4984

pyspark分类算法之随机森林分类器模型实践【randomForestClassifier】

本文紧接上文的决策树分类器模型,实践的同样是分类算法模型,随机森林模型可以简单理解为集成的决策树模型,实质上随机森林模型的设计思想也的确如此,它采用了一种投票的思想来完成了模型最终的决策,将多个弱分类器模型进行集成,来达到提升基分类器模型性能的效果。 同样,下面贴一下自己学习pyspark以来的记录笔记,具体如下: pyspark顾名思义就是由pytho...

Together_CZ的博客 5179

从零到一:手把手教你用C#开发AGV调度系统(附避坑指南)

本文详细介绍了如何使用C#开发高效的AGV调度系统,涵盖从环境搭建到核心算法实现的完整流程。重点解析了动态路径规划、多机协同等关键技术,并提供了实用的避坑指南和性能优化建议,帮助开发者快速构建工业级车辆控制调度系统。

blockchain9miner的博客 742

机器学习集成学习——GBDT(Gradient Boosting Decision Tree 梯度提升决策树)算法

DT-Decision Tree决策树,GB是Gradient Boosting,是一种学习策略,GBDT的含义就是用Gradient Boosting的策略训练出来的DT模型在前几年深度学习还没有大行其道之前,GBDT在各种竞赛是大放异彩。一是效果确实挺不错。二是即可以用于分类也可以用于回归。三是可以筛选特征

张小鱼的博客 2万+

Kali Linux实战:用Impacket的secretsdump.py快速提取Windows域控哈希(附避坑指南)

本文详细介绍了如何在Kali Linux中使用Impacket的secretsdump.py脚本快速提取Windows域控哈希,包括环境准备、原理剖析、实战操作及常见问题解决方案。特别适合CTF竞赛和网络信息安全爱好者学习,提升渗透测试效率。

weixin_33670786的博客 410

matlab内读取文件目录时斜杠和反斜杠的使用

@matlab内读取文件目录时斜杠和反斜杠的使用TOC matlab内读取文件目录时,斜杠和反斜杠的使用 最近被斜杠和反斜杠弄晕了,于是总结了一下,在此和大家分享一下。 代码 clear; clc; close all; I1= imread('..\zs1.jpg'); %和代码文件夹同目录的图片 (纯反斜杠) I2= imread('../zs2/zs2.j...

weixin_44456694的博客 6575

Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战

Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战

张陈亚的博客 3642

ArduSub深度调参指南:如何让水下机器人像鱼一样稳定游动

本文深入探讨了ArduSub水下机器人的深度调参策略,旨在解决ROV在水下晃动、响应迟钝等问题。文章系统解析了级联PID控制逻辑,并针对静水与水流环境,提供了具体的深度保持与姿态控制调参方法、实战日志分析技巧以及异常振荡处理方案,帮助用户实现水下机器人稳定、流畅的游动性能。

CAT789的专栏 372

决策树可视化,被惊艳到了!

目前无论是机器学习竞赛还是工业界,最流行、应用最广泛的xgboost其实是优化后的GBDT(LightGBM里面的boosting比较经典稳定的也是GBDT哦!),而GBDT的基分类器最常...

Oner.wv的专栏 2382

在 SAP 中启用应收/应付“代扣税(Withholding Tax)”功能,本质上是激活并配置“扩展代扣税(Extended Withholding Tax)”模型

摘要:SAP中启用应收/应付代扣税功能需完成3个层级12个核心步骤:1)全局激活公司代码代扣税功能;2)配置代扣税规则、税率和科目,包括定义税种类型、代码、总账科目等;3)在供应商/客户主数据中关联代扣税设置。完成后系统可在发票或付款环节自动计算并过账代扣税,支持多税种并行计算和税率年度调整,最终生成税务报表。常见问题排查需检查公司代码激活状态和主数据配置。(149字)

金牌架构师 836

4D毫米波雷达:高度信息与微多普勒效应

4D毫米波雷达:高度信息与微多普勒效应​ ,人工智能,计算机视觉,大模型,AI,本文深入解析4D毫米波雷达的高度信息获取与微多普勒效应。4D毫米波雷达通过MIMO技术、垂直天线布局及相位差计算等获取高度信息,相较传统雷达更精准。微多普勒效应由目标微运动引发,可用于目标识别、分类和运动监测。文中结合自动驾驶、安防监控案例,分析技术挑战与未来趋势,如信号干扰、数据处理复杂,未来将向高精度、与其他传感器融合发展,展现出在多领域的巨大应用潜力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

人工智能——梯度提升决策树算法

本章实现的工作是:首先采用Python语言读取含有英语成绩、数学成绩以及学生所属类型的样本数据。然后将样本数据划分为训练集和测试集,接着采用GBDT算法,对训练集数据进行拟合,最后在输入更多学生的数学成绩和英语成绩后,使用已求解的最优模型去预测其分类结果。 本章掌握的技能是:1、使用NumPy包读取连续的样本数据。2、使用sklearn库model_selection模块中的model_selection函数实现训练集和测试集的划分。3、使用Matplotlib实现数据的可视化,绘制树状图。

weixin_55874238的博客 1163

在 VS Code 里配置 SAP Joule for Developers 的 ABAP AI side-by-side 能力

摘要: 随着ABAP开发工具链的演进,VS Code逐渐融入ABAP开发流程,SAP Joule for Developers的ABAP AI能力通过side-by-side模式(基于BTP中央服务)为多系统开发提供统一AI支持。该模式避免了各ABAP后端独立升级AI能力的碎片化问题,由管理员配置BTP订阅URL后,开发者可在ADT或VS Code中全局调用。实际落地需注意角色分工(管理员配置服务,开发者填写URL)、AI units资源规划及配置细节(如区分全局与项目级设置)。建议将Joule URL纳入

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 120

深剖决策树与梯度提升的数学精髓

通过可视化手段,我们可以更直观地理解决策树和梯度提升背后的数学原理和工作机制。决策树的可视化展示了如何从数据中逐步构建出决策规则,而梯度提升的可视化则揭示了如何通过迭代地改进残差来逐步提升模型的预测能力。这两种算法各有优缺点,但在实际应用中往往能够相互补充,共同构建出更加强大和鲁棒的预测模型。

shiming8879的博客 1486

OpenClaw三层记忆系统:让你的AI助理记住你的习惯,越用越顺手

对于更早的、已经移出滑动窗口的对话内容,我们没有直接丢弃,而是用大模型做摘要压缩,只保留核心信息,然后把摘要存入短期会话记忆的末尾,或者长期用户记忆。比如,10轮之前的对话内容,我们会压缩成:“用户之前查询了仓山万达店4月1日-4月7日的库存数据,对报表的要求是纯文本,不要Markdown”,既保留了核心信息,又不会占用太多上下文窗口。如果说Agent的执行链路是AI的“骨架”,工具调用体系是AI的“手脚”,那么记忆系统就是AI的“大脑”

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 379

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

集成学习算法梯度提升(gradient boosting)的直观看法

梯度提升算法的核心思想:使用前一个模型的残差作为下一个模型的目标。总而言之,梯度提升从一个用于预测的弱模型开始。这种模型的目标是问题的期望输出。在训练这样的模型之后,计算它的残差。如果残差不为零,则创建另一个弱模型来修复前一个模型的弱点。但是这种新模型的目标不是期望的输出,而是先前模型的残差。也就是说,如果给定样本的期望输出是 T,那么第一个模型的目标就是 T。第一个模型训练之后,会产生残差集R。要创建的新模型的目标将设置为R,而不是T。这是因为新模型填补了以前模型的空白。

weixin_45699092的博客 935

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【机器学习】梯度提升分类树GBDT

梯度提升决策树(Gradient Boosting Decision Trees, GBDT)是一种强大的集成学习方法,广泛应用于分类、回归以及其他机器学习任务中。它通过迭代地构建一系列弱预测模型(通常是决策树),每个新的模型都试图纠正前一个模型的错误。GBDT的核心思想是利用梯度下降算法最小化损失函数,从而逐步优化整体模型的表现。为了使GBDT模型达到最佳性能,有几个关键参数需要仔细调整:目前有许多流行的机器学习框架提供了GBDT的实现,包括但不限于:由信息熵可以引出交叉熵!小明在学校玩王者荣耀被发现了,

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

梯度提升决策树的概念及其分类结果进行可视化展示

在每个迭代步骤中,算法会计算前一个模型的残差(或损失函数的负梯度),并使用这些残差来训练一个新的决策树,然后将这个树加到现有的模型上,以此来减小整体模型的损失。GBDT的基本思想是,在每一轮迭代中,新的决策树模型被训练来拟合前一轮模型残差的负梯度。运行以上代码,将会得到一个可视化的图表,其中数据点用不同颜色表示其所属的类别,决策边界用颜色填充。为了可视化展示GBDT的分类结果,我们可以使用一些图表工具,如matplotlib或seaborn来绘制决策边界或分类结果的热力图。#预测每个网格点的类别。

2301_81121233的博客 1541

数据挖掘实战-基于GBDT梯度提升决策树算法的肥胖预测模型

本实验数据集来源于Kaggle,该数据集有助于根据饮食习惯、家族史和身体状况估计肥胖水平。它包括来自墨西哥、秘鲁和哥伦比亚的个人的数据,涵盖 16 种生活方式和健康相关特征,共有 2111 条记录。标签对肥胖水平进行分类,范围从体重过轻到不同的肥胖类型。了解导致肥胖的生活方式因素有助于早期干预、健康建议和医疗保健中的机器学习应用。列说明:性别 — 男或女。年龄 — 个人年龄(岁)。身高 — 身高(米)。体重 — 体重(公斤)。

m0_64336780的博客 6003

深入浅出:可视化理解揭示决策树与梯度提升背后的数学原理

决策树是一种非参数的监督学习算法,可用于分类和回归。它使用类似树的结构来表示决策及其潜在结果。决策树易于理解和解释,并且可以轻松地进行可视化。但是当决策树模型变得过于复杂时,它不能很好地从训练数据中泛化,会导致过拟合。梯度提升是一种集成学习模型,在其中结合许多弱学习器从而得到一个强学习器。这些弱学习器是各个决策树,每个学习...

qq_35485206的博客 455

梯度提升回归器详解:带有代码示例的可视化指南

在机器学习领域,我们都盼着预测结果能精准无误。一开始,简单的决策树帮我们开了个好头,效果还算差强人意。紧接着,随机森林和AdaBoost横空出世,预测表现更上一层楼。然而,的出现,彻底改写了游戏规则,让预测精度实现了质的飞跃。有人说:“之所以效果拔群,背后的原理其实挺简单:它会接连构建一个又一个模型,每一个新模型都一门心思去修正前面所有模型犯下的错误。这种循序渐进纠错的方式,就是它的独特魅力所在。

一个不怎么正经的算法工程师的博客~不定期更新一些我所覆盖领域的干货~~~包你满意噢~~ 1376

当随机森林遇见梯度提升:医疗诊断场景下的算法对决

本文深入比较了随机森林和梯度提升在医疗诊断场景中的表现,重点分析了特征解释性、小样本学习能力和模型稳定性。通过乳腺癌检测和糖尿病预测等案例,展示了集成学习算法在医疗AI中的优势,并提供了PyTorch实现方案。研究发现梯度提升在小样本场景下表现更优,而随机森林在噪声环境中更具鲁棒性。

peach的博客 1023

梯度提升回归(Gradient boosting regression,GBR) 学习笔记以及代码实现&permutation_importance(PI)

梯度提升回归(Gradient boosting regression,GBR)是一种从它的错误中进行学习的技术。它本质上就是集思广益,集成一堆较差的学习算法进行学习。有两点需要注意: ①每个学习算法准确率都不高。但是它们集成起来可以获得很好的准确率。 ②这些学习算法依次应用。也就是说每个学习算法都是在前一个学习算法的错误中学习

weixin_45928096的博客 2万+

python 梯度提升树_梯度提升入门介绍(GBM)

梯度提升入门简化复杂的算法动机虽然大部分Kaggle竞赛获胜者使用各种模型的堆叠/集成,但是作为大部分集成的一部分的一个特定模型是梯度提升(GBM)算法的一些变体。以最新的Kaggle比赛获胜者为例:迈克尔Jahrer安全司机预测。他的解决方案是6个模型的混合。 1个LightGBM(GBM的变体)和5个神经网络。虽然他的成功归因于他将半监督学习用于结构化数据,但梯度提升模型也起到了重要作用。尽管...

weixin_39616287的博客 765
上一篇: 2023 最新计算机视觉学习路线(入门篇)
下一篇: 一文梳理深度学习算法演进
AbnerAI
博客等级 码龄4年 753粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值