文章目录

  • 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 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算法及案例(Python 代码)相关推荐

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

    文章目录 知识汇总 加入方式 一.引入问题 二.数据降维 三.PCA基本数学原理 3.1 内积与投影 3.2 基 3.3 基变换的矩阵表示 3.4 协方差矩阵及优化目标 3.5 方差 3.6 协方差 ...

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

    文章目录 知识汇总 解惑答疑 1.梯度提升概述 2.什么是 CatBoost 3.CatBoost 的主要特点 01 对称树 FloatFeature OneHotFeature OnlineCtr ...

  3. 用通俗易懂的方式讲解:TF-IDF算法介绍及实现

    文章目录 1.TF-IDF算法介绍 (1)TF是词频(Term Frequency) (2) IDF是逆向文件频率(Inverse Document Frequency) (3)TF-IDF实际上是: ...

  4. 联邦学习算法介绍-FedAvg详细案例-Python代码获取

    联邦学习算法介绍-FedAvg详细案例-Python代码获取 一.联邦学习系统框架 二.联邦平均算法(FedAvg) 三.联邦随梯度下降算法 (FedSGD) 四.差分隐私随联邦梯度下降算法 (DP- ...

  5. python重点知识归纳_一文了解机器学习知识点及其算法(附python代码)

    一文了解机器学习知识点及其算法(附python代码) 来源:数据城堡 时间:2016-09-09 14:05:50 作者: 机器学习发展到现在,已经形成较为完善的知识体系,同时大量的数据科学家的研究成 ...

  6. 数学建模——主成分分析算法详解Python代码

    数学建模--主成分分析算法详解Python代码 import matplotlib.pyplot as plt #加载matplotlib用于数据的可视化 from sklearn.decomposi ...

  7. 国密算法 SM2公钥密码 SM3杂凑算法 SM4分组密码 python代码完整实现

    包含SM2公钥密码.SM3杂凑算法和SM4分组密码的国密算法完整工具包完成了.此前分别发布过上述三个算法的代码: SM2:国密算法 SM2 公钥加密 非对称加密 数字签名 密钥协商 python实现完 ...

  8. 用通俗易懂的方式讲解:逻辑回归模型及案例(Python 代码)

    目录 1 简介 2 优缺点 3 适用场景 加入方式 4 案例:客户流失预警模型 4.1 读取数据 4.2 划分特征变量和目标变量 4.3 模型搭建与使用 4.3.1 划分训练集与测试集 4.3.2 模 ...

  9. BPR贝叶斯个性化推荐算法—推荐系统基础算法(含python代码实现以及详细例子讲解)

    BPR贝叶斯个性化排序算法 一.问题导入 二.显示反馈与隐式反馈 2.1 显式反馈与隐式反馈基本概念 2.2 显式反馈与隐式反馈的比较 2.3 显式反馈与隐式反馈的评价方法 2.3.1 显式反馈数据模 ...

  10. 优化算法 | 人工蜂群算法(附Python代码)

    hello,大家好.各位可点击左下方阅读原文,访问公众号官方店铺.谨防上当受骗,感谢各位支持! 今天为各位更新人工蜂群算法(Artificial Bee Colony,ABC)的Python代码,之前 ...

最新文章

  1. linux动态线程池--原理,这儿的代码不完整
  2. 内嵌资源html,内嵌元素(HTML)
  3. mysql show processlist host_show processlist host 为 百分号(%)
  4. 关于分布式系统的数据一致性问题(三)
  5. 使用Excel调用ABAP系统的函数
  6. 算法随笔一(背包问题)
  7. JavaScript学习笔记(八)--正则表达式
  8. 7-1 水文数据校验及处理 (50 分)
  9. php 怎么配置邮件,PHP发邮件的配置_PHP教程
  10. linux怎么让cat运行,使用lolcat让你的Linux命令行出现七彩虹
  11. supervisor+gunicorn部署python web项目
  12. Android语音识别(本地+第三方)
  13. android AT指令获取SIM卡ICCID
  14. 20180124现货黄金复盘
  15. android matrix 亮度,Android ColorMatrix 亮度矩阵 对比度矩阵 黑白矩阵
  16. 文件搜索工具(简单版)
  17. 666RPG(计数dp)
  18. 大文件中返回频数最高的100个词
  19. n1盒子openwrt某个容器无法启动 启动直接死机
  20. 三星note10 android11,安卓 11 来了,三星 Galaxy Note 10 系列升级 One UI 3.0

热门文章

  1. 计算机在线应用不能安装,教您电脑为什么安装不了软件
  2. 算法设计与分析第一章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  3. 开发者需要的 9 款代码比较工具
  4. php刷屏代码,PHP防止刷屏
  5. vmware的xp虚拟机更改虚拟硬盘序列号
  6. DevExpress ChartControl 绘制圆滑曲线
  7. 开关电源三种拓扑的产生
  8. 数据结构C语言版第二版(名师严蔚敏最新力作)人民邮电出版社
  9. 《Shell脚本学习指南》
  10. python语言之父丹尼斯里奇_C语言之父-丹尼斯里奇