1、概念拾遗
同质集成:个体学习器通常由一个现有的学习算法从训练数据中产生。
异质集成:个体学习器由不同的学习算法生成。
好而不同:集成学习中的个体学习器要有一定的准确性,即学习器不能太坏,同时,要具有一定的多样性,即学习期间要具有一定的差异。
个体学习器的生成方式:根据个体学习器的生成方式,目前的集成学习方法大致可以分为两类,即个体学习器间存在着强依赖关系,必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系,可同时生成的并行化方法,前者的代表是Boosting,后者的代表是Bagging和随机森林。
2、Boosting
Boosting的代表是AdaBoost,关于AdaBoost,参照以下帖子:
基本原理:http://www.jianshu.com/p/f2017cc696e6
误差分析:http://www.jianshu.com/p/bfba5a91ba15
AdaBoost与前向分步算法:http://www.jianshu.com/p/a712dff0f388
3、Bagging
Bagging是并行式集成学习方法最著名的代表,从名字就可以看出,它基于自助采样法。给定包含m个样本的数据集,我们先随即取出一个样本放入采样集中,再把这个样本放回到初始数据集,使得下次采样时该样本仍可能被选,这样,经过m次随机采样操作,我们得到含有m个样本的采样集,初始训练集中有的样本在采样集中多次出现,有的没有出现,我们之前计算过这个比例,大概有63.2%的样本会出现在采样集中。
照这样,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些学习器进行结合,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法/若分类预测时出现两个类收到的票数相同,那么最简单的做法是随机选出一个,也可以进一步考察学习器投票的置信度来确定最终胜者。Bagging的算法描述如下:
4、集成模型带来的好处
学习器结合可能会从三个方面带来好处:
1)首先,从统计的方面来看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器可能降低这一风险。
2)第二,从计算的方面来看,学习算法汪汪会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟糕,而通过多次运行之后进行结合,可降低陷入局部极小点的风险。
3)第三,从表示的方面来看,某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则肯定无效,而通过结合多个学习期,由于相应的假设空间有所扩大,有可能学得更好的近似。
下图直观的展示了模型集成可能带来的三个好处:
5、结合策略
5.1 平均法
对于数值型输出,最常见的结合策略是平均法
简单平均法
加权平均法
加权平均法的权重一般是从训练数据中学习儿的,而现实任务中的训练样本通常是不充分或存在噪声,这将是的学习出的权重不完全可靠,尤其是对规模比较大的集成来说,要学习的权重比较多,较容易导致过拟合,因此加权平均法未必一定优于简单平均法。一般而言,在个体学习器的性能差异较大的时候使用加权平均法,在个体学习器性能相近时宜使用简单平均法。
5.2 投票法
对分类任务来说,最常见的结合策略是投票法:
绝对多数投票法:
即若某标记得票过半数,则预测为该标记,否则拒绝预测
相对多数投票法
即预测为得票最多的标记,如果同时有多个标记获最高票,则从中随机选取一个。
加权投票法
5.3 学习法
当训练数据很多时,一种更为强大的结合策略是学习法,即通过另一个学习器来进行结合,Stacking是学习法的典型代表。这里我们把个体学习器当作初级学习器,用于结合的学习器称为次级学习器或者元学习器。
Stacking先从初始训练集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在这个新的数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被用作样例标记。Stacking算法描述如下:
6、误差-分歧分解
之前提到过,与构建泛化能力强的集成,个体学习器应该好而不同,下面,我们来做一个简单的理论分析:
7、多样性
多样性度量用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度,典型做法是考虑个体分类器的两两相似/不相似性。
给定数据集D,对于二分类任务,分类器hi和hj的预测结果列联表为:
可以看到,总共的样本数量m=a+b+c+d,二者预测不一样的数量为b+c,则有下面几个指标用于度量二者的多样性:
不合度量
相关系数
Q-统计量
k-统计量
若分类器hi与hj在D上完全一致,则k=1,若他们仅是偶然达成一致,则k=0,k通常为非负值,仅在二者达成一致的概率甚至低于偶然性的情况下为负值。
如何增强多样性呢?一般思路是在学习过程中引入随机性,常见做法主要是对数据样本、输入属性、输出表示、算法参数进行扰动。
数据样本扰动
给定初始数据集,可以从中产生不同的数据子集,在利用不同的数据子集训练出不同的个体学习器,数据样本扰动通常是基于采样法。例如在Bagging中使用自助采样,在Adaboost中使用序列采样,此类做法简单高效,使用较广。对很多常见的基学习器,例如决策树和神经网络等。训练样本稍加变化就会导致学习器有显著变动,数据扰动对这些不稳定学习器很有效。但是,有一些基学习器对数据样本的扰动不敏感,如线性学习器、SVM、朴素贝叶斯、k近邻等,这样的基学习器为稳定学习器,对此类基学习器进行集成往往需使用输入属性扰动等其他机制。
输入属性扰动
训练样本通常由一组属性描述,不同的属性子集提供了不同的观察数据的视角。显然,从不同属性子集中训练出的个体学习器必然有所不同。著名的随机子空间算法就依赖于输入属性扰动。该算法从初始属性集中抽取若干个子属性集,在基于每个属性子集训练一个基学习器。对包含大量冗余属性的数据,在子空间中训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少大幅度减少时间开销,同时,由于冗余属性多,减少一些属性后训练出的个体学习器也不至于太差。若数据只包含少量属性,或者冗余属性较少,则不宜使用输入属性扰动法。
输出表示扰动
此类做法的基本思路是对输出表示进行操纵以增强多样性。可对训练样本的类标记稍作变动,如翻转法随机改变一些训练样本的标记,也可对输出表示进行转化,如输出调制法将分类输出转化为回归输出后构建个体学习器;还可将原任务拆解为多个可同时求解的子任务,如EOOC法利用纠错输出码将多分类任务拆解为一系列二分类任务来训练基学习器。
算法参数扰动
基学习算法一般都有参数需进行设置,例如神将网络的隐层神经元素、初始连接权值等,通过随机设置不同的参数,往往可产生差别较大的个体学习器。例如负相关法显示通过正则化项来强制个体神将网络使用不同的参数。对参数较少的算法,可通过将其学习过程中某些环节用其他类似方法替代,从而达到扰动的目的,例如可将决策树使用的属性选择机制替换成其他的属性选择机制。值得指出的是,使用单一学习器时通常需使用交叉验证等方法来确定参数址,这事实上已使用了不同参数训练出多个学习器,只不过最终仅选择其中一个学习器进行使用,而集成学习则相当于把学习器都利用起来,由此也可看出,集成学习技术的实际计算开销并不比使用单一学习器大很多。