返回介绍

数学基础

统计学习

深度学习

工具

Scala

二、调参

发布于 2023-07-17 23:38:23 字数 11176 浏览 0 评论 0 收藏 0

2.1 调参指导

  1. 当出现过拟合时,有两类参数可以缓解:

    • 第一类参数:用于直接控制模型的复杂度。包括max_depth,min_child_weight,gamma 等参数
    • 第二类参数:用于增加随机性,从而使得模型在训练时对于噪音不敏感。包括subsample,colsample_bytree

    你也可以直接减少步长eta,但是此时需要增加num_round 参数。

  2. 当遇到数据不平衡时(如广告点击率预测任务),有两种方式提高模型的预测性能:

    • 如果你关心的是预测的AUC

      • 你可以通过scale_pos_weight 参数来平衡正负样本的权重
      • 使用AUC 来评估
    • 如果你关心的是预测的正确率:

      • 你不能重新平衡正负样本
      • 设置max_delta_step 为一个有限的值(如 1),从而有助于收敛

2.2 参数

2.2.1. 通用参数

  1. booster: 指定了使用那一种booster。可选的值为:

    • 'gbtree': 表示采用xgboost (默认值)

    • 'gblinear': 表示采用线性模型。

      'gblinear' 使用带l1,l2 正则化的线性回归模型作为基学习器。因为boost 算法是一个线性叠加的过程,而线性回归模型也是一个线性叠加的过程。因此叠加的最终结果就是一个整体的线性模型,xgboost 最后会获得这个线性模型的系数。

    • 'dart': 表示采用dart booster

  2. silent: 如果为 0(默认值),则表示打印运行时的信息;如果为 1, 则表示silent mode( 不打印这些信息)

  3. nthread: 指定了运行时的并行线程的数量。如果未设定该参数,则默认值为可用的最大线程数。

  4. num_pbuffer: 指定了prediction buffer 的大小。通常设定为训练样本的数量。该参数由xgboost 自动设定,无需用户指定。

    buffer 用于保存上一轮boostring step 的预测结果。

  5. num_feature: 样本的特征数量。通常设定为特征的最大维数。该参数由xgboost 自动设定,无需用户指定。

2.2.2 tree booster 参数

针对tree booster 的参数(适用于booster=gbtree,dart) :

  1. eta: 也称作学习率。默认为 0.3 。范围为 [0,1]

  2. gamma: 也称作最小划分损失min_split_loss。 它刻画的是:对于一个叶子节点,当对它采取划分之后,损失函数的降低值的阈值。

    • 如果大于该阈值,则该叶子节点值得继续划分
    • 如果小于该阈值,则该叶子节点不值得继续划分

    该值越大,则算法越保守(尽可能的少划分)。默认值为 0

  3. max_depth: 每棵子树的最大深度。其取值范围为 $ MathJax-Element-42 $ , 0 表示没有限制,默认值为6。

    该值越大,则子树越复杂;值越小,则子树越简单。

  4. min_child_weight: 子节点的权重阈值。它刻画的是:对于一个叶子节点,当对它采取划分之后,它的所有子节点的权重之和的阈值。

    • 如果它的所有子节点的权重之和大于该阈值,则该叶子节点值得继续划分
    • 如果它的所有子节点的权重之和小于该阈值,则该叶子节点不值得继续划分

    所谓的权重:

    • 对于线性模型(booster=gblinear),权重就是:叶子节点包含的样本数量。 因此该参数就是每个节点包含的最少样本数量。
    • 对于树模型(booster=gbtree,dart),权重就是:叶子节点包含样本的所有二阶偏导数之和。

    该值越大,则算法越保守(尽可能的少划分)。默认值为 1

  5. max_delta_step: 每棵树的权重估计时的最大delta step。取值范围为 $ MathJax-Element-42 $ ,0 表示没有限制,默认值为 0 。

    通常该参数不需要设置,但是在逻辑回归中,如果类别比例非常不平衡时,该参数可能有帮助。

  6. subsample: 对训练样本的采样比例。取值范围为 (0,1],默认值为 1 。

    如果为 0.5, 表示随机使用一半的训练样本来训练子树。它有助于缓解过拟合。

  7. colsample_bytree: 构建子树时,对特征的采样比例。取值范围为 (0,1], 默认值为 1。

    如果为 0.5, 表示随机使用一半的特征来训练子树。它有助于缓解过拟合。

  8. colsample_bylevel: 寻找划分点时,对特征的采样比例。取值范围为 (0,1], 默认值为 1。

    如果为 0.5, 表示随机使用一半的特征来寻找最佳划分点。它有助于缓解过拟合。

  9. lambdaL2 正则化系数(基于weights的正则化),默认为 1。 该值越大则模型越简单

  10. alphaL1 正则化系数(基于weights的正则化),默认为 0。 该值越大则模型越简单

  11. tree_method: 指定了构建树的算法,可以为下列的值:(默认为'auto' )

    • 'auto': 使用启发式算法来选择一个更快的tree_method

      • 对于小的和中等的训练集,使用exact greedy 算法分裂节点
      • 对于非常大的训练集,使用近似算法分裂节点
      • 旧版本在单机上总是使用exact greedy 分裂节点
    • 'exact': 使用exact greedy 算法分裂节点

    • 'approx': 使用近似算法分裂节点

    • 'hist': 使用histogram 优化的近似算法分裂节点(比如使用了bin cacheing 优化)

    • 'gpu_exact': 基于GPUexact greedy 算法分裂节点

    • 'gpu_hist': 基于GPUhistogram 算法分裂节点

    注意:分布式,以及外存版本的算法只支持 'approx','hist','gpu_hist' 等近似算法

  12. sketch_eps: 指定了分桶的步长。其取值范围为 (0,1), 默认值为 0.03 。

    它仅仅用于 tree_medhod='approx'

    它会产生大约 $ MathJax-Element-5 $ 个分桶。它并不会显示的分桶,而是会每隔 sketch_pes 个单位(一个单位表示最大值减去最小值的区间)统计一次。

    用户通常不需要调整该参数。

  13. scale_pos_weight: 用于调整正负样本的权重,常用于类别不平衡的分类问题。默认为 1。

    一个典型的参数值为: 负样本数量/正样本数量

  14. updater: 它是一个逗号分隔的字符串,指定了一组需要运行的tree updaters,用于构建和修正决策树。默认为 'grow_colmaker,prune'

    该参数通常是自动设定的,无需用户指定。但是用户也可以显式的指定。

  15. refresh_leaf: 它是一个updater plugin。 如果为 true,则树节点的统计数据和树的叶节点数据都被更新;否则只有树节点的统计数据被更新。默认为 1

  16. process_type: 指定要执行的处理过程(如:创建子树、更新子树)。该参数通常是自动设定的,无需用户指定。

  17. grow_policy: 用于指定子树的生长策略。仅仅支持tree_method='hist'。 有两种策略:

    • 'depthwise': 优先拆分那些靠近根部的子节点。默认为'depthwise'
    • 'lossguide': 优先拆分导致损失函数降低最快的子节点
  18. max_leaves: 最多的叶子节点。如果为0,则没有限制。默认值为 0 。

    该参数仅仅和grow_policy='lossguide' 关系较大。

  19. max_bin: 指定了最大的分桶数量。默认值为 256 。

    该参数仅仅当 tree_method='hist','gpu_hist' 时有效。

  20. predictor: 指定预测器的算法,默认为'cpu_predictor'。可以为:

    • 'cpu_predictor': 使用CPU 来预测
    • 'gpu_predictor': 使用GPU 来预测。对于tree_method='gpu_exact,gpu_hist''gpu_redictor' 是默认值。

2.2.3 dart booster 参数

  1. sample_type: 它指定了丢弃时的策略:

    • 'uniform': 随机丢弃子树(默认值)
    • 'weighted': 根据权重的比例来丢弃子树
  2. normaliz_type :它指定了归一化策略:

    • 'tree': 新的子树将被缩放为: $ MathJax-Element-6 $ ; 被丢弃的子树被缩放为 $ MathJax-Element-7 $ 。其中 $ MathJax-Element-12 $ 为学习率, $ MathJax-Element-17 $ 为被丢弃的子树的数量
    • 'forest':新的子树将被缩放为: $ MathJax-Element-10 $ ; 被丢弃的子树被缩放为 $ MathJax-Element-11 $ 。其中 $ MathJax-Element-12 $ 为学习率
  3. rate_dropdropout rate,指定了当前要丢弃的子树占当前所有子树的比例。范围为[0.0,1.0], 默认为 0.0

  4. one_drop: 如果该参数为true,则在dropout 期间,至少有一个子树总是被丢弃。默认为 0 。

  5. skip_drop: 它指定了不执行 dropout 的概率,其范围是[0.0,1.0], 默认为 0.0 。

    如果跳过了dropout,则新的子树直接加入到模型中(和xgboost 相同的方式)

2.2.4 linear booster 参数

  1. lambdaL2 正则化系数(基于weights 的正则化),默认为 0。 该值越大则模型越简单

  2. alphaL1 正则化系数(基于weights的正则化),默认为 0。 该值越大则模型越简单

  3. lambda_biasL2 正则化系数( 基于bias 的正则化),默认为 0.

    没有基于biasL1 正则化,因为它不重要。

2.4.5 tweedie regression 参数:

  1. weedie_variance_power: 指定了tweedie 分布的方差。取值范围为 (1,2) ,默认为 1.5 。

    越接近1,则越接近泊松分布;越接近2,则越接近 gamma 分布。

2.4.6 学习任务参数

  1. objective:指定任务类型,默认为'reg:linear'

    • 'reg:linear': 线性回归模型。它的模型输出是连续值

    • 'reg:logistic': 逻辑回归模型。它的模型输出是连续值,位于区间[0,1]

    • 'binary:logistic': 二分类的逻辑回归模型,它的模型输出是连续值,位于区间[0,1] ,表示取正负类别的概率。

      它和'reg:logistic' 几乎完全相同,除了有一点不同:

      • 'reg:logistic' 的默认evaluation metricrmse
      • 'binary:logistic' 的默认evaluation metricerror
    • 'binary:logitraw': 二分类的逻辑回归模型,输出为分数值(在logistic 转换之前的值)

    • 'count:poisson': 对 count datapoisson regression, 输出为泊松分布的均值。

    • 'multi:softmax': 基于softmax 的多分类模型。此时你需要设定num_class 参数来指定类别数量。

    • 'multi:softprob': 基于softmax 的多分类模型,但是它的输出是一个矩阵:ndata*nclass,给出了每个样本属于每个类别的概率。

    • 'rank:pairwise': 排序模型(优化目标为最小化pairwise loss

    • 'reg:gamma'gamma regression, 输出为伽马分布的均值。

    • 'reg:tweedie''tweedie regression'

  2. base_score: 所有样本的初始预测分,它用于设定一个初始的、全局的bias。 默认为 0.5 。

    • 当迭代的数量足够大时,该参数没有什么影响
  3. eval_metric: 用于验证集的评估指标。其默认值和objective 参数高度相关。

    回归问题的默认值是rmse; 分类问题的默认值是error; 排序问题的默认值是 mean average precision

    你可以指定多个evaluation metrics

    如果有多个验证集,以及多个评估指标.则: 使用最后一个验证集的最后一个评估指标来做早停。但是还是会计算出所有的验证集的所有评估指标。

    • 'rmse': 均方误差。

    • 'mae': 绝对值平均误差

    • 'logloss': 负的对数似然函数

    • 'error': 二分类的错误率。它计算的是:预测错误的样本数/所有样本数

      所谓的预测是:正类概率大于0.5的样本预测为正类;否则为负类(即阈值为 0.5 )

    • 'error@t': 二分类的错误率。但是它的阈值不再是 0.5, 而是由字符串t 给出(它是一个数值转换的字符串)

    • 'merror': 多类分类的错误率。它计算的是:预测错误的样本数/所有样本数

    • 'mlogloss': 多类分类的负对数似然函数

    • 'auc'AUC 得分

    • 'ndcg'Normalized Discounted Cumulative Gain 得分

    • 'map'Mean average precision 得分

    • 'ndcg@n','map@n'n 为一个整数,用于切分验证集的top 样本来求值。

    • 'ndcg-','map-','ndcg@n-','map@n-': NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions. training repeatedly

    • poisson-nloglik: 对于泊松回归,使用负的对数似然

    • gamma-nloglik: 对于伽马回归,使用负的对数似然

    • gamma-deviance: 对于伽马回归,使用残差的方差

    • tweedie-nloglik: 对于tweedie 回归,使用负的对数似然

  4. seed: 随机数种子,默认为 0 。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文