XGBoost系列文章(四):参数调优与模型训练
本文是XGBoost系列的第四篇,聚焦参数调优与模型训练实战,从参数分类到调优技巧,结合代码示例解析核心方法。内容涵盖学习率、正则化、采样策略、早停法等关键环节,帮助读者快速掌握工业级调参方案。
1. XGBoost的三大类参数(通用参数、Booster参数、任务参数)分别是什么?
XGBoost参数分为三大类,控制不同层面的行为:
参数类型 | 作用范围 | 常用参数示例 |
---|---|---|
通用参数 | 全局控制模型类型和设备 | booster (模型类型:gbtree/gblinear/dart)、nthread (线程数)、verbosity (日志级别) |
Booster参数 | 控制树模型或线性模型 | eta (学习率)、max_depth (树深度)、gamma (分裂阈值)、subsample (行采样比例) |
任务参数 | 定义任务目标和评估指标 | objective (损失函数:reg:squarederror/binary:logistic)、eval_metric (评估指标) |
代码示例(参数分类设置):
import xgboost as xgb
# 通用参数
general_params = {
'booster': 'gbtree', # 使用树模型
'nthread': 4, # 使用4个CPU线程
'verbosity': 1 # 显示警告和关键信息
}
# Booster参数
booster_params = {
'eta': 0.3, # 学习率
'max_depth': 6, # 树的最大深度
'gamma': 0.1 # 最小分裂增益阈值
}
# 任务参数
task_params = {
'objective': 'reg:squarederror', # 回归任务
'eval_metric': 'rmse' # 评估指标为均方根误差
}
# 合并所有参数
params = {
**general_params, **booster_params, **task_params}
2. 学习率(eta)对模型性能有什么影响?如何调节?
学习率(eta) 控制每棵树的权重,是平衡模型精度与训练速度的核心参数:
- eta较大(如0.3):模型快速学习,但可能跳过最优解(欠拟合)。
- eta较小(如0.01):模型收敛更精确,但需要更多树(训练时间增加)。
调参技巧:
- 初始值建议:0.1~0.3。
- 配合早停法(Early Stopping)使用,避免手动设定树的数量。
- 若模型欠拟合:增大
eta
并减少n_estimators
;若过拟合:减小eta
并增加n_estimators
。
代码示例(不同eta对比):
import matplotlib.pyplot as plt
etas = [0.01, 0.1, 0.3]
results = {
}
for eta in etas