调参须知:
在机器学习中,调参是一项dark
art(可以理解为一项优美而道不明的事情)。一个模型的最优参数取决于很多因素。因此不可能建立一个完备的调参说明书去获取最优参数。
理解 Bias-Variance tradeoff
(先说一下tradeoff的意思:就是折中的意思,这里是说)

如果你上过机器学习或者统计学课程,这是一个非常重要的概念。当我们允许一个模型非常复杂的时候(比如,增加每一棵树的深度depth),模型对训练数据具备较好的拟合能力,就是说训练时候的<y_predict-y>的差值较小,也就是bias这个评价模型好坏的指标,获得了较小的数据,拟合能力强。但是,这种负责的模型要求更多的数据去拟合模型,如果你的数据不够多,那么会产生欠拟合现象,对训练数据拟合。biase越小,模型倾向于过拟合,对测试数据的预测能力差,而我们要的是既不是过拟合也不是欠拟合,二者之间寻找一个平衡,怎么找?调参。
xgb中可以调节很多参数用于bias variance
tradeoff。一个好的模型,它在模型复杂度和预测能力上会找到一个平衡点。参数文档将会讲解哪些参数使得模型更加conservative,这里的conservative,我理解是_____,参数调优帮你在复杂模型和简单模型之间找到平衡点。
控制过拟合:
当你观察到训练模型时,训练精度特别高,比如auc较大,但是测试精度很低,很可能是出现了过拟合问题。
在xgb调中,一般有两种方式用于控制过拟合:
1、直接控制参数的复杂度
    包括max_depth min_child_weight gamma
2、add randomness来使得对训练对噪声鲁棒。
    包括subsample colsample_bytree
    或者也可以减小步长 eta,但是需要增加num_round,来平衡步长因子的减小。
处理非平衡数据集:
会存在一些数据极度不平衡,会影响到xgb模型的训练,有两个方法可以改善这种情况:
1、如果你关注预测结果的排序结果auc
    平衡正负样本的权重,通过scale_pos_weight来处理。
2、如果你关注预测正确的概率:
    这种情况下,你不可以对这个数据进行re-balance,如果你采样或者别的操作,会改变原始数据集合的分布。

    可以设置参数max_delta_step为一个确定的数,这有助于模型收敛。

xgb调参:
在xgb调参之前,我们需要知道有三种类型的参数:general 参数、booster 参数、和task参数
1.general 参数:关系到我们用哪种booster做提升,一般是树模型和线性模型。
2.booster 参数:我们选择哪种booster作为xgboost的基本模型。
3.learning task 参数:取决于学习的场景。比如:回归任务和排序任务所采用的参数可能不同。
4.命令行参数:与xgb的版本中的CLI有关,(CLI指代什么?)
General Parameters
booster [default=gbtree] 
   
gbtree和、blinear、dart。gbtree和dart使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree
silent [default=0] 
    取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0
nthread [default to maximum number of threads available if not set] 
    XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数
num_pbuffer [set automatically by xgboost, no need to be set by user] 
    该参数不需要user设置,xgb可以自动设置。
    预测缓存的大小,一般设置为训练实例的数量。这个缓存用于保存最后一个提升步骤的预测结果。
    size of prediction buffer, normally set to number of training instances.
The buffers are used to save the prediction results of last boosting step.
num_feature [xgb自动设置,不需要用户自己设置。 set automatically by xgboost, no need to be
set by user] 
    boosting过程中用到的特征维数,设置为特征个数。XGBoost会自动设置,不需要手工设置


Parameter for Tree Booster
eta [default=0.3] :学习速率
    为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。
eta通过缩减特征的权重使提升计算过程更加保守。(这里的保守,是否可以理解为泛化能力强)缺省值为0.3
    取值范围为:[0,1]
gamma [default=0] :最小分裂损失
   
最小化损失函数的减小要求树的叶子节点做出划分,减掉一些叶子节点,这些叶子节点的存在使得损失函数变大,因此这个gamma起到剪枝的作用。这个值越大,算法越保守。
    minimum loss reduction required to make a further partition on a leaf node
of the tree. the larger, the more conservative the algorithm will be.
range: [0,∞]
max_depth [default=6] :单棵树的深度
    数的最大深度。增大这个数,将使得模型更为复杂,倾向于过拟合。如果 max_depth =
0,表示对树的深度不做限制,对树的深度也就是层数做限制是为了使得树的生长更为合理。缺省值为6
    取值范围为:[1,∞]
min_child_weight [default=1] 
   
孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该参数值越大算法越conservative
    取值范围为: [0,∞]
max_delta_step [default=0] 在每棵树的权重估计中,允许的最大delta步长。
   
如果这个值设置为0,意味着没有约束。如果设置为一个正数,它有助于在更新步长的时候,使得模型更加保守。通常,这个参数不需要设置,但是当类别极度不平衡的时候,有助于逻辑回归模型的训练。设置它的值为1-10,可能有助于控制更新。
    Maximum delta step we allow each tree’s weight estimation to be. If the
value is set to 0, it means there is no constraint. If it is set to a positive
value, it can help making the update step more conservative. Usually this
parameter is not needed, but it might help in logistic regression when class is
extremely imbalanced. Set it to value of 1-10 might help control the update
    取值范围为:[0,∞]
subsample [default=1] :二次抽样
   
用于训练模型的子样本占整个样本集合的比例。如果设置为0.5,则意味着XGBoost将随机的从整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合。
    取值范围为:(0,1]
colsample_bytree [default=1] 
    在建立树时对特征采样的比例。缺省值为1
    取值范围:(0,1]
colsample_bylevel [default=1]
    分裂时,在每个水平层次上,对列的采样比例。
    范围:(0,1]
lambda [default=1, alias: reg_lambda]:正则化参数lambda
    权重的L2正则项,增大这个值将会使得模型更加保守。
alpha [default=0, alias: reg_alpha]
 
    



参考链接:https://xgboost.readthedocs.io/en/latest/parameter.html#parameters-for-tweedie-regression








参考文献:https://xgboost.readthedocs.io/en/latest/how_to/param_tuning.html#handle-imbalanced-dataset