😄 搞竞赛天天无脑XGBoost、LightGBM、CatBoost,但不知道原理也少许有点尴尬了~,所以打算深入学习下这三大竞赛杀器的原理,整理下面试中一些高频问题。之前有决策树,GBDT的基础了,再学学这三个和随机森林,集成学习之树模型应该差不多了。
🚀 看了一圈网上关于讲解XGB原理的基本都是到处粘贴公式凑一起,说这公式就是通过这样来的,那样来的,没有详细的推导过程及详细的解释。XGB稍微复杂点的公式推导过程应该属于目标函数最优值的推导过程那块,所以以下,我从头到尾手推了一遍,并解释了各部分的原因,如有疑问出,评论区or私信我,48小时内回复。
🦄剩余部分+面试高频考点,持续更新ing ~
🚀导航:
ID | 算法 |
---|---|
NO.1 | XGBoost直观理解 |
NO.2 | XGBoost原理讲解+目标函数最优值推导 (公式推导) |
NO.3 | XGBoost训练+优化策略 (原理讲解) |
NO.4 | XGBoost高频面试问题+答案 |
⭐ 以下穿插一些图片来源于XGB作者陈天奇的论文、PPT。
1、XGBoost直观理解
XGB和GBDT的思想其实相同,但XGB优化了几部分。所以可以说XGB (eXtreme Gradient Boosting) 是极致的GBDT。XGB也是由一堆的Cart组成。XGBoost之所以这么好,主要优化了以下几个方面:
1、目标函数引入树的复杂度起到正则化作用,可以有降低防过拟合的风险。
2、提出了一种加权分桶,减少计算量。
3、对稀疏数据进行默认划分,减少计算量。
4、对内存的优化、做了并行化处理
5、对CPU缓存的优化
6、对存储的优化
2、XGBoost原理讲解+目标函数最优值推导 (公式推导)
3、XGBoost训练+优化策略 (原理讲解)
4、XGBoost高频面试问题+答案
1、XGBoost和GBDT的相同点与不同点:
答:XGBoost(eXtreme Gradient Boosting)是极致的GBDT,是一种基于GBDT的算法或者说工程实现。
相同点:
- 都是基于Boosting思想的集成学习方法。
不同点:
- 1、XGB目标函数采用二阶导优化(泰勒二阶展开),GBDT则采用一阶导优化。
- 2、XGB目标函数加入了正则项缓解过拟合,GBDT没有。
- 3、XGB能够自动处理缺失值,GBDT不允许缺失值。
- 4、Block存储可以并行计算。
- 4、XGB更高效、灵活。轻便。
2、 xgboost的目标函数为什么要进行泰勒二阶展开?
答:相对于GBDT的一阶泰勒展开,XGBoost采用二阶泰勒展开,可以更为精准的逼近真实的目标函数。
3、xgboost支持自定义损失函数吗?有什么要求?
答:损失函数支持自定义,只需要新的损失函数二阶可导。
4、XGBoost目标函数中为什么要加入正则项?
答:XGB的目标函数中的正则项其实就是树的复杂度,加入这个正则项,相当于预剪枝,使得学习出来的模型不易过拟合。
5、xgboost如何处理缺失值?
答:对树中的每个非叶子节点,xgb可以自动学习出它的默认分裂方向。若某个样本该特征值缺失,会将其划入默认分支,对缺失值的处理方向如下:
- 在特征k上寻找最佳分割点,不会对该列特征缺失的样本进行遍历,而只对该列特征值为非缺失样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找分割点的时间开销。
- 在逻辑实现上,为了保证完备性,会将该特征值缺失的样本分别分配到左叶子结点和右叶子结点,两种情形都计算一遍后,选择分裂后增益最大的那个方向(左分支或是右分支),作为预测时特征值缺失样本的默认分支方向。
- 如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子结点。
6、xgb为什么可以并行训练?
答:
- XGBoost的并行,并不是说每棵树可以并行训练,XGBoost本质上仍然采用boosting思想,每棵树训练前需要等前面的树训练完成才能开始训练。
- XGBoost的并行,指的是特征维度的并行。在训练之前,每个特征按特征值对样本进行预排序,并存储为Block结构,在后面查找特征分割点时可以重复使用,而且特征已经被存储为一个个block结构,那么在寻找每个特征的最佳分割点时,可以利用多线程对每个block并行计算。
7、XGBoost都有哪些防止过拟合的设计?
答:为防止过拟合,XGB主要包含如下4个优化措施:
- 叶子节点个数+叶子节点权重的L2正则化
- 列抽样:训练的时候只用一部分特征(不考虑剩余的block块即可)
- 子采样:每轮计算可以不使用全部样本,使算法更加保守
- shrinkage: 可以叫学习率或步长,为了给后面的训练留出更多的学习空间
8、XGBoost如何评价特征的重要性?
答:XGBoost采用三种方法来评判XGBoost模型中特征的重要程度:
- weight :该特征在所有树中被用作分割样本的特征的总次数。
- gain :该特征在其出现过的所有树中产生的平均增益。
- cover :该特征在其出现过的所有树中的平均覆盖范围。