@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)。这种构建决策树的算法基本思想是:
- 对所有特征都按照特征的数值进行排序
- 再遍历分割点的时候用O ( d a t a ) O(data) O ( d a t**a )的代价找到一个特征上的最优分割点
- 找到一个特征的分割点后,将数据分裂成左右子节点
预排序算法的优点是能精确地找到分割点 缺点:
3.lightgbm与XGBoost比较
这部分主要总结下 LightGBM 相对于 XGBoost 的优点,从内存和速度两方面进行介绍。
优点:
(1)速度更快
(2)内存更小
缺点: