XGBoost调参步骤及常见问题

XGBoost

xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)

  • xgboost在目标函数中显示的加上了正则化项,基学习为CART时,正则化项与树的叶子节点的数量T和叶子节点的值有关。
    正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。
    从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
    在这里插入图片描述

  • GB中使用Loss Function对f(x)的一阶导数计算出伪残差用于学习生成fm(x),xgboost不仅使用到了一阶导数,还使用二阶导数。
    第t次的loss:
    在这里插入图片描述
    对上式做二阶泰勒展开:g为一阶导数,h为二阶导数
    在这里插入图片描述

  • 上面提到CART回归树中寻找最佳分割点的衡量标准是最小化均方差,XGBoost的并行是在特征粒度上的,XGBoost预先对特征的值进行排序,然后保存为block结构
    xgboost寻找分割点的标准是最大化,lamda,gama与正则化项相关在这里插入图片描述
    xgboost算法的步骤和GB基本相同,都是首先初始化为一个常数,gb是根据一阶导数ri,xgboost是根据一阶导数gi和二阶导数hi,迭代生成基学习器,相加更新学习器。

  • xgboost考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率

  • 列抽样。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。

    XGBoost参数设置

    通用参数

    这些参数用来控制XGBoost的宏观功能。

  • booster[默认gbtree]

    选择每次迭代的模型,有两种选择:
    gbtree:基于树的模型
    gbliner:线性模型

  • silent[默认0]

    当这个参数值为1时,静默模式开启,不会输出任何信息。
    一般这个参数就保持默认的0,因为这样能帮我们更好地理解模型。

  • nthread[默认值为最大可能的线程数]

    这个参数用来进行多线程控制,应当输入系统的核数。
    如果你希望使用CPU全部的核,那就不要输入这个参数,算法会自动检测它。

booster参数

  • max_depth[默认6]

    和GBM中的参数相同,这个值为树的最大深度。
    这个值也是用来避免过拟合的。max_depth越大,模型会学到更具体更局部的样本。
    需要使用CV函数来进行调优。
    典型值:3-10

  • eta[默认0.3]

    和GBM中的 learning rate 参数类似。
    通过减少每一步的权重,可以提高模型的鲁棒性。
    典型值为0.01-0.2

  • base_score [ 默认0.5 ]
    所有实例的初始化预测分数,全局偏置;
    为了足够的迭代次数,改变这个值将不会有太大的影响。

  • min_child_weight[默认1]
    决定最小叶子节点样本权重和。
    和GBM的 min_child_leaf 参数类似,但不完全一样。XGBoost的这个参数是最小样本权重的和,而GBM参数是最小样本总数。
    这个参数用于避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。
    但是如果这个值过高,会导致欠拟合。这个参数需要使用CV来调整。

  • max_leaf_nodes

    树上最大的节点或叶子的数量。
    可以替代max_depth的作用。因为如果生成的是二叉树,一个深度为n的树最多生成 n 2 n^2 n2个叶子。
    如果定义了这个参数,GBM会忽略max_depth参数。

  • gamma[默认0]

    在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。
    这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。

  • max_delta_step[默认0]

    这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。
    通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的。
    这个参数一般用不到,但是你可以挖掘出来它更多的用处。

  • subsample[默认1]

    和GBM中的subsample参数一模一样。这个参数控制对于每棵树,随机采样的比例。
    减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。
    典型值:0.5-1

  • colsample_bytree[默认1]

    和GBM里面的max_features参数类似。用来控制每棵随机采样的列数的占比(每一列是一个特征)。
    典型值:0.5-1

  • colsample_bylevel[默认1]

    用来控制树的每一级的每一次分裂,对列数的采样的占比。
    我个人一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。但是如果感兴趣,可以挖掘这个参数更多的用处。

  • lambda[默认1]

    权重的L2正则化项。(和Ridge regression类似)。
    这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。

  • alpha[默认1]

    权重的L1正则化项。(和Lasso regression类似)。
    可以应用在很高维度的情况下,使得算法的速度更快。

  • scale_pos_weight[默认1]

    在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛

学习目

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值