xgboost知识点总结 - 面试篇

目录

          • xgboost原理 - 公式推导
          • xgboost调参
          • xgboost优点

关于xgboost的面试无非分为3大块,xgboost原理,调参,优点
1,原理。可能会要求推公式,细一点会让你比较和CART树有什么区别,然后引出ID3, C4.5,随机森林。(基尼系数和熵怎么算,为什么要用信息增益率)
2,调参。问你lambda,alpha是干什么的,你一般调哪些参数。GridSearchCV怎么和xgboost一起用。
3,优点。最主要的是代价函数的二阶展开,l1,l2正则。然后引申正则化有什么用,l1,l2区别等。

大佬可以直接看源码 源码解析
(以后有空再看)

xgboost原理 - 公式推导

点击这里

①集成思想 ②损失函数分析 ③求解

机器学习三要素:模型、策略、算法。

xgboost调参

点击这里

作者分享了两条经验:
1.仅仅通过调参来提升模型的效果是很难的
2.想要提升模型的效果,还可以通过特征工程、模型融合以及stacking方法

  1. General Parameters:
  • booster [default=gbtree]:
    • gbtree: tree-based models,树模型
    • gblinear: linear models,线性模型
  • nthread [default to maximum number of threads available if not set]
  1. Booster Parameters
  • eta [default=0.3] 学习率
    • Shrinkage(缩减),相当于学习速率。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了消弱每棵树的影响,让后面有更大的学习空间。在实际应用中,一般把学习率设置的小一点,然后迭代次数设置的大一点。
  • min_child_weight [default=1] 生成的孩子节点的权重最小和
  • max_depth [default=6]
  • max_leaf_nodes ,与max_depth定义一个就好
  • gamma [default=0]
    • 一个节点分裂的条件是其分裂能够起到降低loss function的作用,gamma 定义loss function降低多少才分裂
  • subsample [default=1]: 对树进行采样
  • colsample_bytree [default=1]: 每棵树随机选取的特征的比例
  • colsample_bylevel [default=1]:树的每个层级分裂时子样本的特征所占的比例。作者表示不用这个参数,因为subsample和colsample_bytree组合做的事与之类似
  • lambda [default=1]: l2正则化权重的术语
  • alpha [default=0] :l1正则化的权重术语。当特征量特别多的时候可以使用,这样能加快算法的运行效率
  • n_estimators 最佳迭代次数,树的个数
  1. Learning Task Parameters
  • objective [default=reg:linear]
    • 用于定义loss function,通常有以下几类
    • binary:logistic-用于二分类,返回分类的概率而不是类别(class)
    • multi:softmax-多分类问题,返回分类的类别而不是概率
    • multi:softprob-与softmax类似,但是返回样本属于每一类的概率
  • eval_metric [ default according to objective ]
    • 这个变量用于 测试数据(validation data.)
    • 默认值:回归-rmse;分类-error

xgboost优点
  • 能够处理缺失值
    • xgboost如何处理缺失值 这里
    • 通常情况,中位数,均值或者融合。但xgboost不需要人为处理。    在寻找split point的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point的时间开销。   然后,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。
         如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。
  • 传统的GBDT以CART树作为基学习器,XGBoost还支持 线性分类器
  • 传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数
  • XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,防止过拟合
  • shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。
  • 列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算;
  • XGBoost工具支持并行。XGBoost的并行是在特征粒度上的。决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点)




最后,为了加深印象,用一个小项目练手,出去别人问了你也好说用过xgboost。
推荐一个博客:
Scikit中的特征选择,XGboost进行回归预测,模型优化的实战 点击这里

你可能感兴趣的:(机器学习,算法,面试)