用通俗易懂的方式讲解: GBDT算法及案例(Python 代码)

501 篇文章 287 订阅
订阅专栏
152 篇文章 96 订阅
订阅专栏

1 GBDT算法核心思想

GBDT是Gradient Boosting Decision Tree(梯度提升树)的缩写。

GBDT算法也是一种非常实用的Boosting算法,它与AdaBoost算法的区别在于:AdaBoost算法根据分类效果调整权重并不断迭代,最终生成强学习器;GBDT算法则将损失函数的负梯度作为残差的近似值,不断使用残差迭代和拟合回归树,最终生成强学习器。

简单来说,AdaBoost算法是调整权重,而GBDT算法则是拟合残差。通过一个简单案例理解GBDT算法的核心思想。

下表中有4个样本客户的数据,特征变量X1为年龄,X2为月收入(元),目标变量y是实际信用卡额度(元)。现在要利用GBDT算法根据样本数据构造模型,用于预测信用卡额度。
在这里插入图片描述

假设建立的第1棵决策树如下图所示。

在这里插入图片描述

A、C被划分到左节点,A的实际信用卡额度为8000,而预测值为10000,因此,A的残差为8000-10000=-2000,同理,C的残差为25000-20000=5000。B、D被划分到右节点,B的残差为30000-35000=-5000,D的残差为40000-35000=5000。

接下来就是GBDT算法的核心思想:构造第2棵决策树来拟合第1棵树产生的残差,注意这里拟合的是残差,构造的拟合残差的决策树如下图所示。
在这里插入图片描述

在这棵树中,A、B被划分到左节点,A的实际残差为-2000,而预测的残差为-3000,那么此时A的新残差,即残差的残差为-2000-(-3000)=1000,同理,B的新残差为-5000-(-5000)=0。C、D被划分到右节点,C的新残差为5000-5000=0,D的新残差为5000-5000=0。继续用第2棵树产生的新残差去拟合第3棵树,并不断重复此步骤,使残差变小。

因此,最终的模型就是如下图所示的集成在一起的多个模型,这也充分体现了集成算法的集成思想。

在这里插入图片描述

2 GBDT算法的数学原理

简单介绍GBDT算法的数学原理。迭代模型为:

在这里插入图片描述

  • fm-1(x)是第m-1次迭代模型,即上一次的迭代模型;

  • Tm(x)是本次待搭建的决策树,其实也是拟合上一个模型残差值的决策树;

  • fm(x)是本次迭代后产生的新模型。

对GBDT算法来说,只需要简单地拟合当前模型的残差,算法步骤如下。

  • 步骤1:初始化f0(x)=0

  • 步骤2:当m=1,2,…,M,计算残差rmi=yi-fm-1(x);拟合残差,得到决策树Tm(x);更新fm(x)=fm-1(x)+Tm(x)。

  • 步骤3:当误差或迭代次数达到指定要求时,得到回归问题提升树,如下所示。

在这里插入图片描述

3 GBDT算法数学原理举例

结合具体的回归问题,详细讲解GBDT算法的数学计算步骤。给定的训练数据见下表,其中x为特征变量,y为目标变量,因为y为连续值,所以这是一个回归预测问题。

在这里插入图片描述

1.构造第一个模型

首先初始化f0(x)=0,然后构造第1个回归决策树模型f1(x),其实也就是T1(x)。

回归决策树模型的划分标准。回归决策树模型与分类决策树模型最大的不同就是其划分标准不是信息熵或基尼系数,而是均方误差MSE,其计算公式如下。

在这里插入图片描述

(1)寻找合适的初始切分点

构造第1棵决策树时,我们需要判断在x=1.5、x=2.5、x=3.5、x=4.5这4个位置中的哪个位置“切一刀”,才能使整体的均方误差MSE最小。

先在x=1.5处“切一刀”划分类别,即设置阈值v=1.5,意味着弱学习器f1(x)如下。
在这里插入图片描述

其实这就是如下图所示的一棵深度为1的回归决策树。

回归决策树中某个节点的预测值是该节点中所有数据的均值,因此,在上图右边的节点中,所有满足x>1.5的值都被预测为(0+2+2+4)/4=2。

此时的残差yi-f(xi)见下表。

在这里插入图片描述

此时的均方误差MSE为:

在这里插入图片描述

仿照上面的方法,计算出4种阈值下的均方误差MSE,见下表。

在这里插入图片描述

由上表可知,当v=2.5时均方误差MSE取得最小值,此时第1棵决策树f1(x)如下图所示。

在这里插入图片描述

(2)查看此时的残差

前面已经求得了第1棵决策树f1(x),因此可以获得其对应的残差,见下表。

在这里插入图片描述

获得残差之后,接着就需要构建新的决策树来拟合残差,此时整个系统的均方误差MSE为0.53。

2.拟合残差获得第2个模型

现在需要根据下表中的**x(特征变量)和残差(目标变量)**拟合出决策树T2(x)。

注意:此时第二棵树的实际值y为上一棵树的残差值。

在这里插入图片描述

(1)寻找合适的初始切分点

使用与前面相同的计算方法计算出4种阈值下的均方误差MSE,见下表。

在这里插入图片描述

由上表可知,当v=4.5时均方误差MSE取得最小值,此时第2棵决策树T2(x)如下图所示。

在这里插入图片描述

(2)查看此时的残差

此时残差的预测值T(x)及残差的残差(残差-T(x))见下表

在这里插入图片描述

注意上表中“残差的残差”即系统的残差,此时该拟合残差的决策树的均方误差MSE为0.088,这也是整个系统的均方误差MSE。

(3)集成模型

此时的集成模型f2(x)如下。

在这里插入图片描述

或者:

在这里插入图片描述

有了新模型的残差后,便可以继续构造新的决策树来拟合残差,直到系统的均方误差MSE达到指定要求或者迭代次数达到指定条件时,便停止迭代,形成最终模型。最终模型如下图所示。

在这里插入图片描述

因为GBDT算法是不停地拟合新模型的残差,所以随着新的迭代,整个系统的残差会越来越小,或者更精确地说,系统的均方误差MSE会越来越小,从而使得模型更加准确。

梯度提升树中梯度的理解

之前定义的残差为y-f(xi),而实际应用中,GBDT(Gradient Boosting DecisionTree)梯度提升树使用损失函数的负梯度在当前模型的值作为残差近似值。负梯度的定义如下,其中L(y,f(xi))为损失函数。

在这里插入图片描述

其实这个负梯度在特定损失函数的情况下,就是之前定义的残差y-f(xi),令损失函数为:

在这里插入图片描述

此时对损失函数求负梯度:

在这里插入图片描述

此时负梯度就等于残差y-f(xi),也就是说,当损失函数是平方函数时,负梯度就是残差。

不过当损失函数不是平方函数时,负梯度只是残差的近似值,并不完全等于残差。

4 使用sklearn实现GBDT算法

GBDT算法既能做分类分析,又能做回归分析。对应的模型分别为GBDT分类模型(GradientBoostingClassifier)和GBDT回归模型(GradientBoostingRegressor)。

GBDT分类模型的弱学习器是分类决策树模型,GBDT回归模型的弱学习器则是回归决策树模型。

代码如下:

# GBDT分类模型
from sklearn.ensemble import GradientBoostingRegressor
X = [[1,2],[3,4],[5,6],[7,8],[9,10]]
y = [1,2,3,4,5]
model = GradientBoostingRegressor(random_state=123)
model.fit(X,y)
model.predict([[5,5]])

# 输出
# array([2.54911351])

5 案例:产品定价模型

5.1 模型搭建

5.1.1 读取数据

首先读取1000种图书的数据,这里为了方便演示,只选取了4个特征变量,包括图书的页数、类别、彩印和纸张,目标变量是图书的价格。

在这里插入图片描述

查看图书类别以及纸张分类情况:

在这里插入图片描述

5.1.2 分类型文本变量的处理

因为“类别”和“纸张”两列是分类型文本变量,所以可以用LabelEncoder()函数进行数值化处理,便于后续进行模型拟合。

在这里插入图片描述

可以看到,“类别”列中的“技术类”被转换为数字1,“教辅类”被转换为数字2,“办公类”被转换为数字0。

在这里插入图片描述

此时df的前5行见下表。

在这里插入图片描述

5.1.3 提取特征变量和目标变量

在这里插入图片描述

5.1.4 划分训练集的测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=123)
5.1.5 模型训练及搭建

在这里插入图片描述

5.2 模型预测及评估

模型搭建完毕后,就可以对测试集数据进行预测,代码如下。

在这里插入图片描述

通过如下代码汇总预测值和实际值,以便进行对比。

在这里插入图片描述

用模型自带的score()函数查看模型的预测效果,代码如下。

在这里插入图片描述

获得的模型准确度评分score为0.874,说明模型的预测效果不错。

也可以通过如下代码查看模型的R-squared值,来评估模型的拟合程度。

在这里插入图片描述

为了更科学合理地进行产品定价,可以通过如下代码查看各个特征变量的特征重要性,以便筛选出对价格影响最大的特征变量。

在这里插入图片描述

6 模型参数介绍

GBDT回归模型参数,更多查看可以在Jupyter Notebook中输入并运行如下代码:

from sklearn.ensemble import GradientBoostingRegressor
GradientBoostingRegressor ?

在这里插入图片描述

知识拓展

  • 用通俗易懂的方式讲解:逻辑回归模型及案例(Python 代码)
  • 用通俗易懂的方式讲解:决策树模型及案例(Python 代码)
  • 用通俗易懂的方式讲解: 随机森林及案例(Python 代码)
GBDT例子
zyoulanxin的博客
10-14 202
抄的: GBDT原理 import numpy as np import pandas as pd A1 = np.array([0,1,2,3]) A2 = np.array([5,7,21,30]) A3 = np.array([20,30,70,60]) y_label = np.array([1.1,1.3,1.7,1.8]) data = {"编号":A1,"年龄":A2,"体重":A3,"身高":y_label} data_used = pd.DataFrame(data) data_used
GBDT模型及案例Python
qq_42433311的博客
04-28 8709
目录 1 GBDT算法核心思想 2 GBDT算法的数学原理 3 GBDT算法数学原理举例 补充知识点:梯度提升树中梯度的理解 4 使用sklearn实现GBDT算法 5案例:产品定价模型 5.1模型搭建 5.1.1读取数据 5.1.2分类型文本变量的处理 5.1.3提取特征变量和目标变量 5.1.4划分训练集的测试集 5.1.5模型训练及搭建 5.2模型预测及评估 6模型参数介绍 参考书籍 1 GBDT算法核心思想 GBDT是Gradient Boosti...
(八)集成学习之GBDTpython代码实现
twlve的博客
04-14 2476
学习笔记参考:http://www.dmlearning.cn/single/a5bf33e7b2c44e499a1cb7b2d5f8fbfa.html 全英文PPT,但是这是我挣扎几天后看过最通俗易懂讲解了,打不开可以私聊我。 知识点: Gradient Boosting Decision Tree:梯度提升决策树 无论是回归还是分类,都是采用CART树 策略:会用第K个CART树拟合前K-1个CART树留下的残差,从而不断缩小整个模型的误差 但在在更一般的情况下,使用负梯度 better
Python实战:GBDT算法深度解析与二元分类应用
最新发布
lazycatlove的博客
07-10 458
如果你还不是很熟悉GBDT的基本原理,请参考以下两篇博文GBDT(梯度提升树)基本原理及python实现GBDT原理详解。
GBDT详解及举例
热门推荐
qq_15098623的博客
02-25 1万+
【尊重原创,转载请注明出处】http://blog.csdn.net/zpalyq110/article/details/79527653   GBDT 的全称是 Gradient Boosting Decision Tree,梯度下降树,在传统机器学习算法中,GBDT算的上TOP3的算法。想要理解GBDT的真正意义,那就必须理解GBDT中的Grad...
GBDT算法详解&算法实例(分类算法
HRMEMEDA的博客
09-30 8184
哈喽小天才们~今天和大家来唠一唠GBDT,对于怕麻烦的我,写这篇文章可是下了很大的决心,因为公式实在是太多啦o(╥﹏╥)o之前写了几篇关于机器学习代码实操,原理部分基本上都是几行一大段就简述了,今天我打算好好写一写GBDT算法原理,毕竟是集成算法的代表选手,还是要尊重一下的本人之前对GBDT算法并没有很深入的推算过,所以借着这个机会,整理一下我的学习笔记,把之前一带而过的公式推导手推了一遍,同时也希望这篇文章能帮到还在GBDT算法原理徘徊的姐妹们,别犹豫了,拿起纸笔加入我吧hhhh。
GBDT原理实例演示 1
weixin_34326179的博客
03-25 239
考虑一个简单的例子来演示GBDT算法原理 下面是一个二分类问题,1表示可以考虑的相亲对象,0表示不考虑的相亲对象 特征维度有3个维度,分别对象 身高,金钱,颜值    cat dating.txt #id,label,hight,money,face _0,1,20,80,100 _1,1,60,90,25 _2,1,3,95,95 _3,1,66,95,60...
GBDT:梯度提升决策树
jbcsimple
08-10 6675
GBDT:梯度提升决策树 字数2887 阅读1208 评论0 喜欢2 综述   GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。   
python分类算法有哪些_【Python成长之路】机器学习:10+分类算法汇总学习
weixin_39832348的博客
12-04 1314
哈喽大家好,我是鹏哥。今天想学习记录的主题是——分类算法的汇总使用。~~~上课铃~~~1写在前面一直都说python是人工智能、机器学习算法的良配,很多python大神除了常规的大数据爬虫、网站开发等代码能力外,人工智能/机器学习也都是手到擒来。因此我也“跳坑”来看看 。由于python sklearn库的良好集成,我发现无论对于各类算法的实现、训练、预测都很简单,而且不同算法之间的代码逻辑和...
gdbt java_GBDT算法原理以及实例理解
weixin_33377602的博客
02-23 282
GitHub简书CSDN写在前面: 去年学习GBDT之初,为了加强对算法理解,整理了一篇笔记形式的文章,发出去之后发现阅读量越来越多,渐渐也有了评论,评论中大多指出来了笔者理解或者编辑的错误,故重新编辑一版文章,内容更加翔实,并且在GitHub上实现了和本文一致的GBDT简易版(包括回归、二分类、多分类以及可视化),供大家交流探讨。感谢各位的点赞和评论,希望继续指出错误简介:GBDT 的全称是 ...
一文速学-GBDT模型算法原理以及实现+Python项目实战
master_hunter的博客
03-07 3227
上篇文章内容已经将Adaboost模型算法原理以及实现详细讲述实践了一遍,但是只是将了Adaboost模型分类功能,还有回归模型没有展示,下一篇我将展示如何使用Adaboost模型进行回归算法训练。首先还是先回到梯度提升决策树GBDT算法模型上面来,GBDT模型衍生的模型在其他论文研究以及数学建模比赛中十分常见,例如XGBoost,LighGBM,catboost。算法差异点GBDTXGBoostLightGBMCatBoost弱学习器CART回归树1.CART回归树2.线性学习器。
GBDT单机版Python实现源代码
12-28
GBDT单机版Python实现源代码
python实现GBDT的回归、二分类以及多分类
01-02
python实现GBDT的回归、二分类以及多分类,将算法流程详情进行展示解读并可视化,庖丁解牛地理解GBDT
gbdt算法实现
12-12
C实现的gbdt算法,包含源码,训练和测试数据的文件
大白话GBDT算法-通俗理解GBDT原理
06-21
本课程分为4个模块。 第一个模块通过预测年龄的直观案例理解GBDT算法流程。 第二个模块通过GBDT的三要素:GB(梯度提升),DT(回归树)和Shrinkage(缩减)理解GBDT算法核心。 第三个模块通过剖析分类和回归损失函数来讲解GBDT在分类和回归方面的应用。 第四个模块通过手动方式一步步拆解讲解GBDT回归,二分类,多分类的过程,还原真实迭代流程。 第五个模块通过真实案例讲解GBDT的工作中所用API。 资料: 视频:
GBDT算法理解
08-15
详解了GBDT算法原理和实现过程
python机器学习案例系列教程——LightGBM算法
qq_45368327的博客
07-09 176
python机器学习案例系列教程——LightGBM算法
python回归模型_GBDT 回归的原理和Python 实现
weixin_39815456的博客
11-24 606
完整实现代码请参考github:1. 原理篇我们用人话而不是大段的数学公式来讲讲GBDT回归是怎么一回事。1.1 温故知新回归树是GBDT的基础,之前的一篇文章曾经讲过回归树的原理和实现。1.2 预测年龄仍然以预测同事年龄来举例,从《回归树》那篇文章中我们可以知道,如果需要通过一个常量来预测同事的年龄,平均值是最佳的选择之一。1.3 年龄的残差我们不妨假设同事的年龄分别为5岁、6岁、7岁,那么同事...
GBDT的使用例子
cyong888的专栏
06-10 1238
1.需要按照numpy 和 sklearn,安装的时候会有各种包的依赖。建议安装 anaconda3,这样就全部安装好了。安装地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 2.python3的代码如下(和python2差不多) 3.训练速度特别快,100W的训练数据不到5分钟。 # -*- coding:utf-8 -*- import numpy as np import codecs import pickle from skl.
matlab里有没有GBDT代码
05-20
是的,MATLAB提供了Gradient Boosted Decision Trees (GBDT)的实现。下面是一个简单的示例代码: ```matlab load carbig X = [Displacement Horsepower Weight]; Y = MPG; t = fitensemble(X,Y,'LSBoost',100,'Tree'); ``` 在这个示例中,我们使用了`carbig`数据集,将`Displacement`、`Horsepower`和`Weight`作为特征,`MPG`作为标签。我们使用`fitensemble`函数来训练一个基于决策树的LSBoost模型,包含100个弱分类器。 你也可以使用其他的GBDT变种,例如XGBoost或LightGBM,这些算法都有MATLAB的接口实现。
写文章

热门文章

  • 太香了,这100 个 Python 代码案例非常适合初学者练习 48865
  • 用通俗易懂的方式讲解:主成分分析(PCA)算法及案例(Python 代码) 33532
  • 【推荐收藏】11种比较常用的时间序列预测模型 31886
  • 【推荐收藏】1000+ Python第三方库大合集 29109
  • 如何使用 Python 提取 JSON 中的数据? 27713

分类专栏

  • 深度学习 18篇
  • python 501篇
  • LLM基础 8篇
  • 机器学习 152篇
  • Pytorch 4篇
  • 面试宝典 20篇
  • 数据分析及可视化 80篇
  • SQL 11篇
  • Linux 1篇
  • 人物 1篇

最新评论

  • 【数据分析岗】8家知名企业秋招(含实习)面试题汇总

    晴天qt01: 和想象中不太一样

  • 用通俗易懂的方式讲解: GBDT算法及案例(Python 代码)

    lrhaowx: 演示的稀烂,预测值不是你自己造的,是根据分类结果取平均的

  • 用通俗易懂的方式讲解:主成分分析(PCA)算法及案例(Python 代码)

    流畅的美杜莎: 文章中的错误不少,这是其中一个表情包

  • 用通俗易懂的方式讲解:CatBoost 算法原理及案例

    cts618: CatBoost 算法原理及案例

  • Python 可轻松开发植物大战僵尸游戏(附动态演示+源码分享)

    唐灵波: 植物大战僵尸

大家在看

  • Java | Leetcode Java题解之第424题替换后的最长重复字符
  • Java | Leetcode Java题解之第423题从英文中重建数字
  • Python | Leetcode Python题解之第423题从英文中重建数字
  • C++ | Leetcode C++题解之第424题替换后的最长重复字符
  • Golang | Leetcode Golang题解之第423题从英文中重建数字

最新文章

  • 最强全面总结,十大集成学习模型!!!
  • 梳理 Pytorch 19个方面,70个核心操作全总结!
  • 被狠狠拷打!想冲 PDD 机器学习算法岗,一面直接挂了。。。
2024
04月 6篇
03月 4篇
02月 6篇
01月 31篇
2023年127篇
2022年367篇
2021年70篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

天下网标王潜山网站优化收费黔西分类网站优化福州网站优化排名公司实力强视频排名优化网站溧阳网站推广优化廊坊网站优化设计精湛的网站seo优化安徽营销网站搭建优化潜山网站优化收费低百度网站推广排名优化网站优化公司第三方输入法网站内页url应该如何优化安庆如何做网站推广优化跟我学网站优化教程丰县网站推广优化惠州网站排名优化软件龙岗网站设计佛山网站优化排名苏宁网站页面优化分析网站内页需要优化哪些地方168优化重组网站网站推广网站优化网络营销方案冷水江网站推广优化大连金普新区网站优化黄浦区谷歌网站优化价格罗湖哪个网站优化在线推广河北品质网站优化大全网站优化有什么表现中国移动网站优化建议射阳网站优化工作室香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化