面试题目的收集分别参考以下博客,但是回答的形式可能有所不同
https://blog.csdn.net/weixin_38753230/article/details/100571499
它是极度的gradient boostIng算法,基于可以二阶导的任何损失函数的前向分布式的学习算法,可以用于分类和回归。基于GBDT和正则化的思想,加入特征属性的加权分割点法,并行处理,缺失值处理以及硬件的优化过程,使其算法在泛化能力和精确度上有了较好的平衡,并且运算时间有了大幅度提升
(1) 初值的设置:XGBoost初值是任何常数,无论回归还是分类默认0.5,GBDT是使得所有数据损失函数和最小的值,回归和分类的初值不同
(2)目标函数:XGBoost只要是可以进行二次泰勒展开的损失函数都可以,另外在基本损失函数的基础上增加了对叶子节点数目的L1正则项和对预测结果的L2正则项;GBDT一般回归时满足一次导就可以,分类一般要满足二次导
(3)基学习器:XGBoost有其自己独特的建立基学习器的方法,建立及学习的过程是以最小化目标函数为指导思路,利用similarityScore的指标取计算gain从而确定最优的基学习器的过程,这个过程支持列抽样,和随即森林类似。GBDT的基学习器就是CART决策树,也就是利用GINI系数或MSE获取最优子树
(4)防止过拟合的手段:除了和GBDT相同的方式,如增加学习率,设置最大叶子点数等方式之外,XGBoost通过两个正则项使得算法在产生树的时候就进行了剪枝操作,
(5)算法效率:XGBoost对特征可以进行抽取,对每个特征属性的划分采用加权的分位点法,对特征之间的分割点的计算可与i采用并行的方式,在硬件处理上也有一定的优化。GBDT只是用低纬度的数据,难以并行实现,维度高的时候,计算复杂度大
(6)缺失值的处理:XGBoost的缺失值处理是在划分分割点的时候,只利用无缺失值的数据,然后将缺失值的数据分别方道左右节点中,计算gain,就好比将一个树变为两个树,对所有的分割点都采用这种方式,从而得到最好的那个树。对有缺失值的测试数据也就采用默认的缺失值的位置预测走向;GBDT的缺失值处理时根据CART的思路来的,利用没有缺失值的数据进行操作之后,将有缺失值的数据按照左右子树的数据个数的概率分别放进两个树中,也就是说这个CART的建立过程从考虑每个叶子节点的数的个数变成了每个叶子节点的数的权重;
展开越多越准确呗...
不同特征的分割点的选择方式是一样的,可以进行多线程处理
(1)不同特征之间的并行处理
(2)加权分位点法划分分割点
(3)硬件方面的加速
(1)目标函数中的对叶子节点数目的L1正则化,当系数大于0时可以有剪枝的功效,可以减少叶子节点的数目。L2的正则化,当系数大于0的时候就算L1的正则化不存在,也可以通过降低similarityScore和Gain来提高了树继续分裂的要求。L2的系数越大,对读个观测点的敏感性越小,从而减少过拟合的风险
(2)列抽样和子采样
(3)每个学习器增加学习步长
https://blog.csdn.net/Lee_Yu_Rui/article/details/107367221 最后一段
8. XGBoost中叶子结点的权重如何计算出来(输出值)?
根据最小化所有点的目标函数值,将目标函数二次泰勒展开,求使得目标函数和最小的位置对应的输出值的大小
分别通过预剪枝和后剪枝的操作停止。还有达到一定精度等,预剪枝比如:最大叶子点,最大深度,每个叶子点中的最少样本数
,还有就是gain小于0. 后剪枝:通过增大L1正则化的系数
相同:都是集成算法,采用多棵树和一定的结合策略产生强学习器的过程
不同点:
主要的区别集中在boosting和bagging
目的: RF是bagging族的算法,也就是说每个学习器互不影响,目的是降低方差;GBDT时boosting族的算法,就是每个学习器相互影响,前一个学习器的结果往往对后学习器的情况有制约作用,目标是降低偏差
采样方法:数据采样时bagging中有放回的随机采样,在此基础上RF又增加了特征随机选择的第二重随机性;boosting中GBDT采用全部数据进行树的训练
处理形式:RF可以并行,GBDT串行
结合策略:RF简单平均和简单投票 GBDT 前向模型的加权
处理数据:RF可以处理高纬度数据,GBDT一般用于低纬度数据