XGBoost目标函数推导
目标函数:
累加训练
目标函数t时刻的整体复杂度可以拆分成,那么t-1时刻前面的所有的复杂度都已经固定了,就用constant表示。
我们发现目标函数(相对GBDT)里面是带正则项的,t-1时刻的正则项全部在const里面
2.对loss进行泰勒二阶展开的近似。
对loss损失函数(括号里的内容进行二阶泰勒展开)
GBDT用的是牛顿法(一阶导)
XGBoost用的是梯度下降(二阶导)
XGBoost用更快速度找到最优解,迭代次数更少
3.再次化简目标函数
因为我们让目标函数尽可能小对常数项没有关系,那么我们就可以把常数项都去掉。前面l(yi,yi_hat(t-1))也是常数项也可以去掉。
新的目标函数
GBDT是拟合上一条样本的负梯度
XGBoost是去拟合上一条样本的gi、hi,所以我们在训练的时候,要去准备下一条样本的gi、hi,准备好了后,变量就是ft(xi),那么目标函数就是再求ft(xi)是何值时,整体的损失最小。
综合以上XGBoost对比GDBT有两点好处:
(1)考虑了正则项Ω。
(2)求二阶导,使得梯度下降的更快。
4.重新定义树
q:代表落在哪个叶子节点,返回那个叶子节点的索引号,T:T个叶子节点
W:是一个向量里面存放所有叶子分数,给出一个索引号,从W向量里查询分数。
W(qx):根据q(x)叶子节点的索引号,取出来W向量里面相应的分值
经过重新定义后,一棵树对应的分值就是,在目标函数中就可以把替换成
5.重新定义复杂度
γ:系数
T:叶子节点个数
:系数
W:就是上面定义的叶子节点的分值
叶子节点越少,复杂度就越小。
叶子节点分值越少,正则项数值就越少。
6.在重新定义树和复杂度后,带入原目标函数,得到新的目标函数
7.再次化简 目标函数
因为
我们假设
带入目标函数
所以
最终目标函数变成
确定好目标函数后,obj分值越小,代表树的结构越好,我们就可以通过obj分值知道我们要选择第一棵树,还是第二颗树的结构
我们就可以把obj当成每棵树分裂的评价指标
例如:tree1比tree2多分了一次,如果多分了这次后计算得到的obj比tree高了,就说明树的结构还不如不分。
8.XGBoost收益计算
分裂前计算一下obj,用分裂前的obj减去分裂后的两个叶子结点的obj得到下面的公式。
计算obj收益,根据obj收益选择最佳特征特征值。
9.时间复杂度
O(n d K log n)
d个特征,每个特征有K个分裂点。
优化:
基于这个分裂节点再进行分裂后,下一个分裂节点可以不用再进行分裂。因为X都是一样的,每次分裂排序不会变,那么我们整体学习一棵树的时间复杂度就会优化。
在集成学习中最耗时间的部分是每个特征选择最佳分割点,XGBoost在训练前将数据进行了排序,并存储在Block中,以后每次迭代直接用Block中存储的结构,这样大大节省了计算时间。
特征寻找最佳分割点需要计算增益,XGBoost对这个过程使用了多线程。
XGBoost前剪枝
树节点往下分裂,如果计算得到收益是负的,就不会往下分了。
但是这样做有个问题,这次收益是负的,但是如果继续分裂说不定下次收益就是正的,而且加起来收益会很大。。
为了解决这个问题:后剪枝
让树充分生长,通过传入超参,在叶子涨到一定程度后,剪掉最后面的负收益的叶子节点。
有了XGBoost,就不太用GBDT了,因为XGBoost就是GBDT的优化。
XGBoost目标函数推导相关推荐
- XGBoost原理及目标函数推导详解
前言 XGBoost(eXtreme Gradient Boosting)全名叫极端梯度提升,XGBoost是集成学习方法的王牌,在Kaggle及工业界都有广泛的应用并取得了较好的成绩,本文较详细的介 ...
- XGBoost的目标函数推导和分裂增益计算
1.XGBoost简介 XGBoost是一种基于GBDT优化的工程化实现,是由n个基模型组成的一个加法模型,它的基本类器可以是树模型,也可以是线性分类器,本文以树模型进行推导. 1.1XGBoost的 ...
- 【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 可行解表示 | 目标函数推导 | 目标函数最大值分析 )
文章目录 一.基矩阵 + 非基矩阵 约束条件 二.基矩阵 + 非基矩阵 线性规划 三.线性规划 可行解 四.目标函数 推导 五.XN=OX_N = OXN=O 目标函数最大 分析 六.总结 在上一篇 ...
- svm最大间隔函数及目标函数推导
svm的推导,最大间隔为基本要求,转换成最小值:
- 03 ,似然函数求解 :目标函数推导,对数似然求解,最小二乘法
1 ,真实值函数推导 : 真实值正态曲线 定义 : 跟数据曲线很相似的函数 个人思考 : 1 ,目的 : 得到数据的正态分布图 2 ,已知 : 高斯分布图 ( 误差分布图符合正态分布,也就是搞碎分布 ...
- XGBoost的原理、公式推导
本文是基于刘启林老师的知乎文章所进行的学习笔记. XGBoost(eXtreme Gradient Boosting)极致梯度提升,是一种基于GBDT的算法或者说工程实现. XGBoost基础 1.G ...
- 研究生周报(第十周)
研究生周报(第十周) 学习目标 YOLO1简单理解 线性因子模型 F1.ROC.AUC 决策树和GBDT XGBoost简单理解 学习时间 7.10 ~ 7.16 学习产出 Python代码 gith ...
- 基于python的数据建模与分析案例_基于案例详解Python数据分析与机器学习
课程概述: 使用数据领域最主流语言Python及其分析与建模库作为核心武器.对于机器学习经典算法给出完整的原理推导并基于实例进行讲解,基于案例演示如何应用机器学习算法解决实际问题. 课程特色: 通俗易 ...
- 【机器学习基础】结合论文理解XGBoost推导过程
前言 XGBoost是一个可扩展的提升树模型,论文"XGBoost: A Scalable Tree Boosting System"发表在2016年的KDD会议上.文章包括了XG ...
最新文章
- 修复Eclipse在Mac OSX下启动时卡住问题
- Win64 驱动内核编程-31.枚举与删除映像回调
- C++ 面向对象(一)继承:继承、对象切割、菱形继承、虚继承、继承与组合
- r.java没有生成_R.java 常见问题(R.java文件没有生成 )
- api过滤器_了解播放过滤器API
- Linux保护文件实现,Linux完整性保护机制模块实现分析(1)
- 在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被废弃,目前找到解决方案就有两种...
- Atitit 软件 开发 与互联网发展趋势 与一些原则 潮流就是社区化 o2o 各种服务化 xaas ##--------信息化建设的理念 1.1.兼容性(不同版本与项目兼容性有利
- 将机器学习、人工智能、数据挖掘融合的Testin 2.0有哪些不同之处
- [摘录]第二部分 战略决策(1)
- 基于Java Servlet图片服务器
- “下一代智能硬件Web应用防火墙”——创宇盾X完成统信互认
- 社群怎么建立,怎么做好社群营销?
- 爪哇国新游记之五----继承与接口
- 安装scss后报错Module build failed: TypeError: loaderContext.getResolve is not a function解决方法
- Android 10 正式版或将 9月3日 发布!
- 元数据管理-技术元数据解决方案
- Android Studio Chipmunk 正式版下载地址
- 我来补充两句京东和企业软件
- 安卓模拟器 arm linux,让x86的android模拟器能模拟arm架构系统