当前位置: 华文问答 > 旅行

ai夏令营第二期打卡第二天

2023-09-11旅行

@Datawhale

1.lightgbm

GBDT是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT在工业界应用广泛,通常被用于点击率预测,搜索排序等任务。GBDT也是各种数据挖掘竞赛的致命武器,据统计Kaggle上的比赛有一半以上的冠军方案都是基于GBDT。 LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练,并且具有以下优点:

  • 更快的训练速度
  • 更低的内存消耗
  • 更好的准确率
  • 分布式支持,可快速处理海量数据
  • lightgbm参数

    Core Parameters 含义 用法
    objective 目标函数 回归:regression_l1,regression_l2,huber;二分类:binary;多分类:multi class;排序:lambdarank
    boosting 提升器的类型 gbdt:梯度提升决策树;rf:Random Forest;dart:Dropouts meet Multiple Additive Regression Trees;goss: Gradient-based One-Side Sampling
    data 训练数据 LightGBM使用这个数据进行训练模型
    valid 验证/测试数据 LightGBM将输出这些数据的度量
    num_boost_round boosting的迭代次数 默认100
    learning_rate 学习率 默认0.1
    num_leaves 树的叶子树 默认31
    tree_learner 树学习器的学习类型 serial:单台机器的tree_learner;feature:特征并行的tree_learn;data:数据并行的tree_learner;voting:投票并行的tree_learner
    num_threads LightGBM的线程数 为了更快的速度, 将此设置为真正的 CPU 内核数, 而不是线程的数量;对于并行学习, 不应该使用全部的 CPU 内核, 因为这会导致网络性能不佳
    device 树学习设备类型 默认cpu,可选cpu/gpu;使用 GPU 来获得更快的学习速度
    Model Parameters 含义 用途
    max_depth 树模型的最大深度 默认为-1,限制max_depth,可以在#data 小的情况下防止过拟合. 树仍然可以通过 leaf-wise 生长.
    min_data_in_leaf 一个叶子上数据的最小数量 默认为21,用来处理过拟合
    min_sum_hessian_in_leaf 一个叶子上的最小hessian和 默认为1e-3,用于处理过拟合
    feature_fraction 特征采样比例 默认为1.0,如果 feature_fraction 小于 1.0, LightGBM 将会在每次迭代中随机选择部分特征. 例如, 如果设置为 0.8, 将会在每棵树训练之前选择 80% 的特征,可以用来加速训练和处理过拟合
    bagging_fraction 数据采样比例 默认为1.0,类似于 feature_fraction, 但是它将在不进行重采样的情况下随机选择部分数据,可以用来加速训练和处理过拟合;Note: 为了启用 bagging, bagging_freq 应该设置为非零值
    bagging_freq bagging的频率 默认为0,0 意味着禁用 bagging. k 意味着每 k 次迭代执行bagging
    early_stopping_round 迭代提前终止 如果一个验证集的度量在 early_stopping_round 循环中没有提升, 将停止训练
    lambda_l1 L1正则系数 用于处理过拟合
    lambda_l2 L2正则系数 用于处理过拟合
    min_split_gain 执行切分的最小增益 默认为0

    2.XGBoost

    目前已有的GBDT工具基本都是基于预排序的方法(Pre-sorted)的决策树算法(如xgboost)。这种构建决策树的算法基本思想是:

    1. 对所有特征都按照特征的数值进行排序
    2. 再遍历分割点的时候用O ( d a t a ) O(data) O ( d a t**a )的代价找到一个特征上的最优分割点
    3. 找到一个特征的分割点后,将数据分裂成左右子节点

    预排序算法的优点是能精确地找到分割点 缺点:

  • 空间消耗大,算法需要保存数据的特征值,还保存了特征排序后的结果(例如排序后的索引,为了后续快速的计算分割点),这里需要消耗训练数据两倍的内存。
  • 时间上有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价很大。
  • cache优化不友好。预排序后,特征对梯度的访问时一种随机访问,并且不同的特征访问顺序不一样,无法对cache进行优化。同时,在每一层长树的时候,需要随机访问一个row_index到叶子索引的数组,并且不同特征访问顺序也不一样,也会造成较大的cache miss。
  • 3.lightgbm与XGBoost比较

    这部分主要总结下 LightGBM 相对于 XGBoost 的优点,从内存和速度两方面进行介绍。

    优点:

    (1)速度更快

  • LightGBM 采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间复杂度;
  • LightGBM 在训练过程中采用单边梯度算法过滤掉梯度小的样本,减少了大量的计算;
  • LightGBM 采用了基于 Leaf-wise 算法的增长策略构建树,减少了很多不必要的计算量;
  • LightGBM 采用优化后的特征并行、数据并行方法加速计算,当数据量非常大的时候还可以采用投票并行的策略;
  • LightGBM 对缓存也进行了优化,增加了缓存命中率;
  • (2)内存更小

  • XGBoost使用预排序后需要记录特征值及其对应样本的统计值的索引,而 LightGBM 使用了直方图算法将特征值转变为 bin 值,且不需要记录特征到样本的索引,将空间复杂度降低 ,极大的减少了内存消耗;
  • LightGBM 采用了直方图算法将存储特征值转变为存储 bin 值,降低了内存消耗;
  • LightGBM 在训练过程中采用互斥特征捆绑算法减少了特征数量,降低了内存消耗。
  • 缺点:

  • 可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合;
  • Boosting族是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行权重调整,所以随着迭代不断进行,误差会越来越小,模型的偏差(bias)会不断降低。由于LightGBM是基于偏差的算法,所以会对噪点较为敏感;
  • 在寻找最优解时,依据的是最优切分变量,没有将最优解是全部特征的综合这一理念考虑进去;