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