机器学习 xgboost 参数价值和调整方法
引言
知其然而不知其所以然的态度做学问迟早要吃大亏的,不如说是前期工作做的越多越好,后期就会越爽越轻松。机器学习方面,虽然大家都是调参小子,但是随便调只为了拟合测试集肯定是不对的,所以我认为好好看看每个参数代表什么是很有必要的。这次主要看的是 xgboost 的参数详情,来自官网[1].
参数详情
部分翻译来源于[2], 详细说明参照官网[3].
通用参数
booster [默认=gbtree]
描述:选择要使用的提升器类型,可以是 gbtree(树模型)、gblinear(线性模型)或 dart(Dropouts meet Multiple Additive Regression Trees)。
device [默认=cpu]
描述:XGBoost 运行的设备选择,可设置为以下值:
cpu: 使用 CPU。
cuda: 使用 GPU(CUDA 设备)。
cuda:
gpu: 默认 GPU 设备选择,从可用且受支持的设备列表中选择。目前只支持 cuda 设备。
gpu:
verbosity [默认=1]
描述:打印消息的详细程度。有效值为 0(无输出)、1(警告)、2(信息)、3(调试)。
validate_parameters [默认为 false,除了 Python、R 和 CLI 接口]:
描述:当设置为 True 时,XGBoost 将验证输入参数,以检查参数是否被正确使用。如果存在未知参数,将发出警告。
nthread [默认为可用的最大线程数]
描述:用于运行 XGBoost 的并行线程数,应考虑线程争用和超线程。
disable_default_eval_metric [默认=false]
描述:禁用默认评估指标。设置为 1 或 true 可禁用默认评估指标。
树提升器参数
eta [默认=0.3,别名:learning_rate]
描述:用于更新的步长缩减。在每次提升计算之后,算法会直接获得新特征的权重。eta 缩小特征权重,使提升过程更加保守,防止过拟合。
取值区间:[0,1]
gamma [默认=0,别名:min_split_loss]
描述:要进行叶节点进一步划分所需的最小损失减小量。gamma 越大,算法越保守,越不容易过拟合。
取值区间:[0,∞]
max_depth [默认=6]
描述:树的最大深度。增加此值会使模型更复杂,更容易过拟合。0 表示没有深度限制。
取值区间:[0,∞]
min_child_weight [默认=1]
描述:子节点所需的最小实例权重之和 (决定最小叶子节点样本权重和),加权和低于这个值时,就不再分裂产生新的叶子节点。当它的值较大时,可以避免模型学习到局部的特殊样本。但如果这个值过高,会导致欠拟合。
取值区间:[0,∞]
max_delta_step [默认=0]
描述:允许每个叶节点输出的最大增量。如果设置为 0,表示没有限制;设置为正值有助于使更新步骤更加保守。
取值区间:[0,∞]
subsample [默认=1]
描述:训练实例的子样本比率。设置为 0.5 表示 XGBoost 会在生长树之前随机采样一半的训练数据,以防止过拟合。
取值区间:(0,1]
sampling_method [默认=uniform]
描述:用于采样训练实例的方法。uniform 表示每个训练实例具有相等的被选中概率;gradient_based 表示选择概率与梯度的绝对值正则化成正比。
取值区间:[uniform, gradient_based]
colsample_bytree, colsample_bylevel, colsample_bynode [默认=1]
描述:用于列抽样的参数,控制特征的子样本比率。colsample_bytree 用于构建每棵树时对列进行抽样,colsample_bylevel 用于每层进行列抽样,colsample_bynode 用于每个节点进行列抽样。
取值区间:(0,1]
lambda [默认=1,别名:reg_lambda]
描述:L2 正则化权重项。增加此值会使模型更保守。
取值区间:[0,∞]
alpha [默认=0,别名:reg_alpha]
描述:L1 正则化权重项。增加此值会使模型更保守。
取值区间:[0,∞]
ee_method [默认=auto]
描述:XGBoost 中使用的树构建算法。可以是 auto、exact、approx、hist 等。
scale_pos_weight [默认=1]
描述:用于平衡正负权重的参数,对于不平衡的类别很有用。
updater
描述:用于定义树更新器的顺序的参数,提供了构建和修改树的模块化方式。
refresh_leaf [默认=1]
描述:刷新更新器的参数,用于控制是否更新树叶节点及其统计信息。
process_type [默认=default]
描述:用于控制提升过程的类型,可以是 default 或 update。
grow_policy [默认=depthwise]
描述:控制新节点添加到树中的方式,仅支持 hist 或 approx 时使用。
max_leaves [默认=0]
描述:要添加的最大节点数,不用于 exact 树方法。
max_bin [默认=256]
描述:仅用于 hist 或 approx 时,指定连续特征的离散化分桶数量。
num_parallel_tree [默认=1]
描述:在每次迭代期间构建的并行树数量,用于支持增强的随机森林。
monotone_constraints
描述:用于控制变量单调性的约束。
interaction_constraints
描述:用于表示允许的交互作用的约束。
multi_strategy [默认=one_output_per_tree]
不知道哪来的参数
seed
随机数种子,相同的种子可以复现随机结果,用于调参!
n_estimators
在 XGBoost 中,n_estimators 参数指定了要构建的提升树(boosting tree)的数量。具体来说,它表示 boosting 迭代的次数,每次迭代会构建一棵树。这个参数对于控制模型的复杂度和性能非常重要。
每次迭代,XGBoost 会根据前一轮的模型性能,构建一颗新的树来纠正前一轮的误差。n_estimators 的值决定了模型将拟合多少颗这样的树。增加 n_estimators 的值通常可以提高模型的性能,但需要更多的时间来训练模型。但需要注意,如果 n_estimators 设置得太大,可能会导致过拟合。
通常,你可以通过交叉验证来选择合适的 n_estimators 值,以平衡模型的性能和训练时间。
评价指标
准确率、精确率、召回率、F1 分数、ROC 曲线和 AUC