XGBoost - 超参数

在本章中,我们将讨论 XGBoost 算法所需的或常用的超参数子集。选择这些参数是为了简化从数据生成模型参数的过程。本章按类别列出了需要配置的超参数。可设置和可选的超参数。

XGBoost 超参数类别

XGBoost 创建者将整体超参数分为三大类 −

  • 常规参数

  • 增强器参数

  • 学习任务参数

让我们在下面的部分讨论这三类超参数 −

常规参数

常规参数定义了 XGBoost 模型的整体功能和工作原理。以下是此类别中的参数列表 −

  • 增强器 [default=gbtree]:此参数基本上选择每次迭代时要运行的模型类型。它提供了 2 个选项 - gbtree:基于树的模型和 gblinear:线性模型。

  • silent [default=0]:用于将模型设置为静默模式。如果激活并设置为 1,则表示不会打印任何正在运行的消息。最好将其保留为 0,因为消息可以帮助理解模型。

  • nthread [默认为可用的最大线程数]:主要用于并行处理,应输入系统中的核心数。如果您想在所有核心上运行,则无需输入该值,算法将自动检测它。

XGBoost 自动设置了另外两个参数,因此您无需担心它们。

助推器参数

由于助推器有两种类型,这里我们只讨论树助推器,因为它比线性助推器使用频率低,并且始终表现更好。

参数 描述 典型值
eta 喜欢学习速度。帮助控制模型在每个步骤后的变化程度。 0.01-0.2
min_child_weight 树节点中所需的所有观测值的最小总权重。 使用交叉验证进行调整
max_depth 树的最深层。控制过度拟合(模型过于具体)。 3-10
max_leaf_nodes 一棵树可以拥有的叶子(端点)数量。
gamma 分裂节点时损失需要减少的最小量。 根据损失函数进行调整
max_delta_step 限制一棵树的权重可以改变的程度。 通常不需要
subsample 用于生长每棵树的数据部分。 0.5-1
colsample_bytree 为每个随机选择的列(特征)部分树。 0.5-1
colsample_bylevel 树的每个级别上每次分割使用的列分数。 通常不使用
lambda L2 正则化(如 Ridge 回归),有助于减少过度拟合。 尝试减少过度拟合
alpha L1 正则化(如 Lasso 回归),适用于具有许多特征的模型。 适用于高维数据
scale_pos_weight 帮助不平衡的数据类使模型学习更快。 > 0(针对不平衡数据)

学习任务参数

学习任务参数定义优化的目标以及每一步将选择的指标。

objective [default=reg:linear]

用于定义要最小化的损失函数。最常用的值如下 −

  • binary: logistic - 指二元分类,因为有两个分类。它返回预期概率而不是实际类别。

  • multi: softmax - 它用于多类分类。它返回预期类别而不是概率。您还需要设置附加选项 num_class 以告诉模型有多少个唯一类别。

  • multi: softprob - 它是一个与 softmax 相当的函数,因为它提供数据点可能属于的每个可能类别的概率,而不仅仅是预测的类别。

eval_metric [根据目标默认]

评估指标必须与验证数据一起使用。默认参数是用于误差分类和回归的rmse。

典型值如下 −

  • rmse:均方根误差

  • mae:平均绝对误差

  • logloss:负对数似然

  • error:二分类错误率(0.5阈值)

  • merror:多分类错误率

  • mlogloss:多分类对数损失

  • auc:曲线下面积

seed [default=0]

它是随机数种子。它用于生成可重现的结果,也用于参数调整。

那些以前从未使用过 Scikit-Learn 的人不太可能认识这些参数名称。但是,Python xgboost 包有一个 sklearn 包装器,称为 XGBClassifier 参数。它遵循 sklearn 样式的命名约定。将改变的参数名称是:

  • eta -> learning_rate

  • lambda -> reg_lambda

  • alpha -> reg_alpha