前言:集成学习体现了“More is always better”(多多益善)的思想,它是是目前机器学习的一大热门方向,所谓集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。
这张图片很清楚显示出其原理,假设需要预测的对象很大,每个模型可能只能处理其部分问题,多训练一些模型就能更有效率也更准确地得到预测结果。
目 录
1. Ensemble综述
2. Bagging
2.1 Bagging算法
2.2 组合base learner的方法
2.3 Combiantion时的剪枝方法
2.4 Bagging在聚类问题上的应用
2.5 Bagging在deep learning上的应用
3. Boosting
3.1 Boosting算法简介
3.2 AdaBoost
3.3 GBDT
3.4 XGBoost
4.Bagging与Boosting的比较
5.应用
1
Ensemble综述
(1)概念
- 训练多个模型解决同一问题,组合后模型的泛化能力很有可能变强。
- 即使某些分类器出错,其他分类器有希望将其纠正。
- 集成学习也被称为committee-based learning或者multiply classifier systems。
- 在竞赛和科研中有广泛应用。
(2)结构
结构非常简单,如图所示,第一步是训练多个分类器,第二步是将训练好的分类器组合起来输出结果。
- Base learner训练
- 各模型训练数据从最初数据中处理得到,算法不同,用到的数据可能不同,便会在原始数据中进行放回式抽样。
- base learner可以属于同一模型也可属于不同模型,这就决定了是使用bagging还是boosting的方法。
- base learner可以串行训练也可并行训练。
- 尽量使所得base learner存在差异性,尽可能地覆盖足够多的空间。
- Base learner组合(combination)
- 回归模型一般使用求平均方法,包括简单平均和加权平均。
- 分类模型一般使用投票表决法。
- 也可新建第二层模型对前面base learner的输出进行处理,可选择逻辑回归或神经网络。
(3)集成学习方法分类:
- 步骤1中Base learner训练方式不同。
- Bagging
Bagging是bootstrap aggregating的简写。先说一下bootstrap,bootstrap也称为自助法,它是一种有放回的抽样方法,目的为了得到统计量的分布以及置信区间。
Base learner并行训练,互相之间没有交流,
Base learner训练数据使用bootstrap aggregating方式获得。
- Boosting
提升方法(Boosting)是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。
Base learner串行训练,下一个learner如何训练与前面learner的表现相关,每一个base learner都是对上一个base learner地提升。
AdaBoost,GBDT,XGBoost
2.步骤2中base learner组合方式不同
求平均 averaging
投票 voting
新建模型处理 stacking
下面就来详细介绍Bagging和Boosting地方法。
2
Bagging
(1)Bagging算法流程
Bagging=Bootstrap AGGregatING
- Bootstrap:
自助采样法,从N个原有数据中采用放回的均匀采样
需要为每个base learner使用bootstrap采样一份数据
数据被抽取的个数服从参数为1的Poisson分布
采样得到的样本约占全部数据的1-1/e=63.2%
bootstrap采样使每个base learner的训练集交叉程度变小,有利于实现base learner的差异化
- Aggregating:
对生成base learner执行组合操作,得到最终组合模型
- Bagging算法
- 输入:
训练集D={(x1, y1), (x2, y2), …, (xm, ym)}
假设Base learner的训练模型为Lt(t=1,2,...,T)
Base learner的数目为T
- 过程:
for t = 1,…,T:
ht = Lt(Dbs) # Dbs由Bootstrap获得,不同base learner有不同Dbs
end
- 输出:
- 组合方法:
分类模型,对base learner的输出执行投票操作
回归模型,对base learner的输出执行取平均操作
也可以训练另一个模型处理所有base learner的输出
- base learner差异化:
极端情况下,完全相同base learner的组合无法产生性能提升;
Bootstrap为各base learner选择相对不同的训练数据是为了提升各base learner之间的差异;
模型误差由偏差bias和方差variance组成,bias取决于模型对训练数据的准确程度,variance取决于模型稳定程度,在步骤1训练base learner过程中,希望模型方差适当大一些;
例如正则化参数设小一些或者树剪枝时对叶子节点数的惩罚系数小一些。
(2)Bagging算法性能分析
- 回归模型分析:
因此使用集成学习所得函数H(x)的均方误差比所有base learner均方误差的平均值小。
可以看到base learner模型方差对于ensemble的提升效果:
base learner方差越大,均方误差的提升效果越明显
- 分类模型分析:
可以知道如果base learner h(x)在大部分的x上是order correct的,且base learner们的差异性很大,Bagging组合所得model将得到最优解。
(3)特殊的Bagging:随机森林
- 随机森林是具有代表性的集成学习方法,其base learner为决策树
- 随机森林使用bootstrap的方法对训练数据取样
- 随机森林在每棵决策树训练时的节点分解过程中,首先随机选可用feature的一个子集,并从中选择最优feature进行节点分解
- 随机森林不仅具备常规ensemble的行采样,还扩展性的采用了列采样,因此使得训练得到的决策树之间相关性更低,有利于提高集成学习效果。
随机森林算法中,虽然feature subset是随机选择的,但之后的split feature和split value的选择都具有确定性,因此存在一些随机森林的变种模型(更随机):
Extremely random tree:
随机选择一组可选feature子集
所有选中子集上随机挑选分解的阈值
选择一个表现最好的分解点
VR-tree
以a的概率按照正常的随机森林算法取得分裂的feature和阈值
以1-a的概率随机选择一个feature,并在其上随机选择一个阈值
3
Boosting
(1) 简介
Boosting方法称为提升方法,和Bagging方法最大的不同在于base learner时串行训练所得,并且下一个base learner以上一个base learner的表现作为生成模型的依据。
算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。
Boosting中有代表性的是AdaBoost(Adaptive boosting)算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。
GBDT(Gradient Boost Decision Tree)也是一种Boosting的方法,与AdaBoost不同,GBDT每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。
4
Bagging与Boosting比较
Bagging和Boosting采用的都是采样-学习-组合的方式,但在细节上有一些不同,如Bagging中每个训练集互不相关,也就是每个基分类器互不相关,而Boosting中训练集要在上一轮的结果上进行调整,也使得其不能并行计算,Bagging中预测函数是均匀平等的,但在Boosting中预测函数是加权的
在算法学习的时候,通常在bias和variance之间要有一个权衡。bias与variance的关系如下图,因而模型要想达到最优的效果,必须要兼顾bias和variance,也就是要采取策略使得两者比较平衡。
从算法来看,Bagging关注的是多个基模型的投票组合,保证了模型的稳定,因而每一个基模型就要相对复杂一些以降低偏差(比如每一棵决策树都很深);而Boosting采用的策略是在每一次学习中都减少上一轮的偏差,因而在保证了偏差的基础上就要将每一个基分类器简化使得方差更小。
5
集成学习的应用
集成学习目前在全球各大机器学习、数据挖掘竞赛中使用非常广泛,其概念和思想也风靡学界和工业界。尤其在金融风控上发挥着重要作用。
例如针对互联网行为、APP、运营商等不同领域的数据采用最合适的机器学习或深度学习模型进行处理,就可以得到不同Feature Domain诸如信贷历史、消费能力、社会信用等子模型。我们再将其通过XGboost、LightGBM等最先进的集成学习模型框架进行输出,就可以在反欺诈、违约概率预测、风险定价等风控业务上都可以得到广泛的应用和提升。
这不仅解决了机构不同维度/领域数据使用的难题,因为集成学习框架可以支持不同类型模型算法作为子模型,同时也帮助金融客户实现了更高效准确的针对稀疏、高维、非线性数据的建模过程,大大简化繁琐的特征工程,使得我们的模型具有更强的容错和抗扰动能力。
值得一提的是,集成学习模型框架也更易于实现领域知识迁移,单独领域的子模型可以快速迁移应用到新业务领域,帮助我们金融机构实现新金融业务的快速成型和持续迭代优化。此外,不同数据领域的特征自动抽取框架,与集成模型框架紧密结合,大幅度提升模型性能,在应用层,复杂的集成模型输出结果通过LIME模型解释器也可以向风控专家清晰地解释原因,使得预测结果不再黑盒和不可信。
结语:在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。