集成学习介绍
这篇文章主要讲解集成学习三种方法。集成学习(Emsemble Learning)是通过结合几个模型的元算法(meta-algorithm),使得最后的表现比任何一个模型好。在Kaggle,集成学习是取得高排名的不二法宝。本文介绍集成学习的三种模式,以便帮助读者对自己的最后模型进行决策。这三种方法以及他们的效果分别是:
- Bagging:减少 variance
- boosting: 减少 bias
- stacking:增强预测效果
1.bagging
Bagging 是 bootstrap aggregation的缩写。依据有放回的随机抽样构造的n个采样集,我们就可以对他们分别进行训练,得到n个弱分类器,然后根据每个弱分类器返回的结构,我们可以采用一定的组合策略得到我们需要的强分类器。
Bagging已经有很广泛的应用,例如random forest就是把n个decision tree进行bagging,然后通过投票选出最可能的结果。
为什么bagging可以降低variance?这里打个比方:
一个班级有50个人,如果这个50个人同时朗读,你会觉得对你注意力造成影响。因为他们声音的variance很大。variance衡量的是每个时间点的幅度与总体均值的关系。如果你把他们齐读的声音作为波形图,你会发现波形非常抖,离中轴很远,也就是variance非常大,大概是这样的。
但如何他们是自由读呢?很有可能的是正负波形有一部分抵消,然后各种声音混合,产生这样的声波:
在bagging中,单个人说话的幅度各自产生variance,但加起来总的bias没降低,也就是分贝其实并没降低。
2.boosting
boosting是一个迭代的过程,用来自适应的改变训练样本的分布,使得弱分类器聚焦到那些很难分类的样本上,它的做法是给每个训练样本赋予一个权重,在每一轮的训练结束时自动调整权重。
boosting方法代表的算法有Adaboost, GBDT, XGBoost算法
boosting的算法流程如图:
最常用的方法是AdaBoost[1],是adaptive boosting的简称,为了使得本文可读性增加,我把这Adaboost单独写一篇文章,具体可以参考
桔了个仔:AdaBoost算法以及公式傻瓜式一步一步超详细讲解带示例zhuanlan.zhihu.com
比喻一下,大家做过作业吧,有收集过错题本吗?今天考试我这道题做错了,我把它记在错题本里,下次考试前,我就单独翻开错题本单独做一遍。如果下次考试做对了,就从错题本里删除,否则,在错题本里把这道题再做一次。这样每次下去,你的考试成绩就很可能提高。Boosting就是这样的原理。
3.Stacking
stacking的算法如上图。其实和和bagging不同的是,stacking通常是不同的模型。
第一步,有T个不同模型,根据数据,各自独立训练。每个模型输出结果为 ,其中t= 1,2,3...T
第二步,根据每个模型预测,创建新的『训练集』,训练集的数据(X)是预测结果,Y是实际结果。
第三步,再训练一个classifier,这里叫meta-classifier,来从各个预测中再生成最后预测。
和bagging有点相似,不一样的是:
- bagging每个classifier其实是同一种模型
- bagging每个bag用部分数据训练,stacking每个classifier都用了全部训练数据
个人实践,如果第三步没有足够训练数据,可以取平均。如果有足够数据,可以用线性回归,毕竟数据维度有点太低。如果有读者有更好实践,请大声在评论区喊出来。
boosting和bagging的区别:
- 解决的问题不一样。boosting是解决基学习器欠拟合的问题,bagging是解决基学习器过拟合的问题。所以,Boosting的基学习器都是弱学习器,而bagging的学习器都是强学习器。
- Bagging的各个基学习器是独立的,可以并行计算,而Boosting是串行的,不可以并行计算。
- Bagging的最终的结果是平均的,Boosting对每一个基学习器权重不同。
AdaBoost(Adaptive Boosting)训练过程
- 刚开始训练时对每一个训练样本赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重。 也就是让学习算法在每次学习以后更注意学错的样本。
- 基于调整后的样本训练下一个基学习器,如此反复,知道基学习器数量达到事先制定的值T。
- 将这T个基学习器进行线性加权组合。
指数损失函数。
最常用的基分类器是决策树,为什么?
- 决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。
- 决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。
- 数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外, 在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性, 很好地引入了随机性。
除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型 也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始 权值等方式引入随机性。
GBDT
GBDT的优点:
- 预测阶段基模型是并行计算的。
- 它在分布稠密的数据集上,表达能力和泛化能力都很好(拟合能力强和方差小)。
- 它的基模型是决策树,具有较强可解释性,且不需要对数据归一化等预处理。
GBDT的缺点:
- 它的训练过程是串行的,无法并行,速度问题。
- 在高维稀疏数据集上,不如神经网络。
- 在文本分类的时候表现不太好。
GBDT和XGBOOST的区别和联系:
- GBDT是一个算法,XGBOOST是GBDT的工程实现。
- 当使用CART作为基模型时,XGBOOST显式地加入了正则项。
- GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代 价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
- GBDT的基学习器只能是CART,但XGBOOST还可以使用线性分类器等多种类型的基分类器。
- GBDT训练时直接使用全部数据集,XGBOOST则使用了类似随机森林的采样策略。
- GBDT对缺失值没有进行处理,XGBOOST能自动学习出缺失值的处理策略。