当前位置: 首页 > news >正文

【机器学习】GBDT

1.什么是GBDT

        GBDT(Gradient Boosting Decision Tree),梯度提升树。它是一种基于决策树的集成算法。其中Gradient Boosting 是集成方法boosting中的一种算法,通过梯度下降来对新的学习器进行迭代。它是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。GBDT算法无论处理回归问题还是分类问题使用的决策树都是CART回归树,原因是GBDT每次迭代要拟合的是梯度值,是一个连续值,所以要用回归树。

1-1 Gradient Boosting(GB) 梯度迭代

        Gradient Boosting是Boosting中的一大类算法,它的思想借鉴于梯度下降法,其基本原理是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。即通过迭代多棵树来共同决策。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量

        例如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树就会把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。这就是Gradient Boosting在GBDT中的意义。    

1-2 Decision Tree(DT)决策树

        Decision Tree决策树。决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;后者用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。这里要强调的是,前者的结果加减是有意义的,如10岁+5岁-3岁=12岁,后者则无意义,如男+男+女=到底是男是女? GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,不是分类树。

2.GBDT的原理

        提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方误差损失函数和指数损失函数时,每一步优化都比较简单。假设现在有x=(1,2,3),y=(11,12,13),具体的流程如下。

3.GBDT公式推导

1.定义基模型DT

 2.模型相加

 3.损失函数

        参数w是每个基线模型决策树的参数,也就是每个基模型的每个分裂特征和每个分裂阈值。

 4.公式变形

        由于是向前加和,最终模型的输出等于m个基线模型的输出相加。对公式进行变形,最终的模型输出等于前m-1个基线模型的输出与第m个基线模型输出相加。

 5.损失函数变形       

        将第4步中的变形的公式带入到损失函数中,得到损失函数的变形表示。

        为真实值, 为截止到第M-1颗树的预测值,为第M颗树的预测结果。

 6.换元表示

        ri表示的是在训练第M颗树的时候,截止到当前的残差值(误差)

           其中损失函数为平方误差,并且GBDT规定,利用损失函数的负梯度在当前模型的值,作为残差的近似值。

损失函数:  。当前模型的值为:

残差近似值为:

4.GBDT详细过程

        向前分布的算法的核心目标:针对训练集合中的所有样本每增加一个优化器,都要确保整体损失下降。

 

http://www.lryc.cn/news/13570.html

相关文章:

  • C#开发的OpenRA游戏高性能内存访问的方法
  • 【elasticsearch】elasticsearch es读写原理
  • 数据在内存中的存储【上篇】
  • 慕了没?3年经验,3轮技术面+1轮HR面,拿下字节30k*16薪offer
  • 「可信计算」与软件行为学
  • 华为OD机试题 - 找字符(JavaScript)| 代码+思路+重要知识点
  • Linux 进程启动方法
  • CLEVE:事件抽取的对比预训练
  • 【C++】AVLTree——高度平衡二叉搜索树
  • 软考中级-嵌入式系统设计师(二)
  • epoll 笔记
  • vue(5)
  • Android OTA 相关工具(一) 虚拟 A/B 之 snapshotctl
  • QT for Android BLE Bluetooch QT BLE
  • 【蓝桥集训】第四天——双指针
  • List<Map<String, Object>>的数据结构的添加和删除实例
  • 5.2 线程实际案例练习
  • stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
  • 山西省2023年软考报名3月14日开始
  • 进程章节总结性实验
  • 【MyBatis】MyBatis的缓存
  • MyBatis基本使用
  • 如何运行YOLOv6的代码实现目标识别?
  • 新品BCM6755A1KFEBG/MT7921LE/MT7921AU WiFi芯片
  • 析构函数、拷贝构造
  • 光学镜头是制作过程阶段理解
  • 实验室设计|实验室设计要点SICOLAB
  • I.MX6ULL_Linux_系统篇(16) uboot分析-启动流程
  • 【C#】async关键字修饰后有无await的影响
  • Interspeech2022 | 一种基于元辅助学习的低资源口语语义理解方法