比快更快——微软LightGBM
LightGBM介绍
xgboost是一种优秀的boosting框架,但是在使用过程中,其训练耗时过长,内存占用比较大。微软在2016年推出了另外一种boosting框架——lightgbm,在不降低准确度的的前提下,速度提升了10倍左右,占用内存下降了3倍左右。详细的实验结果参见:LightGBM experiment.其令人印象深刻的特点有:
- 将连续的特征值转化为离散的直方图,利用直方图进行节点的分裂,牺牲了一定的准确度换取了训练速度和内存空间的优化。
- 相对于xgboost的level—wise的生长策略,lightgbm使用了leaf-wise树生长策略。由于level-wise在分裂时,部分增益小的树也得到了增长,虽然容易控制误差,但是分裂有时是不合理的,而lightgbm使用level-wise,只在增益大的树上分裂生长,甚至对Feature f如果分裂无收益,那么后续也将不会对f计算。体现在参数上,xgboost使用max_depth,而lightgbm使用num_leaves控制过拟合。
- 直接支持了类别输入模型,无需对类别型的特征进行one-hot编码,lightgbm在参数categorial_feature中来指定数据中的类别特征列即可。

LightGBM调参
几个重要的参数调节:
num_leaves
这是控制过拟合的参数。由于lightgbm使用的算法是leaf-wise,而xgboost使用是level-wise(depth-wise)。一个简单的换算方法是:num_leaves=2max_depth.但是由于lightgbm生成的决策树并非满树,所以利用此换算方法得到的num_leaves大大超过了实际合适的叶数量。如果在xgboost中设置max_depth为6的话,lightgbm设置为70~80是最合适的点,如果设置为127,lightgbm就已经过拟合了。min_data_in_leaf
设置在叶子中的最小值。如果结点的值<=min_data_in_leaf,那么该结点就不再分裂了。该值依赖于num_leaves和数据集。如果设置过大,将会导致欠拟合。对于一个较大的数据集,设置为100~1000即可。max_depth
这个参数和xgboost作用相同。在lightgbm中,用于设置树的最大深度,和num_leaves用于控制过拟合。加快训练速度
括号内为取值范围
- 使用bagging:
bagging_fraction:选择bagging的特征比例(0~1);bagging_freq:bagging的频率(1/2/3/...) feature_fraction:特征采样比例(0~1)- 使用较小的
max_bin 多线程训练
提升准确率
- 使用较大的
max_bin - 使用较小的
learning_rate和较大的num_iterations - 使用较大的
num_leaves(可能导致过拟合) 增大数据量
防止过拟合
- 使用较小的
max_bin - 使用较小的
num_leaves - 使用较大的
min_data_in_leaf和min_sum_hessian_in_leaf - 使用bagging,设置
bagging_fraction,bagging_freq - 使用数据采样,设置
feature_fraction - 设置正则化参数,
lambda_l1,lambda_l2,增大min_gain_to_split,可防止微小的增益分裂 设置
max_depth
比快更快——微软LightGBM的更多相关文章
- Microsoft Hyperlapse——让第一人称视频更快更流畅
Hyperlapse--让第一人称视频更快更流畅" title="Microsoft Hyperlapse--让第一人称视频更快更流畅"> 职业摄影师Nick Di ...
- 比XGBOOST更快--LightGBM介绍
xgboost的出现,让数据民工们告别了传统的机器学习算法们:RF.GBM.SVM.LASSO.........现在,微软推出了一个新的boosting框架,想要挑战xgboost的江湖地位.笔者尝试 ...
- 比Redis更快:Berkeley DB面面观
比Redis更快:Berkeley DB面面观 Redis很火,最近大家用的多.从两年前开始,Memcached转向Redis逐渐成为潮流:而Berkeley DB可能很多朋友还很陌生,首先,我们简单 ...
- Mockplus更快更简单的原型设计
更快更简单的原型设计 https://www.mockplus.cn/ Mockplus,更快更简单的原型设计工具.快速创建原型,一键拖拽创建交互,团队协作省事省力.微软.华为.东软.育碧.Oracl ...
- 与 Python 之父聊天:更快的 Python!
Python猫注: 在今年 5 月的 Python 语言峰会上,Guido van Rossum 作了一场<Making CPython Faster>的分享(材料在此),宣告他加入了激动 ...
- 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...
- 假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢
比如: select id, name from table1 where name = 'x' union all select id, name from table2 where name = ...
- 【译】更快的方式实现PHP数组去重
原文:Faster Alternative to PHP’s Array Unique Function 概述 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一 ...
- ubuntu 12.04 LTS 如何使用更快的更新源
装好ubuntu系统后的第一见事就是替换自带的更新源,原因是系统自带的源有些在中国访问不了,可以访问的速度又特别慢.幸好国内的一些公司和大学提供了速度不错的更新源.下面介绍如何使用更快的更新源 方法/ ...
随机推荐
- Qt单元测试工具 QTestlib(QVERIFY, QFETCH, QCOMPARE等)
优点: QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能. 特性 详细描述 轻量级 QTestlib 只包含 6000行代码和 60个导出符号. 自包含 对于非GUI测 ...
- 【物理】概念的理解 —— Phase(相位)
Phase is the position of a point in time (an instant) on a waveform cycle. 相位指的是波形周期中点在某一时刻的位置.Phase ...
- Java SE学问Random
这篇文章是在网络上的文章内容摘要学习以及自己的小练习,感谢您的无私分享. 昨天在项目中想使用几个随机数.结果使用Random时竟然出现随机数同样的情况.忍不住查了些资料. 现将代码总结例如以下: pa ...
- Real-time storage area network
A cluster of computing systems is provided with guaranteed real-time access to data storage in a sto ...
- JavaScript严谨模式(Strict Mode)提升开发效率和质量
http://flandycheng.blog.51cto.com/855176/982719 http://my.oschina.net/Jsiwa/blog/272761
- 【Python注意事项】如何理解python中间generator functions和yield表情
本篇记录自己的笔记Python的generator functions和yield理解表达式. 1. Generator Functions Python支持的generator functions语 ...
- 使用nfs映射远程服务器磁盘目录
参考:http://www.centoscn.com/CentosSecurity/SoftSecurity/2015/0408/5118.html http://www.cnblo ...
- 使用XCA(X Certificate and key management)可视化项目经理SSL 凭证(4)--凭借自身的凭证管理中心的定义(Certificate Authority)签名证书申请
随着XCA(X Certificate and key management)可视化项目经理SSL 证书系列文章(2)和(3)中.我们学习了怎样用XCA(X Certificate and key m ...
- [Elasticsearch] 分布式搜索
分布式搜索 本文翻译自Elasticsearch官方指南的Distributed Search Execution一章. 在继续之前,我们将绕一段路来谈谈在分布式环境中,搜索是怎样运行的.和在分布式文 ...
- arcserver开发小结(二)
一.关于服务器上下文 1,服务器上下文(ServerContext)本质上是一个GIS服务器上的进程,它是服务器端编程的起点. 2,只有本地资源才能得到服务器上下文,通常得到服务器上下文的主线是: M ...