引言:在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都比较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好全面的强监督模型,集成学习潜在的思想即便某一个弱分类器得到了错误的预测,其它的弱分类器也可以将错误纠正回来。
集成学习在各个规模的数据及上都有很好的策略。
数据集大:划分成多个小数据集,学习多个模型进行组合。
数据集小:利用Boostrap方法进行抽样,得到多个数据集,分别训练多个模型再进行组合。
1. 集成学习的分类
集成方法可以分类为:Bagging/Boosting/Stacking/Blending。也可以分类为串行集成方法和并行集成方法。串行模型的原理是通过基础模型的独立性,然后通过平均能够较大地降低误差。大部分集成模型都是通过一个基础学习算法来生成一个同质的基础学习器,即同类型的学习器,也叫同质集成。而异质集成,为了集成后的结果表现最好,异质基础学习器需要尽可能准确并且差异性够大。下面我们就分别了解四种集成学习框架。
同质集成中,个体学习由相同的学习算法生成,个体学习器称为基学习器。
异质集成中,个体学习器由不同的学习算法生成,个体学习器称为组件学习器。
要求:
(1)个体学习器要好于随机猜测的结果。
(2)个体学习器要相互独立。
第一个条件相对来说比较容易实现,在当前问题下训练一个模型,结果比瞎猜的结果好就行了。第二个条件是集成学习研究的核心问题。每个个体学习器学习的都是同一个问题,所以个体学习器不可能做到完全相互独立。想想小时候,老师让你发表不同的观点,想想写论文的时候找创新点,人都很难做到这样一件事情,何况它只是一个小小的学习算法。
1.1 Bagging
Bagging是bootstrap aggregating的简写。先说下boorstrap(即自助法),它是一种有放回的抽样方法,目的是为了得到统计量的分布以及置信区间。具体步骤如下:
(1)在训练数据集中随机采样,所谓的随机采样(bootstrap)就是从我们的训练集里面采集国定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。对于我们的Bagging算法,一般会随机采集和训练集样本数m一样个数的样本。这样得到的采样集和训练集样本的个数相同,但是样本内容不同。如果我们对有m个样本训练集做T次的随机采样,则由于随机性,T个采样集各不相同。
(2)训练一个集模型,对不同的子集进行训练。得到T个基模型。
(3)T个基模型对测试数据进行预测,得到预测结果。
(4)将T中结果综合起来。分类任务通常使用投票的方式得出结果,回归任务用评价的方式得到结果。
在Bagging方法中,利用bootstrap方法从整体数据集中采取有放回抽样得到N个数据集,在每个数据集上学习出一个模型,最后的预测结果利用N个模型的输出得到,具体地:分类问题采用N个模型预测投票的方式,回归问题采用N个模型预测平均的方式。
例如随机森林(Random forest)就属于Bagging。随机森林简单地说就是用随机的方式建立一个森林,森林由很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。
在我们学习每一棵决策树的时候就需要用到Boostrap方法。在随机森林中,有两个随机采样的过程:对输入数据的行(数据的数量)与列(数据的特征)都进行采样。对于行采样,采用有放回的方式,若有N个数据,则采样出N个数据(可能有重复),这样在训练的时候每一棵树都不是全部的样本,相对而言不容易出现overfitting;接着进行列采样从M个特征选出m个(m<<M)。最后进行决策树学习。
预测的时候,随机森林的每一棵数的都对输入进行预测,最后进行投票,哪个类别多,输入样本就属于哪个类别。这就相当于前面说的,每一个分类器(每一棵树)都比较弱,但组合到一起(投票)就比较强了。
1.2 Boosting
提升方法是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。Boosting中有代表性的是AdaBoost算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。具体可以参考《统计学习方法》。GBDT也是一种Boosting的方法,与AdaBoost不同,GBDT每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。
训练过程为阶梯状,基模型按次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次进行一定的转化。对所有基模型预测的结果进行线性综合产生最终的预测结果。
(1)初始化训练数据的权重,w1=w2=...=wn=1/N,N为样本的数量。
(2)训练第一个基模型,计算模型的错误率,计算模型的系数。
(3)更新数据集的权重,误分类数据的权重调大,分类正确的数据权值调小。在训练一个基类模型。依次进行。
(4)每个模型对测试数据,进行预测。
(5)对所有基模型的预测结果进行加权求和。准确率高的模型调大权值,准确率低的模型减小权值。
Bagging与Boosting的区别
(1)数据方面
Bagging:对数据进行采样训练。
Boosting:根据前一轮学习结果调整数据的重要性。
(2)投票方面
Bagging:所有学习器平均投票。
Boosting:对学习器进行加权投票。
(3)学习顺序
Bagging的学习是并行的,每个学习器没有依赖关系。
Boosting学习是串行,学习有先后顺序。
(4)主要作用
Bagging主要用于提高泛化性能(解决过拟合,也可以说降低方差)
Boosting主要用于提高训练精度(解决欠拟合,也可以说降低偏差)
从算法来看,Bagging关注的是多个基模型的投票组合,保证了模型的稳定,因而每一个基模型就要相对复杂一些以降低偏差(比如每一棵决策树都很深);而Boosting采用的策略是在每一次学习中都减少上一轮的偏差,因为保证了偏差的基础上就要将每一个基分类器简化为使得方差更小。
1.3 Stacking
Stacking方法是指训练一个模型用于组合其他各个模型。首先我们先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。理论上,Stacking可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,我们通常使用logistic回归作为组合策略。
将训练好的所有基模型对训练集进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测。
(1)使用训练数据,训练T个不同的模型,得到T个基模型。
(2)使用T个基模型,分别对训练数据进行预测,与原始训练数据的标签一起组成新的训练数据。
(3)使用T个基模型,分别对测试数据进行预测,生成新的测试数据。
(4)使用新的训练数据,训练一个元模型。
(5)使用元模型对测试数据进行预测,得到最终结果。
下面为Stacking框架图:
1.4 Blending
将训练数据进行划分,划分之后的训练数据一部分训练基模型,一部分经模型预测后作为新的特征训练元模型。测试数据同样经过基模型预测,形成新的测试数据。最后,元模型对新的测试数据进行预测。Blending框架图如下所示:
(1)将原始训练数据划分为训练集和验证集。
(2)使用训练集对训练T个不同的模型。
(3)使用T个基模型,对验证集进行预测,结果作为新的训练数据。
(4)使用新的训练数据,训练一个元模型。
(5)使用T个基模型,对测试数据进行预测,结果作为新的测试数据。
(6)使用元模型对新的测试数据进行预测,得到最终结果。
2.1 训练样本扰动
从原始训练样本中产生不同的样本子集,然后利用不同的样本自己训练不同的个体学习器。如Bagging中使用的是资助采样,Boosting中使用的序列采样。
这种训练样本扰动的方法简单有效,但只对不稳定的基学习器有效,像决策树、神经网络等;对于稳定的基学习器,如线性学习器、支持向量机、朴素贝叶斯、KNN等,就效果不明显,产生这个问题的原因就是因为稳定的基学习器,“变通能力”并不是很强。
集成学习分为个体学习器之间存在强依赖关系、必须串行生成的序列方法-Boosting和不存在强依赖关系,可同时生成并行化方法-Bagging。
2.2 输入属性扰动:
输入属性扰动通常是从初始属性集中抽取出若干个属性子集,然后利用不同的属性子集训练出不同的个体学习器。比如有:1998年Tin Kam Ho所提出的随机子空间方法,英文Random subspace method(RSM),又叫attribute bagging 或者feature bagging。随机子空间(RSM)通过使用随机的部分特征,而不是所有特征来训练每个分类器,来降低每个分类器之间的相关性。
RSM的方法常用于特征数比较多的场景中,如核磁共振、基因组序列、CSI(信道状态信息)。在训练完成之后,依据预测结果再做进一步处理,如投票或结合先验概率。
2.3 算法参数扰动:
算法参数扰动指的是通过随机设置不同的参数来训练差别较大的个体学习器。如下图所示的神经网络的隐层神经元数、初始连接权值不同。
此类方法对参数较多的算法有效,对参数较少的算法,可通过将学习过程中某些环节用其他类似方法代替?从而达到扰动的目的。
2.4 输出标记扰动
输出标记扰动是对训练样本的类别记稍作变动,将原来的多分类问题随机转化为多个二分类问题来训练基学习器。经典的一个算法就是纠错输出编码法(Error-Correcting Output Codes, ECOC)。
将每个类别对应一个长度为n的二进制位串(称为码字),共形成m个码字,这些码字的同一位描述了一个二值函数。学习结束后获得n个二分类器,在分类阶段,每个二分类器对输入样本产生的输出形式输出向量,然后由决策规则判定输入样本的类别。
这类方法对类数足够多的数据集有效,但若数据集包含的类数较少,则不宜使用。
2.5 混合扰动:
混合扰动在同一个集成算法中同时使用上述多种扰动方法。比如随机森林就同时使用了训练样本扰动和输入属性扰动。
2.6 集成学习策略
主要有平均法和常见的投票法(Voting),具体包括:
(1)简单平均法:简单地输出结果平均一下。
(2)加权平均法:乘以权值系数将其加起来。
(3)绝对多数投票法:即若标记的票过半数,则分类为该标记,否则拒绝分类。
(4)相对多数投票法:分类为得票最多的标记,若同时有多个标记获得最高票,则从中随机选取一个。
(5)加权投票法:给每个个体学习器预测的类标记赋一个权值,分类为权值最大的标记。这里的权值通常为该个体学习器的分类置信度(类成员概率)。