算法面经总结(20)集成学习

集成学习是有监督学习

数据集大:划分多个小数据集,学习多个模型进行组合

数据集小:利用Bootstrap方法进行抽样,得到多个数据集,分别训练多个模型进行组合

1、bagging、boosting

     bagging,利用bootstrap方法从整体数据集中采取有放回抽样得到N个数据集,从每个数据集中学习出一个模型,最后分类采用N个模型预测投票的方式,回归采取平均

     boosting,用于减小偏差的方法,主要也是学习一系列弱分类器,但是串行的方式。三要素:损失函数、弱学习器、强学习器。

区别:bagging模型间互不关联,boosting有关联

           预测结果是均等                加权

2、常见boosting算法

(1)DB-提升树(adaboost+决策树)

        一般回归问题损失函数用平方损失函数,分类用指数函数。

(2)GDBT

        以分类树或回归树(决策树)为基本分类器的提升方法。boosting算法都是一个迭代的过程,每一次新的训练都为了改进上一次的结果。GBDT核心在于:每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得到真实值的累加量。其适用面广,离散或连续的数据都可以处理,几乎可用于所有回归问题(线性/非线性),也可用于二分类问题(设定阈值,大于阈值为正例,反之为负例)。缺点是由于弱分类器的串行依赖,导致难以并行训练数据。

 (3)xgBoost

        是GBDT的高效实现,基学习器除了可以是CART也可以是线性分类器。

         xgboost在目标函数中显式的加上了正则化项,基学习为CART时,正则化项与树的叶子结点的数量和叶子节点的值有关

        GBDT中使用LOSS Function对f(x)的一阶导数计算出伪残差用于学习生成fm(x),xgboost不仅使用到了一阶导数,还使用二阶导数

        上面提到CART回归树中寻找最佳分割点的衡量标准是最小化均方差,xgboost寻找分割点的标准是最大化,lambda,gama与正则化相关

 根据泰勒展开,得到以下表示

 然后选出分裂候选集,就可以改写函数,最后得到

优点:速度快、效果好、处理大规模数据、自定义损失

缺点:参数过多,不适合处理超高维数据

 (4)lightGBM

        是对xgBoost的改进。对于特征选取,从预排序改为使用直方图算法,将连续的浮点特征离散成k个离散值,并构造宽度为k的直方图。然后遍历训练数据,统计每个离散值在直方图中的累计统计量。在进行特征选择时,只需要根据直方图的离散值,遍历寻找最优分割点。

注:使用bin替代原始数据相当于增加了正则化,数量越少,惩罚越严重,但是许多数据细节特征被忽视

        决策树的生长策略变为leaf-wise,xgBoost能同时分类同一层的叶子节点,从而进行多线程优化, 不容易过拟合,但计算开销大。

        lightGBM每次从所有叶子中找到分裂增益最大(一般也是数据量最大)的一个叶子,然后分裂,如此循环。缺点是生长出比较深的树,容易过拟合,因此要设置最大深度。

(5)adaboost

        初始,所有数据被赋予同样的权重

        训练弱分类器,若被准确分类的权重越小,分错的权重增大。然后进入下一轮训练,迭代

        最后整合所有弱分类器为一个强分类器

3、常见bagging算法

(1)随机森林(RF)

        过程:

       (a)训练集大小为N,随机有放回地抽取N个训练集样本作为该树的训练集

       (b)如果每个样本的特征维度为M,指定一个常数m<<M,随机从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的

       (c)每棵树都尽最大程度生长,且无剪枝

分类错误率与两个因素有关:任意两棵树的相关性,越大,错误越多

                                               每棵树的分类能力,越强,错误越小

 关键是m的选取

如何评估特征重要性

袋外错误率(没有参与过训练集的样本)

特点:极好的准确率、有效运行在大数据集上、能处理高维样本、评估各特征的重要性、能处理缺失值

1) Decrease GINI: 对于回归问题,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去左节点的方差VarLeft和右节点的方差VarRight。
2) Decrease Accuracy:对于一棵树Tb(x),我们用OOB样本可以得到测试误差1;然后随机改变OOB样本的第j列:保持其他列不变,对第j列进行随机的上下置换,得到误差2。至此,我们可以用误差1-误差2来刻画变量j的重要性。基本思想就是,如果一个变量j足够重要,那么改变它会极大的增加测试误差;反之,如果改变它测试误差没有增大,则说明该变量不是那么的重要。

处理缺失值:

对于训练集,同一个class下的数据,如果是分类变量缺失,用众数补上,如果是连续型变量缺失,用中位数补。

4、lightGBM和xgBoost、GBDT的区别

GBDT:梯度提升树,主要思想:在目标函数所在的空间中做梯度下降(平方损失的梯度正好为拟合的残差),即把待求函数模型当作参数,每一步要拟合目标函数关于上一步获得模型的梯度,从而参数朝最小化目标函数的方向更新。

xgBoost:与GBDT区别是通过对目标函数进行二阶泰勒展开,从而求出下一步要拟合的树的叶子节点权重,从而根据损失函数求出每一次分裂节点的损失减小的大小,从而根据分裂损失选择合适的属性进行分裂。同时在损失函数中加入了模型复杂度的正则项。

两者区别:传统GBDT以CART树作为基学习器,xgBoost还支持线性分类器

                        只用一阶导数                                用到了一阶导数、二阶导数,还加入了正则项

                  在每轮迭代使用全部数据                     支持对数据采样

                     没有对缺失值处理                               可以自动学习出它的分裂方向

lightGBM:基本原理与xgBoost相同

区别:xgBoost采用level-wise的分裂策略(对每一层所有节点作无差别分裂)

           lightGBM采用leaf-wise的分裂策略(当前所有叶子节点选择分裂收益最大的)

5、xgBoost的block结构

        预先对数据进行排序,然后保存为block结构,后面迭代中重复使用这个结构,大大减小计算量。

6、RF和GBDT区别

相同点:都是由多棵树组成的,最终结果都是由多棵树决定

区别:随机森林可以是分类树、也可以是回归树,而GBDT只由回归树组成

           并行(bagging)                                                串行(boosting)

           结果是多棵树决定                                                多棵树累加之和

          对异常值不敏感                                                       敏感

               不需要进行数据预处理,归一化                        需要进行归一化

7、GBDT适合处理大规模特征吗

        不合适。一方面可能只有较少特征有作为划分特征的机会,另一方面每次选择特征划分都要考虑所有特征性能不好,

8、GBDT与提升树的关系

        提升树每次提升都是靠上次预测结果与训练数据的label值差作为新的训练数据进行重新训练,GDBT则是将残差计算替换成了损失函数的梯度方向,将上一次预测结果带入梯度中求出本轮的训练数据(在生成新的训练数据时使用方法不同)

9、xgBoost怎么处理缺失值

        把缺失值当作稀疏矩阵处理,本身在节点分裂时不考虑缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的哪一个。测试时出现,默认分到右子树。

10、xgBoost为什么要二阶展开

        因为泰勒展开的本质是尽量去模拟一个函数,二阶泰勒展开可以近似大量损失函数,可以统一损失函数的求导形式以支持自定义函数。

        且二阶展开本身就能让梯度收敛更快且准确

11、xgBoost处理过拟合

        降低模型复杂度,只有当split使得loss的减少量大于阈值时,树才会split

        增加随机性,随机采样数据,随机采样特征

        设置early stop机制

 以上内容均来源于各个版主、牛客网总结

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值