XGBoost与LightGBM对比分析(转)
分析 对比 xgboost LightGBM
2023-09-11 14:21:07 时间
尊重原创
来源: https://blog.csdn.net/a790209714/article/details/78086867
XGBoost的四大改进:
①改进残差函数
不用Gini作为残差,用二阶泰勒展开+树的复杂度(正则项)
带来如下好处:
1.可以控制树的复杂度
2.带有关于梯度的更多信息,获得了二阶导数
3.可以用线性分类器
②采用预排序
因为每一次迭代中,都要生成一个决策树,而这个决策树是残差的决策树,所以传统的不能并行
但是陈天奇注意到,每次建立决策树,在分裂节点的时候,比如选中A特征,就要对A进行排序,再计算残差,这个花很多时间
于是陈天奇想到,每一次残差计算好之后,全部维度预先排序,并且此排序是可以并行的,并行排序好后,对每一个维度,计算一次最佳分裂点,求出对应的残差增益
于是只要不断选择最好的残差作为分裂点就可以。
也就是说,虽然森林的建立是串行的没有变,但是每一颗树枝的建立就变成是并行的了,带来的好处:
1.分裂点的计算可并行了,不需要等到一个特征的算完再下一个了
2.每层可以并行:
当分裂点的计算可以并行,对每一层,比如分裂了左儿子和右儿子,那么这两个儿子上分裂哪个特征及其增益也计算好了
同时:
③Shrinkage(缩减)
相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率)
④列抽样
XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算。
LightGBM,3点优化:
①采用基于Histogram的决策树算法
把每个特征做转化成int,并用这个int作为直方图的index,如果某一个特征值的值为ki,就在直方图横轴=ki的地方,增加1的高度
最后根据直方图进行分裂
带来的好处:
1.不用计算分裂增益
2.只消耗很少的内存,解决xgboost为了排序需要把特征都加进内存需要巨大的空间
②带深度限制的Leaf-wise的叶子生长策略。
直接找到分裂增益最大的叶子,按层优先不断分裂
1.提高精度降低误差
2.减少Level-wise非常非常的无用叶子的分裂
3.因为特征的访问顺序相同,就可以提高cache优化,意味着CPU可以为下一次会采用的特征预先做预读取
③用histogram 做差加速
一个容易观察到的现象:一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到
也就是说下一次分裂的时候不需要计算分裂增益,直接计算一个大儿子,另一个小儿子的直方图就是父亲减去大儿子的差
1.进一步优化
相关文章
- ActiveX控件获取不到对象属性或者方法的原因分析
- SQL SERVER 2000 迁移后SQL SERVER代理服务启动错误分析
- 横向对比分析Python解析XML的四种方式
- shiro源码分析(三)授权、认证、缓存的接口设计
- []H5、React Native、Native应用对比分析
- 科研之路(2):分析学习别人的科研历程
- MFC Windows 程序设计[160]之频谱分析(附源码)
- 【BSP视频教程】STM32H7视频教程第6期:MDK专题进阶,Cortex-M内核芯片Hardfault硬件异常调试分析定位(2022-02-17)
- 关于 SAP CRM 订单抬头级别的 Text 无法编辑的问题分析
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
- AIGC:利用人工智能生成技术之依次生成文本类、图片类内容并对比多个前沿模型(GPT-3.5、GPT-4、Claude)的输出结果并分析性能案例集合
- DL之Transformer:Transformer的简介(优缺点/架构详解,基于Transformer的系列架构对比分析)、使用方法(NLP领域/CV领域)、案例应用之详细攻略
- DL之self-attention:self-attention自注意力机制的简介(背景、特点、改进对比、传统对比、关系、应用,适合长距离捕获分析)、计算过程(八大步骤)、案例应用之详细攻略
- 【Java多线程】内存模型JMM—主内存与工作内存分析
- 【Linux 内核 内存管理】内存映射相关数据结构 ⑤ ( vm_area_struct 结构体成员分析 | vm_pgoff 成员 | vm_file 成员 | vm_private_data )
- 【Android 逆向】Android 系统文件分析 ( cmdline 系统启动参数文件 | crypto 密码算法信息文件 | devices 设备信息文件 )
- Merge join、Hash join、Nested loop join对比分析
- RIPS PHP源码静态分析(转)
- sql 精读(一)标准 SQL 中的分析函数概念
- 电路方案分析(七)电源入口欠压保护(阈值设定电路)
- 【2-1链表】链表数据结构分析总结
- m基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,信道对译码性能的影响,对比卷积码,turbo码
- m基于matlab的里德-穆勒码Reed Muller(RM)编码译码误码率仿真分析
- IoT -- (六) MQTT和CoAP对比分析