目录

  1. LightGBM简介
  2. GOSS算法介绍
  3. EFB算法介绍

    3.1 捆绑簇生成算法
    3.2 互斥特征合并算法

  4. LightGBM参数说明
  5. 补充:直方图算法介绍
  6. 参考文献及链接

1. LightGBM简介

LightGBM是一个基于决策树学习算法的快速的、支持分布式的、高性能的梯度提升框架。其主要具有以下优点:

  1. 速度快
  • 基于直方图算法,直方图做差,加速2倍
  • 直接支持类别特征
  • bagging
  • feature sub-sampling
  1. 带深度限制的leaf-wise的树的生长方式
  2. 占用内存小
  3. 支持分布式
  4. 更好的准确率
  5. 支持GPU并行学习
  6. 能够处理大规模数据
  • 支持多种并行学习方式:数据并行、特征并行和投票并行
  1. 支持DART(drop out),避免过拟合

2. GOSS算法介绍

1)算法思想

梯度大的样本贡献更大的信息增益,因此在采样时,为了保证信息增益的精度,保留大梯度的样本,而对小梯度样本进行随机采样

2)输入

  • 训练集I
  • 大梯度样本采样率 a;小梯度样本采样率 b;权重更新比率$fact=\frac{1-a}{b}$
  • 损失函数 loss
  • 弱学习器 L
  • 学习迭代轮数 d
  • 大梯度样本数topN=a*len(I); 小梯度样本数randN=b*len(I)
  • 样本的权重向量 w

3)输出

  • 训练好的集成模型 models

4)算法过程及注释说明
LightGBM学习笔记

3. EFB算法介绍

3.1 捆绑簇生成算法

1) 算法思想(类比聚类思想)

冲突小的特征在同一捆绑簇中(同一条数据中很少出现两个特征值均为非零值即为冲突小
冲突大的特征在不同的捆绑簇中

2) 输入

  • 特征集合 F
  • 最大冲突数阈值 K
  • 图对象 G(节点表示特征,边表示冲突程度)
  • 按degree排序的节点集合 $searchOrder \leftarrow G.sortByDegree()$
  • 特征冲突数集合$bundlesConflict\leftarrow${}

3) 输出

  • 捆绑簇集合 bundles(每个元素为一个捆绑簇)

4) 算法过程及注释
LightGBM学习笔记

3.2 互斥特征合并算法(基于直方图算法)

1) 算法思想

基于直方图算法,将不同特征的特征值离散化后,通过为特征添加一个偏置offset来区别开不同特征的特征值,从而将这些不同特征合并为一个合并特征。

2) 输入

  • 训练集数据数 numData
  • 一个捆绑簇的特征集合 F
  • 一个捆绑簇中bins的取值范围 binRanges
  • 一个合并特征的总bins数 totalBin

3) 输出

  • 合并特征的特征图,具体包括 newBin和binRanges

4) 算法过程及注释
LightGBM学习笔记

4. LightGBM重要参数说明

4.1 LightGBM的参数简介

LightGBM的参数主要包括以下几类:

  • Core Parameters
  • Learning Control Parameters
  • IO Parameters
  • Objective Parameters
  • Metric Parameters
  • Network Parameters
  • GPU Parameters

4.2 Core Parameters参数

Index Core Parameters 默认值 含义 用法
1 task default = train 数据的用途 可以用作train/predict/refit
2 objective default = regression 学习的任务类型 回归:regression/regression_l2/regression_l1;二分类:binary;多分类:multiclass and so on
3 boosting default = gbdt 选择要用的集成学习算法 gbdt/gbrt/ rf/ random_forest,/dart/ goss
4 data default = “” 指定训练集的文件路径
5 valid default = “” 指定验证集的文件路径,支持多个验证集
6 num_iterations default = 100 训练的迭代次数 >=0;通常大于100
7 learning_rate default = 0.1 收缩因子,类似于学习率,为每一棵树都添加一个收缩因子,从而减少每棵树的影响 通常为0.1,0.01,0.003,0.001
8 num_leaves default = 31 每棵树的最大叶子数 防止过拟合
9 tree_learner default = serial 控制训练时的并行方式 serial:不并行;feature:特征并行;data:数据并行;voting:投票并行
10 device_type default = cpu 指定训练的硬件设备 cpu/gpu
11 seed default = None 设置随机种子 int型

4.3 Learning Control Parameters

Index Learning Control Parameters 默认值 含义 用法 注意事项
1 max_depth default = -1 控制单棵树的最大深度 int型,用来避免过拟合;小于0表示对树的深度没有限制
2 min_data_in_leaf default = 20 控制每个叶子节点的最小样本数 int型,>=0,用来避免过拟合
3 min_sum_hessian_in_leaf default = 1e-3 控制每个叶子节点的最小二阶梯度和 int型,>=0,用来避免过拟合
4 bagging_fraction default = 1.0 控制抽样的样本数 double型,[0,1],用来避免过拟合,同时能够加快训练 若想进行bagging操作,bagging_freq应该取非零值
5 bagging_freq default = 0 控制进行bagging的频率 int型,取值为0表示不进行bagging,取值为k表示每k轮迭代进行一次bagging 若想进行bagging操作,bagging_fraction取值应该小于等于1
6 bagging_seed default = 3 控制bagging的随机种子 int型
7 feature_fraction default = 1.0 控制每一轮迭代训练随机选择的特征数 double型,[0,1],用来避免过拟合,同时能够加快训练
8 feature_fraction_seed default = 2 控制随机选择特征的随机种子 int型
9 early_stopping_round default = 0 控制早停的最近轮数,如果验证集上的某一评价指标在最近的early_stopping_round轮内没有提升,则停止训练 int型,<=0表示没有早停控制
10 max_delta_step default = 0.0 控制输出的最大叶子数,其最大叶子数为learning_rate * max_delta_step double型,<= 0表示没有限制
11 lambda_l1 default = 0.0 L-1范数的正则化系数 double型,用来控制拟合程度,同时有降维的效果
12 lambda_l2 default = 0.0 L-2范数的正则化系数 double型,用来控制拟合程度
13 min_gain_to_split default = 0.0 控制节叶点是否分割的最小增益 double型
14 drop_rate default = 0.1 控制dropout时,前面的树模型被用到的概率 double型,[0.0,1.0],用来降低拟合程度 只在boosting = dart需要设置
15 max_drop default = 50 控制在一轮boosting 迭代中,被忽略的树模型的最大值 int型,<=0 表示没有限制 只在boosting = dart需要设置
16 skip_drop default = 0.5 控制在一轮boosting 迭代中,不进行dropout的概率 double型,[0.0,1.0], 只在boosting = dart需要设置
17 xgboost_dart_mode default = false 控制是否使用xgboost中dart的模式 bool型 只在boosting = dart需要设置
18 drop_seed default = 4 控制dropout的随机种子 int型 只在boosting = dart需要设置
19 top_rate default = 0.2 控制大梯度样本的保留比例 double型, 只在boosting = goss时需要设置
20 other_rate default = 0.1 控制小梯度样本的保留比例 double型 只在boosting = goss时需要设置
21 min_data_per_group default = 100 设置每一个类别组的最小样本数 int型,>0 用在类别特征
22 max_cat_threshold default = 32 设置类别特征的最大阈值点 int型,>0 用在类别特征
23 cat_l2 default = 10.0 在类别分割时设置L-2正则化 double 型 用在类别特征
24 cat_smooth default = 10.0 减小类别特征中的噪声的影响,特别是数据量小的时候 double型 用在类别特征
25 top_k default = 20 设置该值越大,投票并行时准确率会越高,不过训练时间越长 int型 用在投票并行中

4.4 IO Parameters

Index IO Parameters 默认值 含义 用法 注意事项
1 max_bin default = 255 设置特征值被离散化了的最大bins数 int型,>1,较小的值可能会降低训练精度,但却可以加快训练
2 min_data_in_bin default = 3 设置每个bin的最小数据数 int型,>0,设置该参数用来避免一个bin一条数据的情况,避免过拟合
3 enable_bundle default = true 设置是否采用互斥特征捆绑算法(EFB) bool,设置为false在训练稀疏数据集时可能会降低训练速度
4 max_conflict_rate default = 0.0 设置合并特征的最大冲突率 double型,[0.0,1.0],取值为0会得到更好的训练精度,取值越大,训练速度越快
5 is_enable_sparse default = true 设置是否使用稀疏优化 bool型
6 use_missing default = true 设置是否对缺失值进行特殊处理 bool型
7 label_column default = " 指定标记列 int or string型
8 categorical_feature default = " 指定类别特征 multi-int or string型

4.5 Objective Parameters

Index Objective Parameters 默认值 含义 用法 注意事项
1 num_class default = 1 设置多分类任务的类别数 int型,>0, 仅在多分类任务中需要设置
2 is_unbalance default = false 设置训练集数据是否平衡 bool型 应用在二分类中,该参数不能和scale_pos_weight参数同时设置,只设置一个
3 scale_pos_weight default = 1.0 设置正类别的权重 double 应用在二分类中,该参数不能和is_unbalance参数同时设置,只设置一个

4.6 Metric Parameters

  • metric:default="",设置验证集的评价指标,LightGBM支持采用多个指标,用逗号分隔。可能的取值包括:
  1. “”:表示性能评估指标会根据不同的任务来进行调整
  2. “None”:表示没有性能评估指标
  3. l1:表示采用绝对值损失
  4. l2:表示采用平方损失
  5. l2_root:表示采用平方根损失
  6. huber:表示采用huber损失
  7. auc:表示采用auc评价指标
  8. binary_logloss:表示采用二分类的对数损失
  9. binary_error:表示采用错误率指标
  10. multi_logloss:表示采用多分类任务的对数损失
  11. multi_error:表示采用多分类任务的错误率指标
    其他指标还包括: quantile、mape、fair、gamma、gamma_deviance、tweedie、ndcg、map、xentropy、xentlambda、kldiv
  • metric_freq: default = 1,设置指标输出的频率

5. 补充:直方图算法构建决策树

1)输入

  • 训练集$X$,
  • 当前树模型$T_{C-1}(X)$
  • 样本$x_i$的损失函数$L(y_i,T_{C-2}(x_i))$对前一轮模型的$T_{C-2}(x_i)$的一阶梯度G
  • 样本$x_i$的损失函数$L(y_i,T_{C-2}(x_i))$对前一轮模型的$T_{C-2}(x_i)$的二阶梯度H

2)输出

  • 信息增益最大的分裂节点$p_m$、分裂特征$f_m$和分裂特征的bin的值(即分裂值)$v_m$
  1. 算法过程及注释说明
    LightGBM学习笔记

4)基于直方图算法构建决策树的优缺点

  • 优点

占用内存小,直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值一般用8位整型存储就可以,内存消耗可以降低为原来的1/8

计算速度快,
预排序算法每遍历一个特征值就需要计算一轮分裂的增益,而直方图算法只需要计算#bins次,时间复杂度从O(#data*_#features)优化到O(#bins*#features)

  • 缺点

预处理能够忽略零值特征,减少训练代价;而直方图不能对稀疏特征进行优化,只是计算累加值(累加梯度和样本数)。但是,LightGBM对稀疏特征进行了优化:只用非零特征构建直方图

6. 参考文献

  1. LightGBM调参
  2. Guolin Ke, Qi Meng, Thomas Finley, Taifeng Wang, Wei Chen, Weidong Ma, Qiwei Ye, Tie-Yan Liu. “LightGBM: A Highly Efficient Gradient Boosting Decision Tree.” Advances in Neural Information Processing Systems 30 (NIPS 2017), pp. 3149-3157.
  3. 直方图优化算法
  4. 玩转LightGBM视频

相关文章: