XGBoost - 超参数
本章将讨论 XGBoost 算法所需或常用超参数的子集。这些参数已被选择以简化从数据生成模型参数的过程。本章按类别列出了需要配置的必需超参数。这些超参数是可设置的且可选的。
XGBoost 超参数类别
XGBoost 创建者将所有超参数主要分为三大类:
通用参数
提升器参数
学习任务参数
让我们在下节讨论这三类超参数:
通用参数
通用参数定义了 XGBoost 模型的整体功能和工作方式。以下是此类别中的参数列表:
booster [默认=gbtree]:此参数主要选择每次迭代运行的模型类型。它提供 2 个选项 - gbtree:基于树的模型和 gblinear:线性模型。
silent [默认=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 正则化(如岭回归),有助于减少过拟合。 | 尝试减少过拟合 |
| alpha | L1 正则化(如 Lasso 回归),对于具有许多特征的模型很有用。 | 适用于高维数据 |
| scale_pos_weight | 帮助处理不平衡的数据类别,使模型学习得更快。 | > 0(对于不平衡数据) |
学习任务参数
学习任务参数定义了优化的目标和每一步将选择的指标。
objective [默认=reg:linear]
用于定义要最小化的损失函数。最常用的值如下:
binary:logistic - 指的是二元分类,因为有两个分类。它返回预期概率而不是实际类别。
multi:softmax - 用于多类别分类。它返回预期类别而不是概率。你还需要设置额外的选项 num_class 来告诉模型有多少个唯一的类别。
multi:softprob - 此函数与 softmax 类似,它提供数据点可能属于的每个可能类别的概率,而不仅仅是预测的类别。
eval_metric [根据 objective 默认]
评估指标必须与验证数据一起使用。默认参数是用于错误分类和回归的 rmse。
典型值如下:
rmse:均方根误差
mae:平均绝对误差
logloss:负对数似然
error:二元分类错误率(0.5 阈值)
merror:多类别分类错误率
mlogloss:多类别对数损失
auc:曲线下面积
seed [默认=0]
这是随机数种子。它用于生成可重复的结果以及参数调优。
如果您以前从未使用过 Scikit-Learn,则不太可能识别这些参数名称。但是,Python xgboost 包有一个名为 XGBClassifier 参数的 sklearn 包装器。它遵循 sklearn 样式的命名约定。将更改的参数名称为
eta -> learning_rate
lambda -> reg_lambda
alpha -> reg_alpha