第5 章 集成学习 机器学习目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往 不这么理想,有时只能得到多个有偏好的学习器(弱学习器,在某些方面表现得比较好),集 成学习是将多个弱学习器进行集成组合以期得到一个更好、更全面的强学习器。集成学习 本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器完成学习任务,通 常预测能力比使用单个学习器更优越。 5.1 基本概念 5.1.1 算法起源 集成学习借鉴了“群体智慧”这一思想,也就是常说的“三个臭皮匠,顶个诸葛亮”的道 理,即多个才能平庸的人,若能集思广益,也能提出比诸葛亮还周全的计策。1906 年, Galton创造了“群体智慧”一词。有一次他参加一个农贸展销会,那里正在举办一场肉牛质 量竞猜比赛,牛已经宰好了,内脏掏得一干二净。他用最准确的猜测得分从800名选手中脱 颖而出。其做法是收集所有猜测结果并加以分析。他计算了所有猜测得分的均值,惊讶地 发现计算结果和实际值极为接近。这种集体竞猜的方法超过所有曾经赢得比赛的选手,甚 至跟养牛专业户相比也胜过一筹。选手要取得准确得分,关键在于集成学习。选手独立给 出的猜测得分不能受周围他人猜测得分的影响,同时通过一个无差错机制(平均值)强化整 个群体的猜测得分。 集成一词的本义是“群策群力”。构建集成分类器,首先通过训练数据产生一组分类器, 然后聚合分类器的预测结果,再基于这些结果预测新记录的类别。 5.1.2 基本概念 先定义一些基本的关于学习器的概念。 强学习器(StrongLearner),是相对于弱学习器而言的概念,指的是可以预测相当准确 结果的学习算法。 弱学习器(WeakLearner),相对于强学习器而言,通常弱学习器预测的结果只比随机 结果稍好一些。 基学习器(BaseLearner),集成学习中的个体学习器,经常是弱学习器,但是并非必须 为弱学习器,有时可以为强分类器。 基学习算法(BaseLearningAlgorithm),基学习器所基于的算法,基学习器基于基学习 算法生成。 92 机器学习(Python 实现) 同质基学习器(HomogeneousBaseLearner),指使用同样的基学习算法生成的基学 习器。异 质基学习器(HeterogeneousBaseLearner),指使用不同的基学习算法生成的基学 习器。 机器学习算法中的有监督学习指的是利用已经知道类别的样本训练分类器或回归模 型,有监督学习算法处理的是分类和回归问题,分类指的是利用一群已经知道类别的样本训 练分类器,分类处理的是离散数据;而回归则是利用已知结果且结果为连续数值的样本建立 回归模型,处理的是连续数据。现有的分类算法有多种,例如决策树、朴素贝叶斯、支持向量 机等。 训练分类器(学习器)的目标是能够从合理数量的训练数据中通过合理的计算量可靠地 学习到知识,训练样本的数量和学习所需的计算资源是密切相关的,由于训练数据的随机 性,我们只能要求分类器可能学习到一个近似正确的假设,即可能近似正确(ProbablyApproximateCorect,PAC)学习。PAC学习理论定义了学习算法的强弱。 弱学习算法:识别错误率小于1/2(即准确率仅比随机猜测略高)的学习算法;强学习算 法:识别准确率很高并能在多项式时间内完成的学习算法。同时,Valiant和Kearns提出 了PAC学习模型中弱学习算法和强学习算法的等价性问题,即任意给定仅比随机猜测略好 的弱学习算法,是否可以将其提升为强学习算法,如果可以,那么只找到一个比随机猜测略 好的弱学习算法就可以将其提升为强学习算法,而不必寻找很难获得的强学习算法。后来 Scphaire证明,强可学习和弱可学习是等价的,弱学习算法可以提升为强学习算法。 对于分类问题而言,给定一个训练样本,求比较粗糙的分类规则比求精确的分类规则要 容易得多,由于强可学习和弱可学习是等价的,所以可以通过先找到一些弱分类器,然后寻 求将这些弱分类器提升为强分类器的方法来提升分类效果。 集成学习是一个复合模型,由多个基学习器通过组合策略建立一个精确度高的集成分 类器。集成学习通常比其基学习器更准确,泛化性能更优越。集成学习按照基学习器(个体 学习器)之间是否存在依赖关系可以分为两大类:第一类是个体学习器之间存在强依赖关 系,是串行集成分类方法;另一类是个体学习器之间不存在强依赖关系,是并行集成分类方 法。在串行集成中,先生成的基学习器会影响后续生成的基学习器,串行集成方法的基本动 机是利用基学习器之间的相关性;并行集成分类中,各基学习器互不影响,并行集成方法的 基本动机则是利用基学习器之间的独立性,这是因为组合相互独立的基学习器能够显著减 小误差。 按照基学习算法的异同,集成的方法可以分为同质集成和异质集成,同质集成是通过一 个基学习算法生成同质的基学习器,异质集成的基学习器是不同质的,为了集成后的结果表 现最好,异质基学习器需要尽可能准确并且差异性够大。按照个体学习器之间的关系,同质 集成学习方法可以分为并行集成的装袋方法Bagging、串行集成的提升方法Boosting和堆 叠方法Stacking。 Bagging是一种并行集成学习算法,每个基学习器没有依赖关系,可以并行拟合, Bagging算法是在原始的数据集上采用有放回的随机取样(也叫自助采样)的方式抽取 m 个 子样本,从而利用这 m 个子样本训练 m 个基学习器,从而降低模型的方差。装袋方法 Bagging的代表算法是随机森林(RandomForest,RF)算法。 Boosting是一种将弱学习器提升为强学习器的串行集成学习算法。该算法先从初始训 第 5 章 集成学习 93 练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学 习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布训练下一个基学 习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这 T 个基学习器进行 加权组合。Boosting的代表算法是AdaBoost、GBDT 、XGBoost等。 堆叠Stacking首先使用原始训练数据集学习出若干个基学习器后,使用基学习器的输 出作为输入特征,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。因 此,堆叠Stacking是一种通过一个元分类器或者元回归器整合多个分类模型或回归模型的 集成学习技术。基础模型通常包含不同的学习算法,因此Stacking通常是异质集成的。 Stacking与Bagging和Boosting主要存在两方面差异:首先,Stacking通常考虑的是异质 学习器(不同的学习算法被组合在一起),而Bagging和Boosting主要考虑的是同质学习 器;其次,Stacking学习用元模型组合基础模型,而Bagging和Boosting则根据确定性算法 组合基学习器。限于篇幅限制,本书不再讨论堆叠Stacking代表的异质集成学习,有兴趣 的读者可以自行查阅相关资料。 5.ang算法与随机森林 2 Bgi 5.2.1 Bagging 算法 Bagging是BootstrapAggregating的缩写,是自助结合的意思。自助”和“结合”是 Bagging的两个关键,先对数据进行多次自助采样(BootstrapSample,也称为可重复采样或 有放回采样),再在每个新样本集上训练模型并结合。该算法的基本思想是:从原始的数据 集中自助采样抽取同数量的样本,形成 K 个随机的新训练集,然后训练出 K 个不同的学习 器,再一起集成。学习器间不存在强依赖关系,集成方式一般为投票。 Bagging通过抽样创建训练数据集的子样本并在每个子样本上拟合决策树来工作。从 训练集进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合 产生最终的预测结果。 图5.1为Bagging算法原理图。每个分类器都随机从原样本中做有放回的采样,经过 多次采样后获得多个平衡的训练子集;然后分别在这些采样后的样本上训练相应的基分类 器,再把这些基分类器采用投票方法集成多个基分类器的预测结果。Bagging算法既可以 处理二分类问题,也可以处理多分类问题。Bagging算法的具体过程如下。 图5. gig算法原理图 1Ban 94 机器学习(Python 实现) 从原始样本集中通过随机抽取形成K 个训练集:每轮抽取N 个训练样本(有些样本 可能被多次抽取,而有些样本可能一次都没有被抽中,这称为有放回的抽样)。K 个训练集 共得到K 个模型。这K 个训练集是彼此独立的,这个过程也称为Bootstrap。 算法流程如下。 输入:样本数据集D ={(x1,y1),(x2,y2),…,(xm ,ym )}; 基学习算法ε; 基学习器数T 。 对于t=1,2,…,T , 步骤1:自助采样T 套样本数量为D 的数据集。 步骤2:在第t 套数据集上训练出基学习器ht,最后均匀结合ht 成H 。 输出:分类问题:用投票方式,H (x)=sign ΣT t=1 ( ht(x)) 回归问题:用平均方式,H (x)=1T ΣT t=1 ht(x) 训练时可以根据具体问题采用不同的分类或回归方法,如决策树、神经网络等。每次使 用一个训练集通过相同的分类或回归方法得到一个模型,K 个训练集共得到K 个模型。通 常把这些模型称为基模型或者基学习器。在测试阶段,每个测试周期会将全部K 个训练模 型结果组合起来进行预测。 基模型的集成有两种情况。对于分类问题采用投票法,K 个模型采用投票的方式得到 分类结果;对于回归问题采用平均法,计算K 个模型的均值并将其作为最后的结果。 5.2.2 随机森林 随机森林是通过集成学习的思想将多棵决策树集成的一种集成学习(Ensemble Learning)算法,其基本单元是决策树,每棵决策树都是一个分类器。对于一个输入样本,N 棵树会有N 个分类结果,而随机森林集成了所有的分类投票结果,将投票次数最多的类别 指定为最终的输出,是Bagging类算法的典型代表。它并行地生成基分类器,并行集成的基 本动机是利用基学习器的独立性,通过平均降低方差。 大多数情况下的Bagging是基于决策树的,本章默认采用CART算法构造决策树。 随机森林由多棵不确定性的决策树构建而成,有效解决了单分类器出现的过拟合以及 性能差等问题,是最具代表性的集成分类学习算法。由于随机森林算法具有易于理解 与实现、准确度高且开销较低等特点,因此其在科技、交通、医学等领域得到了广泛的 使用。 随机森林是Bagging的扩展,与Bagging一样,随机森林在训练数据集上有放回地随机 抽样来拟合决策树。随机森林在随机抽取样本数据的同时,也对样本属性进行随机抽取,进 一步体现了随机森林分类模型的灵活性,避免出现过拟合的问题。与Bagging不同,随机森 林还对每个数据集的特征(列)进行采样。 随机森林的构造基本过程:假设用于建模的训练数据集中含有N 个观测样本、M 个自 变量和1个因变量,首先利用Bootstrap抽样法从原始训练集中有放回地抽取出n(n