集成学习笔记—袁博《数据挖掘》

 原文链接:https://blog.csdn.net/dujiahei/article/details/1030418

袁博老师视频链接:整装待发-数据挖掘:理论与算法 清华大学(袁博)-EEWORLD大学堂

最近在复现一个讯飞的数据竞赛,里面用到了集成学习算法框架中的xgboost,还有lightGBM等等,想着先把集成学习的大致框架梳理一下,以下主要参考袁博的《数据挖掘》课程集成学习那节。

1.为什么需要集成学习(ensemble learning)?

     

集成学习不是一个算法,而是一个大的方向。“三个臭皮匠顶个诸葛亮”,是大多数人开篇介绍集成学习的经典语句。因为个体决策容易失误,所以需要群策群力,来尽可能的做出“有用”的判断,“Essentially, all models are wrong, but some are useful.”还有一种场景是可能会遇到model selection 的问题,在神经网络中,不同的初始值得到的结果可能是不一样的,9个10个神经网络怎么办呢?集成学习就可以带来帮助。

对于单个的机器学习算法,我们已经知道的有Decision Trees, Neural Networks, Support Vector Machines,现在需要的就是策略性的把他们结合在一起(The process by which multiple models are strategically generated and combined in order to better solve a particular Machine Learning problem.)下图分别是机器学习的整体框架,对分类器集成学习的简单图示,集成学习的效果简单图示,从下图最右可以看出,结合三种分类器,我们可以得到更好的分类效果,分类线也更平滑了。或者,复杂的分类界面也可以进行分割来求解。

  

2. 如何进行组合?

那么如果结合各个分类器的输出呢?首先,我们最容易想到的就是平均Averaging,然后我们可以想到让不同的分类器进行投票,投票其实又包括了少数服从多数决定,但是每个分类器所起到的效果不一定一样,所以还可以采用对不同分类器的结果进行加权的多数投票。再进一步,我们可以让一个分类器来学习如果组合(combine),而不是简单的加权。

集成学习有一个假设,是为了获得更好的效果,在集成学习使用的分类器中需要注意 “多样化(Diversity)”,这些分类器是要有所不同的,否则为什么要用辣么多,一个就可以啦。什么是不同呢?可以是不同的分类器,也可以是不同的训练过程(比如参数、训练集、特征)。并且,可以使用很多的弱分类器(例如Stumps,只有树桩的决策树),强分类器其实会更复杂,效果不一定好。那怎么样可以选择不同的训练数据,但是又服从相同的分布呢?Boostrap Samples是个好办法,即有放回的采样。

3. 分类

3.1 Bagging(套袋法,bootstrap aggregating,并行生成分类器)

Bagging 就是基于Boostrap的一种分类器,例如50次采样,然后训练50个分类器,然后进行投票。

注:机器学习集成算法中的Bagging装袋算法就是基于bootstrap的一种算法,它其实和袋子没有什么关系,这么叫只是为了好听顺口和便于记忆,它的全称是Bootstrap aggregating自助聚合算法所以看过本篇文章的你在以后再次看到Bagging时,希望你能在头脑中能立刻反应出:Bagging中打头的B代表Bootstrap--自助法,后面的agging代表aggregating--聚合,连起来就是“自助聚合算法”。

来源:机器学习中的bootstrap到底是什么? - 知乎 (zhihu.com)

  

例如以决策树为例,则有下面的结果:

3.1.1 Random Forest

长得不一样的决策树进行组合,来构成一个“森林”。每次对训练集数据进行随机选择,选中的2/3作为训练集,没有选中的作为测试集,不需要人为的选择,所以在训练的时候就可以得到树的好坏。一般来说是500-5000,不局限于CART。

随机森林RF:随机森林是一种集成算法(Ensemble Learning),它属于Bagging类型,通过组合多个弱学习器(决策树),对弱学习器的结果投票或取均值得到整体模型的最终结果,使得整体模型的结果具有较高的精确度和泛化性能。

传统的决策树会对所有的属性进行分裂,但是随机森林每次只对一部分属性进行分裂,这样就可以保证每棵树的属性也不一样,也不需要担心过学习,不需要进行特征选择。需要的参数很少。

No need for prior feature selection的意思:在属性选择上,如果有100个属性,直接把100开根号,随机选择10个属性

3.2 Stacking

不同的分类器性能不同,所以不同分类器的权重也应该是不同的,那么如何学习这些权重呢?可以考虑Stacking。在Bagging中,得到了k个分类器,然后送入测试集,进行投票即可。但是在Stacking中,每个分类器的输出会再送到一个分类器中,所以称为Stacking(堆叠)。它会根据label来学习每个分类器应该分配的权重是多少。这样得到的权重,通常会认为是更精准的。所以Stacking是经过了两层的训练,第一层得到Base classifier,第二层则学习如何分配权重。

Stacking可以看作是bagging的升级版,Bagging输出的权重是一样的,而Stacking输出的权重是可以学习的

3.3 boosting

boosting和Bagging最大的区别在于boosting是串行的,再Bagging中所有的分类器可以同时生成,但是boosting不可以,是需要一个个生成的,根据前一个分类器的性能生成下一个。简单图示如下,第一次训练后得到C1,然后用剩下的数据测试C1,看C1对于哪些样本分错了,然后将分错的样本重点来训练C2。C1分错的东西,是C2要特别学习的,所以他们是互相弥补的。然后将C1、C2同时进行测试,看有哪些判断不一致的样本,而这些样本是C3需要特别学习的。所以总是分错的样本的权重会越来越大。这个时候对于测试X,送入3个分类器,进行判断。

Boosting对分类器要求很低,只要高于随机水平即可。

3.3.1 Adaboost

AdaBoost是Boosting中最具代表性的一个算法,它在数学上能证明很多东西,比如权重α是可以用数学推导出来的,它是数据挖掘算法中的十大算法之一。

如下图所示,每次都会增大错分样本的权重。

Adaboost是可以从数学上证明训练误差越来越小的,最后趋近于零。模型误差的上限可以用数学公式表达出来。

AdaBoost采用了贪心策略,所以每次最小化当前的Z。Z是每个样本的权重,所以如果样本分配的权重小,表明大部分都分类正确,所以样本权重越来越小,可以代表训练误差越来越小。

那么如何最小化Z呢?根据y是否等于h进行拆分,然后求导。

Adaboost总结:

优点:简单,容易实施;几乎不用调参,只用设置有多少个基础分类器(一般50个);可以证明模型误差的上界趋近于0;避免过拟合。

缺点:权值α是局部最优的(因为贪心算法);最陡下降;对噪声敏感。

3.3.2 Region Boost

如果问甲一个问题靠不靠谱,其实取决于这个问题是什么?同样,对于不同的测试样本,也应当具有不同的权重。根据输入X的不同,会有一个特定的权重,所以不同的样本进来,不同的分类器发言权是不一样的。因此与Adaboost的固定权重,这里是动态的权重,利用不同的区域信息来调整不同的权重。

在训练的时候,对三角形和圆形进行分类,发现上面的分错了,下面的分对了,那么如果进来的测试集位于上面的区域,则使用下面区域对应的分类器,降低上面分类器的权重,所以是在对不同分类器的可信度进行了建模。 

采用K近邻,在高维空间中,欧式距离是不太合适的,所以可以采用下面的方法来找测试样本的位置,然后根据位置来反推权重。

仅从训练误差来看,Adaboost 似乎更好

但是模型更重要的是测试误差,从测试误差来看,RegionBoost的效果是更好的。

3.3.3 GBDT(Gradient Boosting Decision Tree)、XGBoost (eXtreme Gradient Boosting)、LightGBM

boosting的其他算法,下篇博客再介绍。

3.4 bagging vs boosting

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值