一、集成学习
集成学习(Ensemble learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能。它不是一种单独的机器学习算法,而更像是一种优化策略。
集成学习的一般结构是,先产生一组个体学习器,再用某种结合策略将它们结合起来。
集成学习优势在于:
1)个体学习器之间存在一定的差异性,这会导致分类边界不同,也就是说可能存在错误。那么将多个个体学习器合并后,就可以得到更加合理的边界,减少整体的错误率,实现更好的效果;
2)对于数据集过大或过小的情况,可以分别进行划分和有放回的操作,产生不同的数据子集,然后使用数据子集训练不同的学习器,最终再合并成为一个强学习器;
3)如果数据的划分边界过于复杂,使用线性模型很难描述情况,那么可以训练多个模型,然后再进行模型的融合;
4)对于多个异构的特征集的时候,很难直接融合,那么可以考虑使用每个数据集构建一个分类模型,然后将多个模型融合。
个体学习器分类
同质:所有个体学习器都是一个种类的——基学习器
异质:所有个体学习器不全是一个种类的——组件学习器
基学习器有时也被称为弱学习器,指的是准确率略微好于随机猜测的学习器。
集成算法的两个主要问题:如何选择若干个体学习器,以及选择何种策略将这些个体学习器集成为一个强学习器。
集成算法的成功在于保证个体学习器的多样性(好而不同),且集成不稳定的算法也能够得到一个比较明显的性能提升。
常见的集成学习有:
用于减少方差的Bagging
用于减少偏差的Boosting
用于提升预测结果的Stacking
二、Bagging
Bagging自举汇聚法(Bootstrap Aggregating),思想是:为了使基学习器尽可能的具有较大的差异(好而不同),对训练样本进行采样以产生若干个不同的子集,对每一个子集训练一个基学习器,然后结合策略进行集成的方法。为了不让每个基学习器效果太差,这些子集不能完全不同,因此使用子集之间相互有交叠的采样方法,即bootstrap方法。
基本流程:给定包含m个样本的数据集,随机取出一个样本放入采样集中,再把它放回到原始数据集中,重复m次,得到含m个样本的采样集,可知原始数据集中有63.2%的样本出现在采样集中,有36.8%的样本不会出现在采样集中,这些不在采样集中的样本可以作为验证集对泛化性能进行包外估计(out-of-bag estimate)。进行同样的操作进行T次得到T个每个含m个样本的采样集,基于每个采样集训练一个基学习器,再将基学习器进行组合,一般使用多数投票或求均值的方式来统计最终的分类结果。
Bagging方法的基学习器可以是基本的算法模型,如:Linear、Ridge、Lasso、Logistic、Softmax、ID3、C4.5、CART、SVM、kNN等。
Bagging计算复杂度与基学习器复杂度同阶,效率高;Bagging可以不经修改地用于多分类和回归问题。
Bagging主要关注降低方差,因此在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更加明显。
Bagging方法的训练过程
Bagging方法的预测过程
三、Boosting
Boosting是一族可将弱学习器提升为强学习器的算法,先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器分错的样本获得较大的权重,然后基于调整后的样本分布来训练下一个基学习器;如此反复进行,直至基学习器数量达到指定值,最终将这些学习器进行加权结合,正确率越高的基学习器的获得的权重越大。Boosting可以用于分类和回归问题。
提升技术的意义:如果一个问题存在弱预测模型(偏差较大),那么可以通过依据损失函数的梯度方式进行提升(Gradient Boosting),从而得到一个强预测模型(偏差减小)。
对样本分布进行调整主要有两种方法:
(1)重新赋权法(re-weighting):在每一轮学习中,根据样本分布为每个训练样本重新赋予一个权重值。
(2)重采样法(re-sampling):对于无法接受带权样本的基学习算法,在每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样得到的样本集对基学习器进行训练。
Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(例如在AdaBoost算法中橙线部分),一旦不满足该条件,则废弃当前基学习器,使用重采样法可以在重新采样后继续训练过程。
常见的Boosting模型有:AdaBoost、GBDT、XGBoost
Bagging和Boosting的区别
(1)样本选择:Bagging算法是有放回的随机采样;Boosting算法是每一轮训练集不变,只是训练集中的每个样例的权重发生变化,权重值根据上一轮的分类结果进行调整。
(2)样例权重:Bagging使用随机抽样,样例的权重相等;Boosting根据错误率不断的调整样例的权重值,错误率越大则权重越大。
(3)基学习器权重:Bagging所有基学习器的权重相等;Boosting对于误差小的基学习器赋予更大的权重。
(4)并行计算:Bagging可以并行生成各个基学习器;Boosting理论上只能顺序/串行生成,因为后一个模型需要前一个模型的结果。
(5)Bagging中每个基学习器都是强学习器,主要关注的问题是降低方差;Boosting中每个基学习器都是弱学习器,主要关注的问题是降低偏差。
四、学习法Stacking
当训练数据很多时,一种更为强大的结合策略是使用学习法,即通过训练一个模型用于组合其他模型的技术。Stacking是学习法的典型代表,方法是首先从原始数据集中训练出初级学习器(异质),将初级学习器的预测结果作为训练次级学习器的输入,再次训练得到最终结果,一般使用单层的Logistic回归作为组合模型。
在训练阶段,次级训练集是初级学习器产生的,若直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大;因此通过交叉验证或留一法的方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。
算法流程:
(1)使用留出法划分原始数据集,一部分为训练集,一部分为测试集。
(2)对于训练集,进行k-fold交叉验证,上图中k=5,从而将训练集划分为5份,其中四份作为新的训练集,剩下一份作为新的测试集。
(3)选择k个合适的初级学习器,基于新的训练集训练模型,使用新的测试集产生预测值。
(4)将所有预测值合并称为一个新的数据集,作为次级学习器的训练数据(即New Feature数据集)。
(5)利用k次产生的模型,和老的测试集特征,产生一系列预测值,对这些预测值求平均,并将这些平均数据作为下一轮的测试集。
(6)下一轮的目标值Y保持不变,还为原始数据集的Y值。
五、结合策略
学习器结合可能会从三个方面带来好处:
(1)统计的原因
由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等的性能,此时若是有单个学习器会导致泛化性能不佳,结合多个学习器会减小这一风险。
(2)计算的原因
单个学习算法往往会陷入局部最优解,多个学习器结合可降低陷入糟糕局部最优解的风险。
(3)表示的原因
某些任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单个学习器拟合效果一定不佳,而通过结合多个学习器,由于相应的假设空间有所扩大,则有可能学得更好的近似。
1、平均法
用于hi为连续型数据。
2、投票法
用于hi为离散型数据,类别集合为{c1,c2,...cN},hi在样本x上的预测输出表示为一个N维向量,hij(x)是hi在类别标记cj上的输出。
(1)绝对多数投票法:某标记得票超过半数,则预测为该标记;否则拒绝预测。
(2)相对多数投票法:预测为得票最多的标记,若同时有多个标记获最高票,则从中随机选取一个。
(3)加权投票法: