集成学习非常重要,以下题目非常全!
- 老铁们✌,重要通知🙌!福利来了!!!😉
- 10.集成学习
-
- 10.1 Boosting(提升法)
-
- 10.1.1 梯度提升(GBDT)
- 10.1.2自适应提升(AdaBoost)
- 10.1.3极端梯度提升(XGBoost)
-
- 10.1.3.1 XGBoost使用泰勒二阶展开的原因?
- 10.1.3.2 XGBoost可以并行训练的原因?
- 10.1.3.3 XGBoost为什么快?
- 10.1.3.4 XGBoost防止过拟合的方法?
- 10.1.3.5 XGBoost如何处理缺失值?
- 10.1.3.6 为什么XGBoost相比某些模型对缺失值不敏感?
- 10.1.3.7 XGBoost如何处理不平衡数据?
- 10.1.3.8 XGBoost中叶子结点的权重如何计算出来?
- 10.1.3.9 XGBoost中的一棵树的停止生长条件?
- 10.1.3.10 比较LR和GBDT,说说什么情景下GBDT不如LR?
- 10.1.3.11 XGBoost在什么地方做的剪枝? 如何进行剪枝?
- 10.1.3.12 XGBoost如何选择最佳分裂点?
- 10.1.3.13 XGBoost的Scalable性如何体现?
- 10.1.3.14 XGBooost参数调优的一般步骤?
- 10.1.3.15 XGBoost模型如果过拟合了怎么解决?
- 10.1.3.16 XGBoost如何寻找最优特征?是有放回还是无放回?
- 10.1.3.17 XGBoost如何分布式?特征分布式和数据分布式? 各有什么问题?
- 10.1.3.18 为什么XGBoost的近似算法比lightgbm慢很多呢?
- 10.1.4 LightGBM
- 10.1.5 CatBoost
- 10.2 Bagging(套袋法)
- 10.3 Bagging vs Boosting
- 10.4 随机森林 vs GBDT
- 10.5 AdaBoost vs GBDT
- 10.6 XGBoost vs GBDT
- 10.7 XGBoost vs LightGBM
老铁们✌,重要通知🙌!福利来了!!!😉
【计算机视觉 复习流程剖析及面试题详解 】
【深度学习算法 最全面面试题(30 页)】
【机器学习算法 最全面面试题(61页)】
10.集成学习
定义:通过结合多个学习器(例如同种算法但是参数不同,或者不同算法),一般会获得比任意单个学习器都要好的性能,尤其是在这些学习器都是"弱学习器"的时候提升效果会很明显。
调参学习链接
10.1 Boosting(提升法)
可以用于回归和分类问题,它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中加权累加到总模型中;如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升。
梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合
提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部最小值。
提升的理论意义:如果一个问题存在弱分类器,则可以通过提升的办法得到强分类器。
10.1.1 梯度提升(GBDT)
DT表示使用决策树作为基学习器,使用的CART树。
GBDT是迭代,但GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型,其弱学习器限定了只能使用CART回归树模型。 残差=(实际值-预测值)
10.1.1.1 GBDT是训练过程如何选择特征?
GBDT使用基学习器是CART树,CART树是二叉树,每次使用yes or no进行特征选择,数值连续特征使用的最小均方误差,离散值使用的gini指数。在每次划分特征的时候会遍历所有可能的划分点找到最有的特征分裂点,这是用为什么gbdt会比rf慢的主要原因之一。
10.1.1.2 GBDT如何防止过拟合?由于gbdt是前向加法模型,前面的树往往起到决定性的作用,如何改进这个问题?
一般使用缩减因子对每棵树进行降权,可以使用带有dropout的GBDT算法,dart树,随机丢弃生成的决策树,然后再从剩下的决策树集中迭代优化提升树。
GBDT与Boosting区别较大,它的每一次计算都是为了减少上一次的残差,而为了消除残差,可以在残差减小的梯度方向上建立模型;
在GradientBoost中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法。
10.1.1.3 梯度提升的如何调参?
1.首先我们从步长(learning rate)和迭代次数(n_estimators)入手。
开始选择一个较小的步长来网格搜索最好的迭代次数。将步长初始值设置为0.1;
2.找到了一个合适的迭代次数,对决策树进行调参。首先对决策树最大深度max_depth和内部节点再划分所需最小样本数(min_samples_split)进行网格搜索。
再对min_samples_split和叶子节点最少样本数(min_samples_leaf)一起调参。
得出: {‘min_samples_leaf’: 60, ‘min_samples_split’: 1200},
3.对比最开始完全不调参的拟合效果,可见精确度稍有下降,主要原理是我们使用了0.8的子采样,20%的数据没有参与拟合。
需要再对最大特征数(max_features)进行网格搜索。
10.1.1.4 GBDT对标量特征要不要one-hot编码?
从效果的角度来讲,使用category特征和one-hot是等价的,所不同的是category特征的feature空间更小。微软在lightGBM的文档里也说了,category特征可以直接输入,不需要one-hot编码,准确度差不多,速度快8倍。而sklearn的tree方法在接口上不支持category输入,所以只能用one-hot编码。
10.1.1.5 为什么GBDT用负梯度当做残差?
1.负梯度的方向可证,模型优化下去一定会收敛
2.对于一些损失函数来说最大的残差方向,并不是梯度下降最好的方向,倒是损失函数最小与残差最小两者目标不统一
10.1.2自适应提升(AdaBoost)
定义: 是一种提升方法,将多个弱分类器,组合成强分类器。
Adaboost既可以用作分类,也可以用作回归。
算法实现:
1.提高上一轮被错误分类的样本的权值,降低被正确分类的样本的权值;
2.线性加权求和。误差率小的基学习器拥有较大的权值,误差率大的基学习器拥有较小的权值。
10.1.2.1 为什么Adaboost方式能够提高整体模型的学习精度?
根据前向分布加法模型,Adaboost算法每一次都会降低整体的误差,虽然单个模型误差会有波动,但是整体的误差却在降低,整体模型复杂度在提高。
10.1.2.2 使用m个基学习器和加权平均使用m个学习器之间有什么不同?
Adaboost的m个基学习器是有顺序关系的,第k个基学习器根据前k-1个学习器得到的误差更新数据分布,再进行学习,每一次的数据分布都不同,是使用同一个学习器在不同的数据分布上进行学习。
加权平均的m个学习器是可以并行处理的,在同一个数据分布上,学习得到m个不同的学习器进行加权。
10.1.2.3 adaboost的迭代次数(基学习器的个数)如何控制?
一般使用earlystopping进行控制迭代次数。