梯度提升决策树(Gradient Boosting Decision Trees,GBDT)

梯度提升决策树(Gradient Boosting Decision Trees,GBDT)

​ 提升树是以分类树或回归树为基本分类器的提升方法。 提升树被认为是统计学习 中性能最好的方法之一。

​ 提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。 以决策树为基函数的提升方法称为提升树 (boosting tree)。 对分类问题决策树是二叉分类树, 对回归问题决策树是二叉回归树

---------------------------------------------------------------------------------------------------------------------------------------

输入:线性可分训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T= \{(x_1,y_1), (x_2,y_2),…, (x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)}

​ 其中, x i ∈ X = R n , y i ∈ Y , i = 1 , 2 , … , N x_i∈X=R^n,y_i∈Y, i = 1,2,…,N xiX=Rn,yiY,i=1,2,,N;弱学习算法

输出:提升树 f M ( x ) f_M(x) fM(x)

优化问题

​ 不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。回归问题:平方误差损失函数;分类问题:指数损失函数。

f m − 1 ( x ) f_{m-1}(x) fm1(x) 为当前模型,通过经验风险极小化确定下一颗决策树的参数 Θ m \Theta_m Θm
Θ ^ m = a r g m i n Θ m ∑ i = 1 N L ( y i , f m ( x ) ) → Θ ^ m = a r g m i n Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x ; Θ m ) ) \hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^NL(y_i,f_m(x))\\ \\ →\hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x;\Theta_m)) Θ^m=arg Θmmini=1NL(yi,fm(x))Θ^m=arg Θmmini=1NL(yi,fm1(xi)+T(x;Θm))
回归问题:
Θ ^ m = a r g m i n Θ m ∑ i = 1 N ( y i − f m ( x ) ) 2 → Θ ^ m = a r g m i n Θ m ∑ i = 1 N ( y i − f m − 1 ( x ) − T ( x ; Θ m ) ) 2 → Θ ^ m = a r g m i n Θ m ∑ i = 1 N ( r − T ( x ; Θ m ) ) 2 , r = y − f m − 1 ( x ) \hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^N(y_i-f_{m}(x))^2\\ \\ →\hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^N(y_i-f_{m-1}(x)-T(x;\Theta_m))^2\\ \\ →\hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^N(r-T(x;\Theta_m))^2,r=y-f_{m-1}(x) Θ^m=arg Θmmini=1N(yifm(x))2Θ^m=arg Θmmini=1N(yifm1(x)T(x;Θm))2Θ^m=arg Θmmini=1N(rT(x;Θm))2,r=yfm1(x)

分类问题:
Θ ^ m = a r g m i n Θ m ∑ i = 1 N e x p ( − y i f m ( x ) ) → Θ ^ m = a r g m i n Θ m ∑ i = 1 N e x p [ − y i ( f m − 1 ( x ) + T ( x ; Θ m ) ) ] \hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^Nexp(-y_if_m(x))\\ \\ →\hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^Nexp[-y_i(f_{m-1}(x)+T(x;\Theta_m))] Θ^m=arg Θmmini=1Nexp(yifm(x))Θ^m=arg Θmmini=1Nexp[yi(fm1(x)+T(x;Θm))]
---------------------------------------------------------------------------------------------------------------------------------------

​ 提升树模型可以表示为决策树的加法模型:
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1MT(x;Θm)
其中, T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)表示决策树, Θ m \Theta_m Θm为决策树的参数,M为树的个数。

​ 首先确定初始提升树 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0,第m步的模型是:
f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_{m}(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm1(x)+T(x;Θm)

回归问题的提升树

​ 已知一个训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T= \{(x_1,y_1), (x_2,y_2),…, (x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)}其中, x i ∈ X = R n , y i ∈ Y , i = 1 , 2 , … , N x_i∈X=R^n,y_i∈Y, i = 1,2,…,N xiX=Rn,yiY,i=1,2,,NX 为输入空间,Y 为输出空间。

​ 如果将输入空间划分为J 个互不相交的区域 R 1 , R 2 , . . . , R J R_1,R_2,...,R_J R1,R2,...,RJ ,并且在每个区域上确定输出的常量 c j c_j cj ,那么树可以表示为:
T ( x ; Θ ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x;\Theta)=\sum_{j=1}^Jc_jI(x∈R_j) T(x;Θ)=j=1JcjI(xRj)
其中,参数 Θ = { ( R 1 , c 1 ) , ( R 2 , c 2 ) , . . . , ( R J , c J ) } \Theta=\{(R_1,c_1),(R_2,c_2),...,(R_J,c_J)\} Θ={(R1,c1),(R2,c2),...,(RJ,cJ)} 表示树的区域划分和各个区域上的常数。J 是回归树的复杂度即叶节点个数。

回归问题的前向分布算法

f 0 ( x ) = 0 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) , m = 1 , 2 , . . . , M f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_0(x)=0\\ \\ f_m(x)=f_{m-1}(x)+T(x;\Theta_m),\ \ \ m=1,2,...,M\\ \\ f_M(x)=\sum_{m=1}^MT(x;\Theta_m) f0(x)=0fm(x)=fm1(x)+T(x;Θm),   m=1,2,...,MfM(x)=m=1MT(x;Θm)

第m步时,当前模型是 f m − 1 ( x ) f_{m-1}(x) fm1(x) ,要求解以下的式子(回归问题采用均方误差损失函数)得到 Θ ^ m \hat\Theta_m Θ^m
Θ ^ m = a r g m i n Θ m ∑ i = 1 N ( y i − f m ( x ) ) 2 → Θ ^ m = a r g m i n Θ m ∑ i = 1 N ( y i − f m − 1 ( x ) − T ( x ; Θ m ) ) 2 → Θ ^ m = a r g m i n Θ m ∑ i = 1 N ( r − T ( x ; Θ m ) ) 2 , r = y − f m − 1 ( x ) \hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^N(y_i-f_{m}(x))^2\\ \\ →\hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^N(y_i-f_{m-1}(x)-T(x;\Theta_m))^2\\ \\ →\hat\Theta_m=arg\ \underset{\Theta_m}{min}\sum_{i=1}^N(r-T(x;\Theta_m))^2,r=y-f_{m-1}(x) Θ^m=arg Θmmini=1N(yifm(x))2Θ^m=arg Θmmini=1N(yifm1(x)T(x;Θm))2Θ^m=arg Θmmini=1N(rT(x;Θm))2,r=yfm1(x)
算法流程:

输入:线性可分训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T= \{(x_1,y_1), (x_2,y_2),…, (x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)}

​ 其中, x i ∈ X = R n , y i ∈ Y , i = 1 , 2 , … , N x_i∈X=R^n,y_i∈Y, i = 1,2,…,N xiX=Rn,yiY,i=1,2,,N;弱学习算法

输出:提升树 f M ( x ) f_M(x) fM(x)

(1)初始化 f 0 ( x ) = 0 f_0(x)= 0 f0(x)=0

(2)对m=1,2,…,M。

​ (a)按照 T ( x ; Θ ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x;\Theta)=\sum_{j=1}^Jc_jI(x∈R_j) T(x;Θ)=j=1JcjI(xRj)计算残差:
r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , . . . , N r_{mi}=y_i-f_{m-1}(x_i),\ \ \ i=1,2,...,N rmi=yifm1(xi),   i=1,2,...,N
​ (b)拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m ) T(x;Θm)

​ (c)更新 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm1(x)+T(x;Θm)

(3)得到回归问题的提升树
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1MT(x;Θm)

梯度提升

​ 提升树算法利用加法模型与前向分布算法实现学习的优化过程。当损失函数时平方损失和指数损失函数的时候,每一步的优化时很简单的。但是对于一般损失函数而言,往往每一步优化都不是容易的。

其关键是利用损失函数的负梯度在当前模型的值
− [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} [f(xi)L(y,f(xi))]f(x)=fm1(x)
作为回归问题提升树算法中的残差的近似值,拟合一个回归树。

算法流程:

输入:线性可分训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T= \{(x_1,y_1), (x_2,y_2),…, (x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)}

​ 其中, x i ∈ X = R n , y i ∈ Y , i = 1 , 2 , … , N x_i∈X=R^n,y_i∈Y, i = 1,2,…,N xiX=Rn,yiY,i=1,2,,N;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x)) ;

输出:提升树 f ^ ( x ) \hat f(x) f^(x)

(1)初始化 f 0 ( x ) = a r g m i n c ∑ i = 1 N L ( y i , c ) f_0(x)= arg \underset{c}{min}\sum_{i=1}^NL(y_i,c) f0(x)=argcmini=1NL(yi,c)

(2)对m=1,2,…,M。

​ (a)对i=1,2,…,N,计算:
r m i = − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(y,f(xi))]f(x)=fm1(x)
​ (b)拟合残差 r m i r_{mi} rmi学习一个回归树,得到第m颗树的叶节点区域 R m j , j = 1 , 2 , . . . , J R_{mj},j=1,2,...,J Rmj,j=1,2,...,J

​ (c)对j=1,2,…,J,计算
c m j = a r g m i n c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=arg\ \underset{c}{min}\sum_{x_i∈R_{mj}}L(y_i,f_{m-1}(x_i)+c) cmj=arg cminxiRmjL(yi,fm1(xi)+c)
​ (d)更新 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{mj}I(x∈R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)

(3)得到回归树
f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat f(x)=f_M(x)=\sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x∈R_{mj}) f^(x)=fM(x)=m=1Mj=1JcmjI(xRmj)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mendeley Word 文献引用

这里写目录标题 1. 下载Mendeley 并插入到Word1.1 下载安装1.2 在Word 中添加Mendeley 插件文献引用相关 1. 下载Mendeley 并插入到Word 1.1 下载安装 Mendeley 官网下载 1.2 在Word 中添加Mendeley 插件 打开 Mendeley,点击 Tools —>Install Mendeley Cite…

AWS云用户创建

问题 需要给工友创建AWS云的用户,这里假设使用分配给自己AWS开发者IAM账号,给别人创建aws IAM账号。 登录系统 打开页面:https://xxx.signin.aws.amazon.com/console,使用分配的开发者账号登录。如下图: 创建用户…

资源分享栏目一直会更新

文章目录 1. [南京大学IT侠文档共享计划](https://www.yuque.com/itxia)2. [洛谷OJ平台](https://www.luogu.com.cn/)3. [ChatGPT](chat.openai.com)4. [stackoverflow](stackoverflow.com) 1. 南京大学IT侠文档共享计划 可以解决大部分的电脑问题,如遇到Windows 系…

vue组件开发

1. 组件开发介绍 ① 组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构、样式、行为。 好处:便于维护,利于复用 → 提升开发效率。 组件分类:普通组件、根组件。② 根组件(App.vue&#xf…

Hive之set参数大全-5

I 限制外部表数据插入 set hive.insert.into.external.tablestrue;在Apache Hive中,通过INSERT INTO语句向外部表(External Table)插入数据时,有一些注意事项和限制。外部表是Hive中的一种特殊表,它与Hive管理的存储…

探索Redis特殊数据结构:HyperLogLog在基数统计中的应用

一、概述 Redis官方提供了多种数据类型,除了常见的String、Hash、List、Set、zSet之外,还包括Stream、Geospatial、Bitmaps、Bitfields、Probabilistic(HyperLogLog、Bloom filter、Cuckoo filter、t-digest、Top-K、Count-min sketch、Confi…

Mariadb和mysql数据库的区别和相同之处

目 录 一、maridb 和mysql在linux系统中广泛应用 二、MySQL数据库 三、MariaDB数据库 四、MariaDB和MySQL有哪些相同点 五、MariaDB和MySQL的不同点 一、mariadb 和mysql在linux系统中广泛应用 用linux(包括centos和Ubuntu)的都知道&a…

使用Trie数据结构实现搜索自动完成功能

本文旨在讨论使用 Java 的搜索自动完成的低级实现&#xff0c;将Trie在用例中使用数据结构。 这是一个示例TrieNode类&#xff1a; class TrieNode{ Map<Character,TrieNode> children; boolean isEndOfWord; TrieNode(){ children new HashMap<>(); isEndOfWor…

Unity 利用UGUI之Scrollbar制作进度条

在Unity中除了用Slider、Image做进度条&#xff0c;其实用Scrollbar也可以做进度条。 首先&#xff0c;在场景中新建一个Scrollbar组件和一个Text组件&#xff1a; 其次&#xff0c;创建模拟进度的一个脚本&#xff0c;Scrollbar_Progressbar.cs: using System.Collections; …

Linux:linux计算机和windows计算机 之间 共享资源

在前面章节已经介绍过&#xff0c;NFS用于Linux系统之间的文件共享&#xff0c;windows 并不知道 NFS &#xff0c;而是使用 CIFS (Common Internet File System) 的协议机制 来 “共享” 文件。在1991年&#xff0c;Andrew Tridgell 通过逆向工程 实现了 CIFS 协议&#xff0c…

解决“Vue.js not detected”的问题

如果你遇到了“Vue.js not detected”的问题&#xff0c;这通常意味着Vue.js没有正确地加载到你的项目中。以下是一些可能的解决方案&#xff1a; 检查Vue.js的版本&#xff1a;确保你使用的Vue.js版本与你的项目兼容。如果你正在使用一个旧的项目&#xff0c;尝试升级Vue.js到…

中兴通讯5G-A场景突破成果显著,获得行业高度认可

近年来&#xff0c;中兴通讯持续发力5G-A场景&#xff0c;积极进行相关技术研发&#xff0c;为6G时代的到来铺路。2023年12月28日&#xff0c;在2024&#xff08;第二十届&#xff09;ICT行业趋势年会“ICT龙虎榜揭榜盛典”当中&#xff0c;中兴通讯获得“2023年度5G-A场景开拓…

01-06弹性布局

弹性布局 弹性布局 Flex布局&#xff1a;Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来替代float浮动布局&#xff0c;任何一个容器都可以指定为Flex布局 概念&#xff1a;采用Flex布局的元素&#xff0c;称为Flex容器&#xff08;flex container&…

【OCR】实战使用 - ocr 识别图片中的文字

实战使用 - ocr 识别图片中的文字 在Python中&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;通常使用一些开源库来实现&#xff0c;如 pytesseract、Tesseract、PIL&#xff08;Python Imaging Library&#xff09;等。以下是…

学习笔记——C++二维数组

二维数组定义的四种方式&#xff1a; 1&#xff0c;数据类型 数组名[ 行数 ][ 列数 ]&#xff1b; 2&#xff0c;数据类型 数组名[ 行数 ][ 列数 ]{{数据1&#xff0c;数据2}&#xff0c;{数据3&#xff0c;数据4}}&#xff1b; 3&#xff0c;数据类型 数组名[ 行数…

Redis面试题7

Redis 的性能瓶颈有哪些&#xff1f;如何解决&#xff1f; Redis 的性能瓶颈主要有&#xff1a;网络延迟、单线程模型、内存限制等&#xff1b; 解决网络延迟的方法有&#xff1a;使用连接池机制&#xff0c;减少连接的建立和断开次数&#xff1b;使用管道技术&#xff0c;减少…

Webservice,WCF,WebAPI--特点及进化史

WebService、WCF 和 WebAPI 是 Microsoft 在不同时期推出的三种基于不同技术和架构的 Web 服务技术。它们在不同时期的演化中逐步推出&#xff0c;以满足不断变化的需求和技术发展的趋势。 1. WebService&#xff1a;WebService 是一种使用 SOAP 协议和 XML 消息格式的 Web 服…

Vue3导出el-table为execl文件

在开发时遇到了这样的需求&#xff0c;整理之后向大家分享一下&#xff0c;欢迎积极讨论与指正哦 因为在实现表格时使用了分页插件&#xff0c;在导出时只能导出本页的内容&#xff0c;最后选择了这样的方法&#xff1a; 正常显示的表格使用分页后的数据 在这里设置了id 而用…

了解 Node.js 的运行机制:从事件循环到模块系统(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

自己写几个字符串函数

字符串一直是一个很神奇的东西&#xff0c;顾名思义&#xff0c;字符串是由字符所构成的串&#xff0c;而一串字符也就构成了字符串&#xff1b;而我们又知道&#xff0c;字符在内存中是以ASCII码的形式进行存储的&#xff0c;所以说将一切联系起来&#xff0c;我们就可以来研究…