logo

XGBoost 使用

wangzf / 2023-03-02


目录

参数

通用参数

控制整个模型的通用性能

Tree Booster 参数

控制每步迭代中每个基学习器(树模型)

需要调参:

一般不需要调参:

Linear Booster 参数

重要:

不重要:

DART Booster 参数

学习任务参数

控制模型优化的表现

计算参数

外存计算

GPU 计算

参数调节

参数调优的一般策略

  1. 首先, 选择一个相对较大的 eta/learning_rate, 比如: 0.1(一般范围在: $[0.05, 0.3]$)
    • 根据这个选定的 learning_rate,对树的数量 n_estimators 进行 CV 调优, 选择一个最优的 n_estimators
  2. 依次调节树参数
    • max_depth
      • $[3, 10]$
    • min_child_weight
      • 类别不平衡数据选择一个较小值
    • gamma
      • $[0.1, 0.2]$
    • subsample
      • $[0.5, 0.9]$
    • colsample_bytree
      • $[0.5, 0.9]$
    • scale_pos_weight
      • 类别不平衡数据选择一个较小值
  3. 调节正则化参数
    • lambda: L2
    • alpha: L1
  4. 减小 learning_rate, 增加决策树数量 n_estimators,并且优化其他参数
  5. 调节对模型结果影响最大的参数
    • max_depth
    • min_child_weight

调参指导

  1. 当出现过拟合时,有两类参数可以缓解:
    • 第一类参数:用于直接控制模型的复杂度。包括 max_depthmin_child_weightgamma 等参数
    • 第二类参数:用于增加随机性,从而使得模型在训练时对于噪音不敏感。包括 subsamplecolsample_bytree
    • 也可以直接减少步长 eta,但是此时需要增加 num_round 参数。
  2. 当遇到数据不平衡时(如广告点击率预测任务),有两种方式提高模型的预测性能:
    • 如果关心的是预测的 AUC:
      • 可以通过 scale_pos_weight 参数来平衡正负样本的权重
      • 使用 AUC 来评估
    • 如果关心的是预测的正确率:
      • 不能重新平衡正负样本
      • 设置 max_delta_step 为一个有限的值(如 1),从而有助于收敛

Python API

数据接口

数据格式

  1. XGBoost 的数据存储在 DMatrix 中;

  2. XGBoost 支持直接从下列格式的文件中加载数据:

    • libsvm 文本格式文件。其格式为:
    [label] [index1]:[value1] [index2]:[value2] ...
    [label] [index1]:[value1] [index2]:[value2] ...
    ...
    
    • xgboost binary buffer 文件
import xgboost as xgb

dtrain = xgb.DMatrix("train.svm.txt")  # libsvm 格式
dtest = xgb.DMatrix("test.svm.buffer")  # xgboost binary buffer 文件
  1. XGBoost 也支持从二维的 Numpy array 中加载数据
data = np.random.rand(5, 10)
label = np.random.randint(2, size = 5)
dtrain = xgb.DMatrix(data, label = label)
  1. 也可以从 scipy.sparse.array 中加载数据
csr = scipy.sparse.csr_matrix((dat, (row, col)))
dtrain = xgb.DMatrix(csr)

DMatrix

模型接口

绘图 API

参考