LightGBM介绍
1、LightGBM简介
LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法。具有以下优势:
a)更快的训练效率
b)低内存使用
c)更高的正确率
d)支持并行化学习
e)可以处理大规模数据
2、XGBoost的不足
a)每轮迭代时,都需要遍历整个训练数据多次,如果把整个训练数据装进内存,则会限制训练数据的大小,如果不装进内存,反复读写训练数据又会消耗非常大的时间。
b)预排序方法的时间和空间的消耗都很大.
3、LightGBM原理
1)直方图算法:把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。在XGBoost中需要遍历所有离散化的值,而在这里只要通过遍历k个直方图的值
2)LightGBM的直方图做差加速:一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到,且直方图做差仅遍历直方图的k个桶
3)带深度限制的leaf-wise的叶子生长策略
4)直接支持类别特征(即不需要组偶one-hot编码)
5)支持高效并行:
a)特征并行:在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优分割点
b)数据并行:让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点
4、LightGBM参数调优
max_depth | 树的最大深度 | 过拟合时,可以首先考虑降低参数 |
min_data_in_leaf | 叶子最小记录数 | 默认20,过拟合时用 |
feature_fraction | 例如为0.8时,意味着在每次迭代中随机选择80%的参数来建树 | boosting为random forest时用 |
bagging_fraction | 每次迭代用的数据比例 | 用于加快训练速度和减少过拟合 |
early_stopping_round | 如果一次验证数据的一个度量在最近的early_stopping_round回合中没有提高,模型将停止训练 | 加速分析,减少过多迭代 |
Task | 数据的用途 | 选择train或者predict |
application | 模型的用途 |
回归:regression 二分类:binary 多分类:multiclass |
boosting | 要用的算法 |
gbdt rf:random forest dart:Dropouts meet Multiple Additive Regression Trees goss:Gradient-based One-Side Sampling |
num_boost_round | 迭代次数 | 通常100+ |
learning_rate | 如果一次验证数据的要给度量,在最近的early_stopping_round回合中没有提高,模型将停止训练 | 通常为0.1 |
num_leaves | 默认31 | |
device | cpu或gpu | |
metric |
mae:mean absolute error mse:mean squared error binary_logloss:loss for binary classification multi_logloss:loss for multi classification |
4、Boosting的算法流程