关于人工智能:XGBoost超参数调优指南

54次阅读

共计 3696 个字符,预计需要花费 10 分钟才能阅读完成。

本文将具体解释 XGBoost 中十个最罕用超参数的介绍,性能和值范畴,及如何应用 Optuna 进行超参数调优。

对于 XGBoost 来说,默认的超参数是能够失常运行的,然而如果你想获得最佳的成果,那么就须要自行调整一些超参数来匹配你的数据,以下参数对于 XGBoost 十分重要:

  • eta
  • num_boost_round
  • max_depth
  • subsample
  • colsample_bytree
  • gamma
  • min_child_weight
  • lambda
  • alpha

XGBoost 的 API 有 2 种调用办法,一种是咱们常见的原生 API,一种是兼容 Scikit-learn API 的 API,Scikit-learn API 与 Sklearn 生态系统无缝集成。咱们这里只关注原生 API(也就是咱们最常见的),然而这里提供一个列表,这样能够帮忙你比照 2 个 API 参数,万一当前用到了呢:

如果想应用 Optuna 以外的超参数调优工具,能够参考该表。下图是这些参数对之间的相互作用:

这些关系不是固定的,然而大略状况是上图的样子,因为有一些其余参数可能会对咱们的者 10 个参数有额定的影响。

1、objective

这是咱们模型的训练指标

最简略的解释是,这个参数指定咱们模型要做的工作,也就是影响决策树的品种和损失函数。

2、num_boost_round – n_estimators

num_boost_round 指定训练期间确定要生成的决策树 (在 XGBoost 中通常称为根底学习器) 的数量。默认值是 100,但对于明天的大型数据集来说,这还远远不够。

减少参数能够生成更多的树,但随着模型变得更简单,适度拟合的机会也会显著减少。

从 Kaggle 中学到的一个技巧是为 num_boost_round 设置一个高数值,比方 100,000,并利用早停获得最佳版本。

在每个晋升回合中,XGBoost 会生成更多的决策树来进步前一个决策树的总体得分。这就是为什么它被称为 boost。这个过程始终继续到 num_boost_round 轮询为止,不论是否比上一轮有所改进。

然而通过应用早停技术,咱们能够在验证指标没有进步时进行训练,不仅节省时间,还能避免过拟合

有了这个技巧,咱们甚至不须要调优 num_boost_round。上面是它在代码中的样子:

 # Define the rest of the params
 params = {...}
 
 # Build the train/validation sets
 dtrain_final = xgb.DMatrix(X_train, label=y_train)
 dvalid_final = xgb.DMatrix(X_valid, label=y_valid)
 
 bst_final = xgb.train(
     params,
     dtrain_final,
     num_boost_round=100000 # Set a high number
     evals=[(dvalid_final, "validation")],
     early_stopping_rounds=50, # Enable early stopping
     verbose_eval=False,
 )

下面的代码使 XGBoost 生成 100k 决策树,然而因为应用了早停,当验证分数在最初 50 轮中没有进步时,它将进行。个别状况下树的数量范畴在 5000-10000 即可。管制 num_boost_round 也是影响训练过程运行工夫的最大因素之一,因为更多的树须要更多的资源。

3、eta – learning_rate

在每一轮中,所有现有的树都会对给定的输出返回一个预测。例如,五棵树可能会返回以下对样本 N 的预测:

 Tree 1: 0.57    Tree 2: 0.9    Tree 3: 4.25    Tree 4: 6.4    Tree 5: 2.1

为了返回最终的预测,须要对这些输入进行汇总,但在此之前 XGBoost 应用一个称为 eta 或学习率的参数放大或缩放它们。缩放后最终输入为:

 output = eta * (0.57 + 0.9 + 4.25 + 6.4 + 2.1)

大的学习率给汇合中每棵树的奉献赋予了更大的权重,但这可能会导致过拟合 / 不稳固,会放慢训练工夫。而较低的学习率克制了每棵树的奉献,使学习过程更慢但更强壮。这种学习率参数的正则化效应对简单和有噪声的数据集特地有用。

学习率与 num_boost_round、max_depth、subsample 和 colsample_bytree 等其余参数呈正比关系。较低的学习率须要较高的这些参数值,反之亦然。然而个别状况下不用放心这些参数之间的相互作用,因为咱们将应用主动调优找到最佳组合。

4、subsample 和 colsample_bytree

子抽样 subsample 它将更多的随机性引入到训练中,从而有助于反抗过拟合。

Subsample =0.7 意味着汇合中的每个决策树将在随机抉择的 70% 可用数据上进行训练。值 1.0 示意将应用所有行(不进行子抽样)。

与 subsample 相似,也有 colsample_bytree。顾名思义,colsample_bytree 管制每个决策树将应用的特色的比例。Colsample_bytree =0.8 使每个树应用每个树中随机 80% 的可用特色(列)。

调整这两个参数能够管制偏差和方差之间的衡量。应用较小的值升高了树之间的相关性,减少了汇合中的多样性,有助于进步泛化和缩小过拟合。

然而它们可能会引入更多的噪声,减少模型的偏差。而应用较大的值会减少树之间的相关性,升高多样性并可能导致过拟合。

5、max_depth

最大深度 max_depth 管制决策树在训练过程中可能达到的最大档次数。

更深的树能够捕捉特色之间更简单的相互作用。然而更深的树也有更高的过拟合危险,因为它们能够记住训练数据中的噪声或不相干的模式。为了管制这种复杂性,能够限度 max_depth,从而生成更浅、更简略的树,并捕捉更通用的模式。

Max_depth 数值能够很好地均衡了复杂性和泛化。

6、7、alpha,lambda

这两个参数一起说是因为 alpha (L1)和 lambda (L2)是两个帮忙过拟合的正则化参数。

与其余正则化参数的区别在于,它们能够将不重要或不重要的特色的权重放大到 0(特地是 alpha),从而取得具备更少特色的模型,从而升高复杂性。

alpha 和 lambda 的成果可能受到 max_depth、subsample 和 colsample_bytree 等其余参数的影响。更高的 alpha 或 lambda 值可能须要调整其余参数来弥补减少的正则化。例如,较高的 alpha 值可能受害于较大的 subsample 值,因为这样能够放弃模型多样性并避免欠拟合。

8、gamma

如果你读过 XGBoost 文档,它说 gamma 是:

在树的叶节点上进行进一步分区所需的最小损失缩小。

英文原文:the minimum loss reduction required to make a further partition on a leaf node of the tree.

我感觉除了写这句话的人,其他人都看不懂。让咱们看看它到底是什么,上面是一个两层决策树:

为了证实通过拆分叶节点向树中增加更多层是正当的,XGBoost 应该计算出该操作可能显著升高损失函数。

但“显著是多少呢?”这就是 gamma——它作为一个阈值来决定一个叶节点是否应该进一步宰割。

如果损失函数的缩小 (通常称为增益) 在潜在决裂后小于抉择的伽马,则不执行决裂。这意味着叶节点将放弃不变,并且树不会从该点开始成长。

所以调优的指标是找到导致损失函数最大缩小的最佳宰割,这意味着改良的模型性能。

9、min_child_weight

XGBoost 从具备单个根节点的单个决策树开始初始训练过程。该节点蕴含所有训练实例(行)。而后随着 XGBoost 抉择潜在的特色和宰割规范最大水平地缩小损失,更深的节点将蕴含越来越少的实例。

如果让 XGBoost 任意运行,树可能会长到最初节点中只有几个无关紧要的实例。这种状况是十分不可取的,因为这正是适度拟合的定义。

所以 XGBoost 为每个节点中持续宰割的最小实例数设置一个阈值。通过对节点中的所有实例进行加权,并找到权重的总和,如果这个最终权重小于 min_child_weight,则决裂进行,节点成为叶节点。

下面解释是对整个过程的最简化的版本,因为咱们次要介绍他的概念。

总结

以上就是咱们对这 10 个重要的超参数的解释,如果你想更深刻的理解仍有很多货色须要学习。所以倡议给 ChatGPT 以下两个提醒:

 1) Explain the {parameter_name} XGBoost parameter in detail and how to choose values for it wisely.
 
 2) Describe how {parameter_name} fits into the step-by-step tree-building process of XGBoost.

它必定比我讲的明确,对吧。

最初如果你也用 optuna 进行调优,请参考以下的 GIST:

https://avoid.overfit.cn/post/a432cd97278c4daabae268e53dc40db5

作者:Bex T.

正文完
 0