XGBoost 参数详解


XGBoost 参数详解(中文版)

原文地址https://xgboost.readthedocs.io/en/stable/parameter.html


目录


1. 参数配置方式

XGBoost 支持多种参数传入方式:

接口 配置方式 示例
xgboost.train 字典 param param = {'max_depth': 6, 'eta': 0.1}
XGBClassifier / XGBRegressor 构造函数参数 XGBClassifier(max_depth=6, eta=0.1)
命令行 key=value xgboost config.conf eta=0.1
配置文件 .conf 文件 eta = 0.1

推荐:使用 Python API 时,优先使用 XGBClassifier 的 scikit-learn 接口,便于与 GridSearchCVOptuna 等集成。


2. 参数总览表格

参数 别名 类型 默认值 适用提升器 说明
通用参数
booster - str gbtree 全部 提升器类型
verbosity silent(弃用) int 1 全部 日志级别
validate_parameters - bool False 全部 参数合法性检查
nthread - int None 全部 并行线程数
disable_default_eval_metric - int 0 全部 禁用默认评估指标
树提升器参数
eta learning_rate float 0.3 gbtree, dart 学习率
gamma min_split_loss float 0 gbtree, dart 最小分割损失
max_depth - int 6 gbtree, dart 树最大深度
min_child_weight - float 1 gbtree, dart 子节点最小权重和
max_delta_step - float 0 gbtree, dart 权重最大步长
subsample - float 1 gbtree, dart 样本采样比例
sampling_method - str uniform gbtree, dart 采样方式
colsample_bytree - float 1 gbtree, dart 特征列采样(按树)
colsample_bylevel - float 1 gbtree, dart 特征列采样(按层)
colsample_bynode - float 1 gbtree, dart 特征列采样(按节点)
lambda reg_lambda float 1 全部 L2 正则化
alpha reg_alpha float 0 全部 L1 正则化
tree_method - str auto gbtree, dart 树构建算法
sketch_eps - float 0.03 approx 近似误差
scale_pos_weight - float 1 gbtree, dart 正负样本权重比
grow_policy - str depthwise hist 树生长策略
max_leaves - int 0 lossguide 最大叶子数
max_bin - int 256 hist, gpu_hist 直方图 bin 数
predictor - str cpu_predictor 全部 预测器类型
num_parallel_tree - int 1 gbtree, dart 每轮并行树数(随机森林)
线性提升器参数
updater - str shotgun gblinear 坐标下降策略
DART 提升器参数
sample_type - str uniform dart dropout 采样类型
normalize_type - str tree dart 归一化方式
rate_drop - float 0.0 dart dropout 比例
one_drop - int 0 dart 强制至少 dropout 一棵树
skip_drop - float 0.0 dart 跳过 dropout 概率
学习任务参数
objective - str reg:squarederror 全部 目标函数
base_score - float 0.5 全部 初始预测分数
eval_metric - str/list 自动 全部 评估指标
seed random_state(推荐) int 0 全部 随机种子(弃用)

3. 详细参数说明

3.1 通用参数

参数 详细说明
booster 选择提升器类型:
gbtree:树模型(默认,推荐)
gblinear:线性模型(高维稀疏数据)
dart:带 dropout 的树模型(防过拟合)
verbosity 日志级别:
0:静默
1:警告(默认)
2:信息
3:调试(打印每棵树)
注意:旧版 silent=1 表示静默,已弃用
validate_parameters 是否检查参数合法性。scikit-learn 接口默认 True
建议:生产环境开启,避免拼写错误
nthread 并行线程数。None 使用所有可用核心。
最佳实践:显式设置(如 nthread=8),保证跨机器结果一致
disable_default_eval_metric 1 表示不使用默认指标(如 RMSE)。适用于自定义指标

3.2 树提升器参数

学习率与正则化

参数 说明 调参建议
eta (learning_rate) 每次提升的步长收缩。范围 [0, 1] 初始 0.1~0.3,后期可降至 0.01 + 增加 num_boost_round
gamma (min_split_loss) 分割所需最小损失减少。越大越保守 0 开始,过拟合时增大至 0.1~1
lambda (reg_lambda) L2 正则化(权重平方和) 默认 1,过拟合时增大至 5~100
alpha (reg_alpha) L1 正则化(权重绝对值和) 特征冗余时设 0.1~1,促进稀疏

树结构控制

参数 说明 典型值
max_depth 树最大深度。0 表示无限制 3~10,从 6 开始
min_child_weight 子节点权重和最小值 1~10,大数据集可设 5
max_delta_step 权重最大步长。不平衡分类时设 1~10 通常 0
max_leaves 最大叶子数(与 grow_policy=lossguide 配合) 0(无限制)或 32~128

采样参数(引入随机性)

参数 说明 推荐值
subsample 每棵树采样样本比例 0.6~1.0
colsample_bytree 每棵树采样特征比例 0.6~1.0
colsample_bylevel 每层采样特征比例 通常与 colsample_bytree 一致
colsample_bynode 每个节点采样特征比例 0.6~1.0

组合建议subsample=0.8, colsample_bytree=0.8

树构建算法

tree_method 说明 适用场景
auto 自动选择(数据 < 10k 用 exact,否则 hist 通用
exact 精确贪心(遍历所有分割点) 小数据,追求极致精度
approx 近似贪心(分位数 sketch) 中等数据
hist 直方图算法(推荐) 大数据,速度快
gpu_hist GPU 直方图 GPU 环境,超大数据

推荐tree_method='hist'(CPU)或 'gpu_hist'(GPU)


3.3 线性提升器参数

适用于 booster=gblinear

参数 说明
updater shotgun(随机坐标下降,适合稀疏数据)
coord_descent(全坐标下降,适合稠密数据)
lambda, alpha 同树模型,控制权重正则化

适用场景:文本分类(TF-IDF)、推荐系统(高维稀疏特征)


3.4 DART 提升器参数

参数 说明 推荐
rate_drop 每轮 dropout 树比例 0.1~0.3
one_drop 1 表示至少 dropout 一棵树 配合 rate_drop>0
skip_drop 跳过 dropout 的概率(动态控制) 0.2~0.5
normalize_type tree(每树归一化)或 forest 通常 tree

使用场景:深度树 + 易过拟合任务


3.5 学习任务参数

参数 说明 示例
objective 目标函数 binary:logistic, reg:squarederror
base_score 初始预测值 分类 0.5,回归 y.mean()
eval_metric 评估指标 ['auc', 'logloss']
scale_pos_weight 正负样本权重比 sum(neg) / sum(pos)

3.6 命令行专用参数

参数 说明
num_round 提升轮数(必需)
data / test:data 数据路径
watchlist 监控集:train:data/train.txt,val:data/val.txt
model_in / model_out 模型加载/保存

4. 参数依赖关系图

graph TD
    A[booster] --> B[gbtree]
    A --> C[gblinear]
    A --> D[dart]
    B --> E[tree_method]
    E --> F[hist]
    E --> G[gpu_hist]
    F --> H[max_bin]
    B --> I[subsample]
    B --> J[colsample_bytree]
    B --> K[max_depth]
    D --> L[rate_drop]
    A --> M[objective]
    M --> N[eval_metric]

5. 调参实战指南(推荐流程)

text

1. 固定学习率:eta = 0.1
2. 调树复杂度:
   - max_depth: 3~10
   - min_child_weight: 1~10
   - gamma: 0~1
3. 调正则化:
   - lambda: 1~100
   - alpha: 0~1
4. 调采样:
   - subsample: 0.6~1.0
   - colsample_bytree: 0.6~1.0
5. 降低 eta(如 0.05)+ 增加 num_boost_round
6. 使用早停(early_stopping_rounds=50)

6. 常见目标函数与评估指标对照表

任务 objective 默认 eval_metric 推荐指标
回归 reg:squarederror rmse rmse, mae
回归(对数) reg:squaredlogerror rmsle rmsle
二分类 binary:logistic logloss auc, logloss
多分类 multi:softmax merror merror, mlogloss
多分类(概率) multi:softprob merror 同上
排序 rank:pairwise auc ndcg, map

7. 中英文术语对照表

英文 中文 说明
booster 提升器 模型类型
learning rate 学习率 eta
regularization 正则化 L1/L2
subsample 子采样 样本采样
colsample 列采样 特征采样
histogram 直方图 hist 算法
dropout 丢弃 DART 机制
early stopping 早停 防止过拟合

8. 代码示例

Python API(推荐)

import xgboost as xgb
from sklearn.model_selection import train_test_split

# 数据准备
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)

dtrain = xgb.DMatrix(X_train, y_train)
dval = xgb.DMatrix(X_val, y_val)

params = {
    'objective': 'binary:logistic',
    'eval_metric': ['auc', 'logloss'],
    'eta': 0.1,
    'max_depth': 6,
    'subsample': 0.8,
    'colsample_bytree': 0.8,
    'tree_method': 'hist',
    'verbosity': 1,
    'scale_pos_weight': 2.0
}

bst = xgb.train(
    params,
    dtrain,
    num_boost_round=1000,
    evals=[(dtrain, 'train'), (dval, 'val')],
    early_stopping_rounds=50,
    verbose_eval=10
)

scikit-learn 接口

from xgboost import XGBClassifier

model = XGBClassifier(
    n_estimators=1000,
    max_depth=6,
    learning_rate=0.1,
    subsample=0.8,
    colsample_bytree=0.8,
    eval_metric='auc',
    early_stopping_rounds=50,
    n_jobs=8
)

model.fit(X_train, y_train,
          eval_set=[(X_val, y_val)],
          verbose=10)

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
评论
  目录