树模型(七):LightGBM
1 XGB vs LGB
2 直方图算法
2.1 缘起
XGBoost的Exact greedy算法流程
- 对每个特征都按照特征值进行排序
- 在每个排好序的特征都寻找最优切分点
- 用最优切分点进行切分
这个算法比较精确,但是缺点明显:
- 空间消耗大。需要保存数据的特征值。XGBoost采用Block结构,存储指向样本的索引,需要消耗两倍的内存。
- 时间开销大。在寻找最优切分点时,要对每个特征都进行排序,还要对每个特征的每个值都进行了遍历,并计算增益。
- 对Cache不友好。使用Block块预排序后,特征对梯度的访问是按照索引来获取的,是一种随机访问,而不同特征访问顺序也不一样,容易照成命中率低的问题。同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的Cache miss。
使用直方图算法进行划分点的查找可以很好的克服这些缺点
2.2 算法描述
直方图算法(Histogram algorithm)的做法是把连续的浮点特征值离散化为k个整数(其实又是分桶的思想,而这些桶称为bin)比如[0,0.1)→0, [0.1,0.3)→1。
关键点(个人理解)
- pre-bin,先分箱后分裂
- LightGBM采用的直方图方法与XGBoost的”加权分位图”类似,直方图的边界即分裂值
同时,将特征根据其所在的bin进行梯度累加。这样,遍历一次数据后,直方图累积了需要的梯度信息,然后可以直接根据直方图,寻找最优的切分点。
流程描述(似乎loss计算那块有些问题,不过不影响理解直方图)
结合伪代码一起看
仔细看上面的伪代码,相信你有几个问题:
- 如何将特征映射到bin呢?即如何分桶?
- 如何构建直方图?直方图算法累加的g是什么?
- 构建完直方图如何找最优特征,有用到二阶信息么?
2.2.1 分桶(bin)策略
对于数值型特征
- 如果特征取值数比max_bin数量少,直接取distinct_values的中点放置
- 特征取值比max_bin来得大,说明几个特征取值要共用一个bin
- 计算mean size for one bin
- 标记一个特征取值数超过mean,因为这些特征需要单独一个bin
- 剩下的特征取值中平均每个bin的取值个数
对于类别特征
- 首先对特征取值按出现的次数排序(大到小)
- 取前min(max_bin, distinct_values_int.size())中的每个特征做第3步(这样可能忽略一些出现次数很少的特征取值)
- 然后用
树模型(七):LightGBM相关推荐
- [机器学习] 树模型(xgboost,lightgbm)特征重要性原理总结
在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征 ...
- 树模型:决策树、随机森林(RF)、AdaBoost、GBDT、XGBoost、LightGBM和CatBoost算法区别及联系
一.算法提出时间 1966年,决策树算法起源于E.B.Hunt等人提出. 1979年,Quinlan(罗斯.昆兰)提出了ID3算法,掀起了决策树研究的高潮,让决策树成为机器学习主流算法. 1993年, ...
- 【机器学习】树模型遇上类别型特征(Python)
在数据挖掘项目的数据中,数据类型可以分为两种:有序的连续数值 和 无序的类别型特征. 对于xgboost.GBDT等boosting树模型,基学习通常是cart回归树,而cart树的输入通常只支持连续 ...
- 树模型对类别变量的 7 种处理方法(Python代码)
在数据挖掘项目的数据中,数据类型可以分为两种:有序的连续数值 和 无序的类别型特征. 对于xgboost.GBDT等boosting树模型,基学习通常是cart回归树,而cart树的输入通常只支持连续 ...
- 【组队学习】【30期】6. 树模型与集成学习
树模型与集成学习 航路开辟者:耿远昊 领航员:姜萌 航海士:耿远昊 基本信息 开源内容:https://github.com/datawhalechina/machine-learning-toy-c ...
- 树模型集成学习(Tree Embedding)
树模型集成学习 集成学习主要有两个思想,分别是bagging和boosting.树模型的集成模型都是使用树作为基模型,最常用的cart树,常见的集成模型有RandomForest.GBDT.Xgboo ...
- 【数据竞赛】Kaggle知识点:树模型特征Embedding
在对数据进行编码的过程中,经常会遇到一些非结构化的字段(如列表.文本),或者高维稀疏的字段. 在使用树模型的过程中,上述字段对树模型很不友好,会增加树模型的训练时间,一般情况需要通过人工特征提取,然后 ...
- 【数据竞赛】Kaggle GM秘技:树模型初始化技巧
作者: 尘沙樱落 树模型初始化技巧 大家都知道神经网络训练的提升分数的技巧之一就是: 依据验证集合的效果,来调整learning rate的大小,从而获得更好的效果; 但我们在训练树模型的时候却往往 ...
- python+Treelite:Sklearn树模型训练迁移到c、java部署
受本篇启发: Treelite:树模型部署加速工具(支持XGBoost.LightGBM和Sklearn) Coggle,公众号:Coggle数据科学Treelite:树模型部署加速工具(支持XGBo ...
最新文章
- openstack学习笔记三 创建第一个实例
- 删除git仓库中的文件(从所有历史中清除,不留痕迹)【不可恢复】
- .NET Worker Service 作为 Windows 服务运行及优雅退出改进
- 583. 两个字符串的删除操作
- 排序算法之----快速排序(快速上手快速排序)
- Java是有法_Java基础语法
- EBay架构案例分析
- 扑克牌大小的充电宝,你有吗?
- jquery验证后ajax提交,返回消息怎样统一显示的问题
- WebStorm破解---最新 2019.4.24
- 照片视频拼接软件哪个好?一半图片一半视频的快速上手教程,朋友圈超吸赞效果
- 【发布】Arknights(明日方舟)拆包+桌面精灵
- 蚁群算法原理及Matlab实现
- PlantUML——程序员画架构图都靠它
- linux嵌入式工控机编程,Linux嵌入式工控机的特点
- 印度网民集体删除中国APP,网友评论亮了
- 设计模式笔记——观察者模式(村里二蛋偷偷取了个媳妇,村长知道了,然后全村都知道了...)
- win10怎么显示文件后缀_win10系统中使用win7照片查看器(无需下载安装)
- 爬取碧蓝航线wiki
- 史上最全Nginx配置优化
热门文章
- centos ifconfig不显示IP地址解决办法之一(亲测有效)
- 大数据告诉你:2018年该学习什么技术
- docker下启动phpMyAdmin
- 徐志摩《再别康桥》赏析
- 2018秋c语言程序设计考试答案,2018年自学考试《C语言程序设计》模拟试题【四篇】...
- 思岚科技通用机器人底盘ZEUS将亮相2019 CES
- 关于初始化数据库时报错及解决办法(常见故障整理)
- FT232RL制作的USB转uart ttl,rs232,rs485.兼容3.3V及5V接磁珠
- 【机器学习】当贝叶斯、奥卡姆和香农一起来定义机器学习时
- 服务器为什么找不到抢先服,王者荣耀:抢先服新版本上线,新增多种内容,唯独没有李信消息!...
- [机器学习] 树模型(xgboost,lightgbm)特征重要性原理总结