前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【转】XGBoost和LGB参数对比

【转】XGBoost和LGB参数对比

作者头像
致Great
发布2020-12-21 11:14:43
1.3K0
发布2020-12-21 11:14:43
举报
文章被收录于专栏:程序生活

原文:https://blog.csdn.net/zwqjoy/article/details/90637423

XGBoost 参数介绍

XGBoost的参数一共分为三类(完整参数请戳官方文档

  1. 通用参数:宏观函数控制。
  2. Booster参数:控制每一步的booster(tree/regression)。booster参数一般可以调控模型的效果和计算代价。我们所说的调参,很这是大程度上都是在调整booster参数。
  3. 学习目标参数:控制训练目标的表现。我们对于问题的划分主要体现在学习目标参数上。比如我们要做分类还是回归,做二分类还是多分类,这都是目标参数所提供的。

1.通用参数

  1. booster:我们有两种参数选择,gbtreegblinear。gbtree是采用树的结构来运行数据,而gblinear是基于线性模型。
  2. silent:静默模式,为1时模型运行不输出。
  3. nthread: 使用线程数,一般我们设置成-1,使用所有线程。如果有需要,我们设置成多少就是用多少线程。

2.Booster参数

  1. n_estimator: 也作num_boosting_rounds 这是生成的最大树的数目,也是最大的迭代次数。
  2. learning_rate: 有时也叫作eta,系统默认值为0.3,。 每一步迭代的步长,很重要。太大了运行准确率不高,太小了运行速度慢。我们一般使用比默认值小一点,0.1左右就很好。
  3. gamma:系统默认为0,我们也常用0。 在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。因为gamma值越大的时候,损失函数下降更多才可以分裂节点。所以树生成的时候更不容易分裂节点。范围: [0,∞]
  4. subsample:系统默认为1。 这个参数控制对于每棵树,随机采样的比例。减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。 典型值:0.5-10.5代表平均采样,防止过拟合. 范围: (0,1]注意不可取0
  5. colsample_bytree:系统默认值为1。我们一般设置成0.8左右。 用来控制每棵随机采样的列数的占比(每一列是一个特征)。 典型值:0.5-1范围: (0,1]
  6. colsample_bylevel:默认为1,我们也设置为1. 这个就相比于前一个更加细致了,它指的是每棵树每次节点分裂的时候列采样的比例
  7. max_depth: 系统默认值为6 我们常用3-10之间的数字。这个值为树的最大深度。这个值是用来控制过拟合的。max_depth越大,模型学习的更加具体。设置为0代表没有限制,范围: [0,∞]
  8. max_delta_step:默认0,我们常用0. 这个参数限制了每棵树权重改变的最大步长,如果这个参数的值为0,则意味着没有约束。如果他被赋予了某一个正值,则是这个算法更加保守。通常,这个参数我们不需要设置,但是当个类别的样本极不平衡的时候,这个参数对逻辑回归优化器是很有帮助的。
  9. lambda:也称reg_lambda,默认值为0。 权重的L2正则化项。(和Ridge regression类似)。这个参数是用来控制XGBoost的正则化部分的。这个参数在减少过拟合上很有帮助。
  10. alpha:也称reg_alpha默认为0, 权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。
  11. scale_pos_weight:默认为1 在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。通常可以将其设置为负样本的数目与正样本数目的比值。

3.学习目标参数

objective [缺省值=reg:linear]

  • reg:linear– 线性回归
  • reg:logistic – 逻辑回归
  • binary:logistic – 二分类逻辑回归,输出为概率
  • binary:logitraw – 二分类逻辑回归,输出的结果为wTx
  • count:poisson – 计数问题的poisson回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7 (used to safeguard optimization)
  • multi:softmax – 设置 XGBoost 使用softmax目标函数做多分类,需要设置参数num_class(类别个数)
  • multi:softprob – 如同softmax,但是输出结果为ndata*nclass的向量,其中的值是每个数据分为每个类的概率。

eval_metric [缺省值=通过目标函数选择]

  • rmse: 均方根误差
  • mae: 平均绝对值误差
  • logloss: negative log-likelihood
  • error: 二分类错误率。其值通过错误分类数目与全部分类数目比值得到。对于预测,预测值大于0.5被认为是正类,其它归为负类。 error@t: 不同的划分阈值可以通过 ‘t’进行设置
  • merror: 多分类错误率,计算公式为(wrong cases)/(all cases)
  • mlogloss: 多分类log损失
  • auc: 曲线下的面积
  • ndcg: Normalized Discounted Cumulative Gain
  • map: 平均正确率

一般来说,我们都会使用xgboost.train(params, dtrain)函数来训练我们的模型。这里的params指的是booster参数。

LightGBM 参数介绍

XGBoost 一共有三类参数通用参数,学习目标参数,Booster参数,那么对于LightGBM,我们有核心参数,学习控制参数,IO参数,目标参数,度量参数,网络参数,GPU参数,模型参数,这里我常修改的便是核心参数,学习控制参数,度量参数等。更详细的请看LightGBM中文文档

1.核心参数

  1. boosting:也称boostboosting_type.默认是gbdt。 LGB里面的boosting参数要比xgb多不少,我们有传统的gbdt,也有rfdartdoss,最后两种不太深入理解,但是试过,还是gbdt的效果比较经典稳定
  2. num_thread:也称作num_thread,nthread.指定线程的个数。 这里官方文档提到,数字设置成cpu内核数比线程数训练效更快(考虑到现在cpu大多超线程)。并行学习不应该设置成全部线程,这反而使得训练速度不佳。
  3. application:默认为regression。,也称objectiveapp这里指的是任务目标
    • regression
      • regression_l2, L2 loss, alias=regression, mean_squared_error, mse
      • regression_l1, L1 loss, alias=mean_absolute_error, mae
      • huber, Huber loss
      • fair, Fair loss
      • poisson, Poisson regression
      • quantile, Quantile regression
      • quantile_l2, 类似于 quantile, 但是使用了 L2 loss
    • binary, binary log loss classification application
    • multi-class classification
      • multiclass, softmax 目标函数, 应该设置好 num_class
      • multiclassova, One-vs-All 二分类目标函数, 应该设置好 num_class
    • cross-entropy application
      • xentropy, 目标函数为 cross-entropy (同时有可选择的线性权重), alias=cross_entropy
      • xentlambda, 替代参数化的 cross-entropy, alias=cross_entropy_lambda
      • 标签是 [0, 1] 间隔内的任意值
    • lambdarank, lambdarank application
      • 在 lambdarank 任务中标签应该为 int type, 数值越大代表相关性越高 (e.g. 0:bad, 1:fair, 2:good, 3:perfect)
      • label_gain 可以被用来设置 int 标签的增益 (权重)
  4. valid:验证集选用,也称testvalid_data, test_data.支持多验证集,以,分割
  5. learning_rate:也称shrinkage_rate,梯度下降的步长。默认设置成0.1,我们一般设置成0.05-0.2之间
  6. num_leaves:也称num_leaf,新版lgb将这个默认值改成31,这代表的是一棵树上的叶子数
  7. num_iterations:也称num_iteration, num_tree, num_trees, num_round, num_rounds,num_boost_round。迭代次数
  8. device:default=cpu, options=cpu, gpu
    • 为树学习选择设备, 你可以使用 GPU 来获得更快的学习速度
    • Note: 建议使用较小的 max_bin (e.g. 63) 来获得更快的速度
    • Note: 为了加快学习速度, GPU 默认使用32位浮点数来求和. 你可以设置 gpu_use_dp=true 来启用64位浮点数, 但是它会使训练速度降低
    • Note: 请参考 安装指南 来构建 GPU 版本

2.学习控制参数

  1. max_depth
  • default=-1, type=int限制树模型的最大深度. 这可以在 #data 小的情况下防止过拟合. 树仍然可以通过 leaf-wise 生长.
  • < 0 意味着没有限制.
  1. feature_fraction:default=1.0, type=double, 0.0 < feature_fraction < 1.0, 也称sub_feature, colsample_bytree
    • 如果 feature_fraction 小于 1.0, LightGBM 将会在每次迭代中随机选择部分特征. 例如, 如果设置为 0.8, 将会在每棵树训练之前选择 80% 的特征
    • 可以用来加速训练
    • 可以用来处理过拟合
  2. bagging_fraction:default=1.0, type=double, 0.0 < bagging_fraction < 1.0, 也称sub_row, subsample
    • 类似于 feature_fraction, 但是它将在不进行重采样的情况下随机选择部分数据
    • 可以用来加速训练
    • 可以用来处理过拟合
    • Note: 为了启用 bagging, bagging_freq 应该设置为非零值
  3. bagging_freq: default=0, type=int, 也称subsample_freq
    • bagging 的频率, 0 意味着禁用 bagging. k 意味着每 k 次迭代执行bagging
    • Note: 为了启用 bagging, bagging_fraction 设置适当
  4. lambda_l1:默认为0,也称reg_alpha,表示的是L1正则化,double类型
  5. lambda_l2:默认为0,也称reg_lambda,表示的是L2正则化,double类型
  6. cat_smooth: default=10, type=double
    • 用于分类特征
    • 这可以降低噪声在分类特征中的影响, 尤其是对数据很少的类别
  7. min_data_in_leaf , 默认为20。 也称min_data_per_leaf , min_data, min_child_samples。 一个叶子上数据的最小数量。可以用来处理过拟合。
  8. min_sum_hessian_in_leaf, default=1e-3, 也称min_sum_hessian_per_leaf, min_sum_hessian, min_hessian, min_child_weight
    • 一个叶子上的最小 hessian 和. 类似于 min_data_in_leaf, 可以用来处理过拟合.
    • 子节点所需的样本权重和(hessian)的最小阈值,若是基学习器切分后得到的叶节点中样本权重和低于该阈值则不会进一步切分,在线性模型中该值就对应每个节点的最小样本数,该值越大模型的学习约保守,同样用于防止模型过拟合
  9. early_stopping_round, 默认为0, type=int, 也称early_stopping_rounds, early_stopping。 如果一个验证集的度量在 early_stopping_round 循环中没有提升, 将停止训练、
  10. min_split_gain, 默认为0, type=double, 也称min_gain_to_split`。执行切分的最小增益。
  11. max_bin:最大直方图数目,默认为255,工具箱的最大数特征值决定了容量 工具箱的最小数特征值可能会降低训练的准确性, 但是可能会增加一些一般的影响(处理过拟合,越大越容易过拟合)。
代码语言:javascript
复制
*   针对直方图算法tree_method=hist时,用来控制将连续值特征离散化为多个直方图的直方图数目。
*   LightGBM 将根据 `max_bin` 自动压缩内存。 例如, 如果 maxbin=255, 那么 LightGBM 将使用 uint8t 的特性值。
    12.**`subsample_for_bin`**
    `bin_construct_sample_cnt`, 默认为200000, 也称`subsample_for_bin`。用来构建直方图的数据的数量。

3.度量函数

  1. metric: default={l2 for regression}, {binary_logloss for binary classification}, {ndcg for lambdarank}, type=multi-enum, options=l1, l2, ndcg, auc, binary_logloss, binary_error …
    • l1, absolute loss, alias=mean_absolute_error, mae
    • l2, square loss, alias=mean_squared_error, mse
    • l2_root, root square loss, alias=root_mean_squared_error, rmse
    • quantile, Quantile regression
    • huber, Huber loss
    • fair, Fair loss
    • poisson, Poisson regression
    • ndcg, NDCG
    • map, MAP
    • auc, AUC
    • binary_logloss, log loss
    • binary_error, 样本: 0 的正确分类, 1 错误分类
    • multi_logloss, mulit-class 损失日志分类
    • multi_error, error rate for mulit-class 出错率分类
    • xentropy, cross-entropy (与可选的线性权重), alias=cross_entropy
    • xentlambda, “intensity-weighted” 交叉熵, alias=cross_entropy_lambda
    • kldiv, Kullback-Leibler divergence, alias=kullback_leibler
    • 支持多指标, 使用 , 分隔
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • XGBoost 参数介绍
    • 1.通用参数
      • 2.Booster参数
        • 3.学习目标参数
        • LightGBM 参数介绍
          • 1.核心参数
            • 2.学习控制参数
              • 3.度量函数
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档