西瓜书读书笔记整理(八) —— 第八章 集成学习
第八章 集成学习
8.1 个体与集体
8.1.1 个体与机器的概念
在集成学习(Ensemble Learning)中,
-
个体(individuals)指的是构成整个集成模型的独立基学习器或模型。这些个体学习器可以是同质的(相同类型的模型)或异质的(不同类型的模型)。每个个体学习器都被训练用于解决给定的任务。
-
集体(ensemble)是由这些个体学习器组合而成的整体模型。通过将多个个体学习器的预测结果进行组合,集成模型通常能够在性能上超越单个学习器。集成学习的目标是通过利用个体学习器之间的差异性,降低泛化误差,提高模型的稳定性和性能。
8.1.2 集成同种类型的个体学习器
当集成学习中的个体学习器都属于相同类型,即具有相似的结构和学习算法时,这种集成称为 “同质”(homogeneous)集成。同质集成中的个体学习器通常被称为 “基学习器”(base learner),相应的学习算法成为 “基学习算法”(base learning algorithm) 。这些基学习器在训练过程中独立运作,最终通过某种集成策略来汇总它们的预测结果,从而形成整个集成模型。
同质集成的一个典型例子是随机森林(Random Forest)。在随机森林中,每个基学习器都是决策树,它们在训练时使用随机抽样的数据子集,最后通过投票来产生最终的预测。
8.1.3 集成不同类型的个体学习器
当集成学习中的个体学习器不属于相同类型,即具有不同的结构和学习算法时,这种集成称为 “异质”(heterogeneous)集成 。这种集成方法旨在充分利用不同类型学习器的优势,通过组合它们的预测结果来提高整个集成模型的性能。个体学习器一般不称为基学习器,常称为 “组件学习器”(component learner)或直接称为个体学习器。
在异质集成中,个体学习器可以是不同种类的机器学习算法或模型,例如决策树、支持向量机、神经网络、K最近邻等。每个个体学习器通过在训练数据上学习问题的不同方面或特征,为集成提供了多样性。
8.1.4 集成学习的分类(根据生成过程分类)
根据个体学习器的生成过程:
- Bagging(Bootstrap Aggregating): 通过对训练集进行有放回的随机抽样,生成不同的子集,然后在每个子集上独立训练个体学习器,最后通过投票或平均得到最终预测结果。典型的例子包括随机森林。
- Boosting: 通过迭代训练个体学习器,每次调整数据样本的权重,关注之前模型错误的样本,使得后续模型更加关注难以分类的样本。典型的例子包括 AdaBoost、Gradient Boosting 等。
8.2 Boosting
8.2.1 算法概述
Boosting 是一类集成学习方法,其基本思想是通过训练一系列弱学习器(通常是简单的模型)来构建一个强大的集成模型。Boosting 算法的核心思想是迭代地训练个体学习器,每个学习器都试图纠正前一个学习器的错误,从而逐步提高整体模型的性能。
8.2.2 算法总体过程
以下是 Boosting 类算法的一般概述:
-
初始化权重: 在训练数据集上,为每个样本初始化一个权重,用于控制其在训练过程中的重要性。初始时,所有样本的权重相等。
-
迭代训练: Boosting 算法通过迭代训练个体学习器,每一轮训练都依赖于前一轮学习器的表现。在每一轮中,根据当前权重分布,训练一个弱学习器。
-
调整权重: 在每一轮训练后,根据个体学习器的性能,调整样本的权重。被错误分类的样本通常会被赋予更高的权重,以便在下一轮中更加关注这些样本。
-
组合学习器: 通过对个体学习器进行加权组合,得到最终的强学习器。通常,加权方式与个体学习器的性能相关,性能越好的学习器权重越大。
-
迭代终止条件: Boosting 算法通常会设置一个迭代次数或在某个条件满足时停止,以防止过拟合。
8.2.3 AdaBoost 算法
AdaBoost(Adaptive Boosting): 通过调整样本的权重,使得前一轮中被错误分类的样本在下一轮中得到更高的关注。
AdaBoost 算法流程 | |
---|---|
Input | 训练数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } D = \{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\} D={(x1?,y1?),(x2?,y2?),...,(xn?,yn?)}, 其中 x i x_i xi? 是输入特征, y i y_i yi? 是对应的标签 |
Output | 弱学习器集合 { h 1 , h 2 , . . . , h T } \{h_1, h_2, ..., h_T\} {h1?,h2?,...,hT?} 和对应的权重 { α 1 , α 2 , . . . , α T } \{\alpha_1, \alpha_2, ..., \alpha_T\} {α1?,α2?,...,αT?} |
1 | 初始化样本权重 w i = 1 / n w_i = 1/n wi?=1/n,其中 n n n 是样本数 |
2 | 对于
t
=
1
t = 1
t=1 到
T
T
T(迭代次数,也是弱学习器的数量): a. 使用样本权重 w i w_i wi? 在训练数据集 D D D 上训练一个弱学习器 h t h_t ht? b. 计算弱学习器 h t h_t ht? 在训练集上的错误率 e t = ∑ i ( w i ? I ( y i ≠ h t ( x i ) ) ) / ∑ i w i e_t = \sum_i (w_i * I(y_i ≠ h_t(x_i))) / \sum_i w_i et?=∑i?(wi??I(yi?=ht?(xi?)))/∑i?wi?,其中 i i i 为指示函数 c. 计算弱学习器的权重 α t = 0.5 ? ln ? ( ( 1 ? e t ) / e t ) \alpha_t = 0.5 * \ln((1 - e_t) / e_t) αt?=0.5?ln((1?et?)/et?) d. 更新样本权重: w i = w i ? e x p ( ? α t ? y i ? h t ( x i ) ) w_i = w_i * exp(-\alpha_t * y_i * h_t(x_i)) wi?=wi??exp(?αt??yi??ht?(xi?)),使得被错误分类的样本权重增加 e. 归一化样本权重: w i = w i / ∑ i w i w_i = w_i / \sum_i w_i wi?=wi?/∑i?wi? |
3 | 输出最终的强学习器: H ( x ) = s i g n ( ∑ t α t ? h t ( x ) ) H(x) = sign(\sum_t \alpha_t * h_t(x)) H(x)=sign(∑t?αt??ht?(x)) |
其中, s i g n sign sign 表示取符号函数。这样,得到的强学习器 H ( x ) H(x) H(x) 是基于弱学习器的线性组合,并且每个弱学习器的权重 α t \alpha_t αt? 取决于其在训练中的表现。这使得 AdaBoost 更关注那些之前被错误分类的样本,从而提高整体性能。
Gradient Boosting(梯度提升): 通过迭代地拟合残差,逐步改进模型的预测性能。XGBoost 和 LightGBM 是基于梯度提升的强大算法。
LogitBoost: 针对分类问题的 Boosting 方法,使用对数似然损失函数。
8.3 Bagging 与随机森
8.3.1 Bagging
Boosting算法 | |
---|---|
输入 | 训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\} D={(x1?,y1?),(x2?,y2?),....,(xm?,ym?)} |
过程 | |
1 | for t = 1,2,…,
T
T
T do ????????????????? h t = L ( D , D b s ) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ h_t = \mathfrak{L}(D,\mathcal{D}_{bs}) ?????????????????ht?=L(D,Dbs?) end for -------------- |
输出 | H ( x ) = arg ? max ? y ∈ Y ∑ t = 1 T I ( h t ( Map ? F t ( x ) ) = y ) H(\boldsymbol{x})=\underset{y \in \mathcal{Y}}{\arg \max } \sum_{t=1}^T \mathbb{I}\left(h_t\left(\operatorname{Map}_{\mathcal{F}_t}(\boldsymbol{x})\right)=y\right) H(x)=y∈Yargmax?∑t=1T?I(ht?(MapFt??(x))=y) |
8.3.2 随机森林(Random Forest)
随机森林是 Bagging 的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
随机森林的训练效率常优于 Bagging,因为在个体决策树的构建过程中,Bagging 使用的是 “确定型” 决策树,在选择划分属性时要对结点的所有属性进行考察,而随机森林使用的 "随机型"决策树则只需考虑一个属性子集。
8.3.3 Bagging 类算法与 Boosting 类算法的差别
Bagging | Boosting |
---|---|
并行训练,弱学习器之间相互独立 | 串行训练,每个弱学习器依赖于前一个学习器 |
适用于高方差的模型 | 适用于高偏差的模型 |
降低过拟合,提高模型的泛化能力 | 通过迭代逐渐减小模型的偏差,更适合处理复杂问题 |
8.4 结合策略
8.4.1 学习器结合的好处
学习器结合(Ensemble Learning)的主要好处在于通过组合多个弱学习器(模型)来提高整体模型的性能和泛化能力。以下是学习器结合的一些主要优势:
-
降低过拟合: 学习器结合有助于降低模型的过拟合风险。当使用多个弱学习器时,由于它们的独立性或者通过调整权重的方式,整体模型更有可能对训练数据中的噪声和异常值具有鲁棒性。
-
提高模型的泛化能力: 通过结合多个学习器的预测结果,模型能够更好地适应未见过的数据。这在处理复杂、多样化的真实世界问题时特别有用,因为不同的学习器可能在不同方面表现更好。
-
处理不确定性: 学习器结合能够有效处理模型的不确定性。通过集成多个模型的意见,可以减少单个模型的误判,提高模型对于不确定性情况的处理能力。
-
提高性能: 在某些情况下,学习器结合可以显著提高模型的性能。通过组合多个相对弱的学习器,可以创造出一个更强大的整体模型,超过单个学习器的性能。
-
适应不同类型的数据和模式: 学习器结合可以通过组合不同类型的模型来适应各种数据和模式。这种多样性有助于应对不同方面的挑战,使得整体模型更加全面。
-
增加鲁棒性: 学习器结合使得模型对于输入数据的小变化或噪声更具鲁棒性。即使某个学习器在特定情况下表现较差,其他学习器的贡献仍然能够维持模型的性能。
总体而言,学习器结合在实际应用中被广泛采用,因为它能够通过组合多个学习器的优点,弥补单个学习器的缺点,提高整体模型的稳定性和性能。这种方法在集成学习中的Bagging、Boosting等算法中得到了很好的体现。
8.4.2 常见的几种结合策略
在集成学习中,有几种常见的结合策略,这些策略决定了如何组合多个学习器的预测结果。以下是几种常见的集成学习结合策略:
-
投票(Voting): 在分类问题中,投票是一种简单而直观的结合策略。每个弱学习器投出一个类别标签,最终的预测结果是获得最多投票的类别。可以分为硬投票和软投票:
- 硬投票: 每个学习器投出一个类别标签,取票数最多的类别作为最终预测结果。
- 软投票: 每个学习器给出对每个类别的概率,最终将概率加权平均,概率最高的类别作为最终预测结果。
-
平均(Averaging): 在回归问题中,平均是一种常见的结合策略。每个学习器给出一个数值预测结果,最终的预测结果是所有学习器预测结果的平均值。
-
加权平均(Weighted Averaging): 类似于平均,但在加权平均中,每个学习器的预测结果通过赋予不同的权重进行组合。权重可以根据学习器的性能或其他因素进行调整。
-
堆叠(Stacking): 堆叠是一种较为复杂的结合策略,它涉及到使用一个元学习器(meta-learner)来组合多个基学习器的预测结果。具体过程包括:
- 将训练集分成若干折。
- 在每一折上训练不同的基学习器。
- 使用这些基学习器对剩余的折进行预测。
- 将所有基学习器的预测结果作为输入,训练一个元学习器,用于产生最终的预测结果。
-
Bagging(Bootstrap Aggregating): Bagging是一种通过对训练集进行有放回的随机抽样来构建多个独立学习器的策略。最终的预测结果通过对所有学习器的预测结果进行平均或投票。
-
Boosting(提升): Boosting是一种通过迭代训练一系列弱学习器,并根据前一个学习器的错误调整样本权重的策略。最终的预测结果是所有弱学习器预测结果的加权和。
这些结合策略可以根据具体的问题和数据特点来选择,不同的策略在不同的场景中可能表现更好。在实际应用中,选择合适的结合策略通常需要进行实验和验证。
8.5 多样性
在集成学习中,“多样性”(diversity)指的是集成中的个体学习器之间在某种方面的差异或不同程度多样性是集成学习有效性的关键因素之一,因为如果所有的个体学习器都是相似的,那么集成的性能提升可能会受到限制。多样性的引入有助于提高集成的鲁棒性,减少过拟合,并在不同情境下获得更好的性能。
以下是关于多样性的几个方面的理解:
-
数据空间的多样性: 个体学习器在输入数据空间中产生不同的决策边界。这样的多样性使得集成对于不同区域的输入能够更加灵活,从而提高整体模型的泛化能力。
-
特征空间的多样性: 不同的个体学习器可能对特征的不同子集或特征的不同组合更为敏感。这样的多样性有助于集成在不同特征空间的子集中捕获不同的信息,从而提高模型的全面性。
-
参数空间的多样性: 在集成学习中,个体学习器的训练可能会涉及到不同的参数设置。通过在参数空间中引入多样性,集成可以探索不同参数设置下的模型表现,从而提高整体模型的鲁棒性。
-
样本空间的多样性: 在Bagging(如随机森林)中,个体学习器的训练样本是通过有放回的随机抽样得到的,这样每个学习器的训练集都是略有不同的。这种样本空间的多样性有助于降低过拟合风险。
-
算法的多样性: 在堆叠(Stacking)和Boosting等集成方法中,不同的基学习器可能采用不同的学习算法。算法的多样性有助于集成在不同方面更全面地探索模型空间,提高性能。
多样性的引入有助于避免集成中的学习器出现过度依赖某一方面的局部信息,使得集成能够更好地适应各种情况,提高模型的鲁棒性和泛化能力。在实践中,通过调整集成学习中的参数、使用不同的基学习器或者改变训练数据的采样方式,可以有效地引入多样性。
8.6 集成学习常见的面试题
常见面试题可能包括:
-
解释Bagging和Boosting的区别。
Bagging Boosting 并行训练,弱学习器之间相互独立 串行训练,每个弱学习器依赖于前一个学习器 适用于高方差的模型 适用于高偏差的模型 降低过拟合,提高模型的泛化能力 通过迭代逐渐减小模型的偏差,更适合处理复杂问题 -
描述随机森林的工作原理。
随机森林是一种Bagging算法,利用多个决策树集成。它通过随机抽样训练数据和随机选择特征子集来增加树之间的多样性。每个树独立学习,最终通过投票或平均获得分类(回归)结果。 -
如何引入多样性到集成学习中?
- 数据层面:随机抽样或生成不同的训练子集。
- 特征层面:随机选择特征子集进行训练。
- 算法层面:使用不同类型或参数的学习算法。
- 样本层面:调整样本权重,使得不同学习器关注不同样本。
-
什么是堆叠学习,它的优势是什么?
堆叠学习是一种集成学习方法,通过训练一个元学习器来组合多个基学习器的预测结果。其优势在于能够更灵活地捕捉不同学习器的优势,适应更复杂的关系,提高整体模型的性能。 -
Boosting中的AdaBoost和Gradient Boosting的异同。
AdaBoost通过调整样本权重,弱分类器的权重来迭代提高模型性能。Gradient Boosting通过迭代训练树,每次拟合残差来逐步减小模型的偏差,其中有常见的XGBoost和LightGBM两个变体。 -
集成学习在什么情况下特别有效?
集成学习特别有效于处理复杂问题、高维数据、噪声数据以及存在多个合理解释的情况下。在这些情况下,通过结合多个学习器,可以提高模型的鲁棒性和泛化能力。 -
如何选择合适的集成学习算法和参数?
选择集成学习算法应考虑问题性质和数据特点,Bagging适用于高方差模型,Boosting适用于高偏差模型。参数选择可通过交叉验证等方法进行调优,考虑学习器数量、深度、学习率等因素。
8.6 总结
集成学习是一种通过结合多个学习器来提高整体性能的方法。它通过利用各学习器之间的多样性,增强模型的鲁棒性和泛化能力。常见的集成方法包括Bagging(如随机森林)、Boosting(如AdaBoost、Gradient Boosting)、投票等策略。多样性可通过数据、特征、参数、样本等方面引入。集成学习在实际应用中取得成功,对于解决复杂问题、提高模型性能具有广泛应用。
Smileyan
2024.01.04 00:05
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!