目录
1.集成学习概念
集成学习通过构建并结合多个学习器来完成任务,有时被称为多分类系统、基于委员会的学习等。如图1显示出集成学习的一般结构:先产生一组”个体学习器“,再用某种策略将它们结合起来。集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。通过周志华西瓜书中的分析,随着集成中个体分类器数目T的增大,集成的错误率将指数级下降,最终趋于零。这对”弱学习器“尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。通常集成学习中的个体学习器都是同质的。
图1 集成学习示意图
2.个体学习概念
集成学习的第一个问题就是如何得到若干个个体学习器。这里我们有两种选择。
第一种就是所有的个体学习器都是一个种类的,或者说是同质的。比如都是决策树个体学习器,或者都是神经网络个体学习器。第二种是所有的个体学习器不全是一个种类的,或者说是异质的。比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
目前来说,同质个体学习器的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。下面就分别对这两类算法做一个概括总结。
3.boosting bagging
Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Decison Tree, GBDT)。
AdaBoost算法讲解:
图2 西瓜书Adaboost算法
Adaboost算法使用的损失函数是指数损失函数,从西瓜书分析可得,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本0/1损失函数的一致替代损失函数。
算法第5行表示如果该基分类器的错误率大于0.5则停止算法,因为大于0.5表示该分类器连随机猜想的错误率都达不到,那这个分类器是无用的。
算法第6行计算的是基分类器的权重。
算法第7行计算的是每个样本的权重更新,其中是规范化因子,保证
是一个分布。
最后的输出就是对多个基分类器的加权求和。
标准Adaboost只适用于二分类任务。
从偏差-方差分解的角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。如图3所示
图3 西瓜数据集 3.0α AdaBoost 集成规模为 11 时,集成(红色)与基学习器(黑色)的分类边界.
bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
对于这里的随机采样有必要做进一步的介绍,这里一般采用的是自助采样法(Bootstap sampling),即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
自助采样过程还给Bagging带来了另一个优点:由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下的约36.8%的样本可用作验证集来对泛化性能进行”包外估计",估计基学习器的性能,这样样本被称为包外样本(out-of-bag sample,OOB)。
对预测输出进行集合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。
从偏差-方差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更为明显。如图4
图4 西瓜数据集 3.0α上Bagging集成规模为 3、5、11 时,集成(红色)与基学习器(黑色)的分类边界。
4.结合策略(平均法、投票法、学习法)
1.平均法
平均法有简单平均法和加权平均法
2.投票法
绝对多数投票法:即若某标记得票过半数,则预测为该标记;否则拒绝预测。
相对多数投票法:即预测为得票最多的标记,若同时又多个标记获最高票,则从中随机选取一个。
加权投票法:与加权平均法类似。
通常我们用的都是相对多数投票法。
3.学习法。
当训练数据很多时,一种更为强大的结合策略是使用学习法,即通过另一个学习器来进行结合。Stacking是学习法的典型代表,这里我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。
Stacking先从初始数据集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器,在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。Stacking的算法描述如图5所示。
图5 Stacking算法
次级学习器的输入属性表示和次级学习算法对Stacking集成的泛化性能有很大影响。有研究表明,将初级学习器的输出类概率作为次级学习器的输入属性,用多响应线性回归(MLR)作为次级学习算法效果较好,在MLR中使用不同的属性集更佳。
5.随机森林思想
随机森林(Random Forest,RF)是Bagging的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前节点的属性集合中选择最优属性;而在RF中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令k=d,则基决策树的构建与传统决策相同;若k=1,则是随机选择一个属性用于划分;一般情况下,推荐值k=。
随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成得泛化性能可通过个体学习器之间差异度得增加而进一步提升。
6.随机森林的推广
由于RF在实际应用中的良好特性,基于RF,有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。下面对于这些RF家族的算法中有代表性的做一个总结。
1、extra trees
参考资料:https://www.cnblogs.com/pinard/p/6156009.html
2.Isolation Forest(以下简称IForest)是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。
参考资料:https://zhuanlan.zhihu.com/p/25040651
3.Totally Random Trees Embedding(以下简称 TRTE),它是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。
TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征x xx划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。
映射到高维特征后,可以继续使用监督学习的各种分类回归算法了。
参考资料:随机森林的推广
7.随机森林的优缺点
随机森林的优点:
- 表现性能好,与其他算法相比有着很大优势。
- 随机森林能处理很高维度的数据(也就是很多特征的数据),并且不用做特征选择。
- 在训练完之后,随机森林能给出哪些特征比较重要。
- 训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的)。
- 在训练过程中,能够检测到feature之间的影响。
- 对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。
- 如果有很大一部分的特征遗失,用RF算法仍然可以维持准确度。
- 随机森林算法有很强的抗干扰能力(具体体现在6,7点),还有原因来自于样本扰动和属性扰动。所以当数据存在大量的数据缺失,用RF也是不错的。
- 随机森林抗过拟合能力比较强(虽然理论上说随机森林不会产生过拟合现象,但是在现实中噪声是不能忽略的,增加树虽然能够减小过拟合,但没有办法完全消除过拟合,无论怎么增加树都不行,再说树的数目也不可能无限增加的。)
- 随机森林能够解决分类与回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。
- 在创建随机森林时候,对generlization error(泛化误差)使用的是无偏估计模型,泛化能力强。
- 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
随机森林的缺点:
- 随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。
- 对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。
- 可能有很多相似的决策树,掩盖了真实的结果。
- 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。
- 执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了。
参考资料:随机森林优缺点
8.sklearn参数
参考资料:sklearn参数
9.随机森林应用场景
数据维度相对低(几十维),同时对准确性有较高要求时。因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。