😄 搞竞赛天天无脑XGBoost、LightGBM、CatBoost,但不知道原理也少许有点尴尬了~,所以打算深入学习下这三大竞赛杀器的原理,整理下面试中一些高频问题。之前有决策树,GBDT的基础了,再学学这三个和随机森林,集成学习之树模型应该差不多了。
🚀 看了一圈网上关于讲解XGB原理的基本都是到处粘贴公式凑一起,说这公式就是通过这样来的,那样来的,没有详细的推导过程及详细的解释。XGB稍微复杂点的公式推导过程应该属于目标函数最优值的推导过程那块,所以以下,我从头到尾手推了一遍,并解释了各部分的原因,如有疑问出,评论区or私信我,48小时内回复。
🦄剩余部分+面试高频考点,持续更新ing ~
ID | 算法 |
---|---|
NO.1 | XGBoost直观理解 |
NO.2 | XGBoost原理讲解+目标函数最优值推导 (公式推导) |
NO.3 | XGBoost训练+优化策略 (原理讲解) |
NO.4 | XGBoost高频面试问题+答案 |
⭐ 以下穿插一些图片来源于XGB作者陈天奇的论文、PPT。
XGB和GBDT的思想其实相同,但XGB优化了几部分。所以可以说XGB (eXtreme Gradient Boosting) 是极致的GBDT。XGB也是由一堆的Cart组成。XGBoost之所以这么好,主要优化了以下几个方面:
1、目标函数引入树的复杂度起到正则化作用,可以有降低防过拟合的风险。
2、提出了一种加权分桶,减少计算量。
3、对稀疏数据进行默认划分,减少计算量。
4、对内存的优化、做了并行化处理
5、对CPU缓存的优化
6、对存储的优化
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可以自动学习出它的默认分裂方向。若某个样本该特征值缺失,会将其划入默认分支,对缺失值的处理方向如下:
6、xgb为什么可以并行训练?
答:
7、XGBoost都有哪些防止过拟合的设计?
答:为防止过拟合,XGB主要包含如下4个优化措施:
8、XGBoost如何评价特征的重要性?
答:XGBoost采用三种方法来评判XGBoost模型中特征的重要程度: