当前位置: 首页 > 科技观察

常用模型集成方法介绍:bagging、boosting、stacking_0

时间:2023-03-21 18:31:25 科技观察

本文将讨论一些众所周知的概念,例如bootstrapping、bagging、随机森林、boosting、stacking和许多其他基本的集成学习模型。为了使所有这些方法之间的联系尽可能清晰,我们将尝试在更广泛、更合乎逻辑的框架中呈现它们,希望读者更容易理解和记忆。什么是集成方法?集成学习是一种机器学习范式。在集成学习中,我们训练多个模型(通常称为“弱学习器”)来解决同一个问题,并将它们组合起来以获得更好的结果。最重要的假设是,当弱模型被正确组合时,我们可以获得更准确和/或更稳健的模型。在集成学习理论中,我们将弱学习器(或基础模型)称为“模型”,这些模型可以用作设计更复杂模型的构建块。在大多数情况下,这些基本模型本身并不能很好地执行,要么是因为它们具有高偏差(例如,低DOF模型),要么是因为它们的方差太大而不稳健。强(例如,高自由度模型)。集成方法的思想是通过组合这些弱学习器的偏差和/或方差来创建“强学习器”(或“集成模型”)以获得更好的性能。组合弱学习器为了构建集成学习方法,我们首先选择要聚合的基础模型。在大多数情况下(包括众所周知的bagging和boosting方法),我们使用单一的基础学习算法,因此我们拥有以不同方式训练的同质弱学习器。由此产生的整体被称为“同质的”。然而,也有使用不同种类的基本学习算法的方法:将一些异构的弱学习器组合成“异构集成模型”。重要的是要注意,我们对弱学习器的选择应该与我们聚合这些模型的方式一致。如果我们选择低偏差和高方差的基础模型,我们应该使用倾向于降低方差的聚合方法;而如果我们选择低方差和高偏差的基础模型,我们应该使用倾向于减少有偏差的聚合方法的聚合方法。这就引出了如何组合这些模型的问题。我们可以使用三种主要的旨在组合弱学习器的“元算法”:bagging,它通常考虑同质的弱学习器,相互独立地并行学习这些弱学习器,并遵循一些确定性的平均过程将它们组合起来。Boosting,这种方法通常考虑同质弱学习器。它以高度自适应的方式顺序学习这些弱学习器(每个基础模型都依赖于先前的模型),并根据某种确定性策略将它们组合起来。Stacking,这种方法通常考虑异构弱学习器,并行学习它们,通过训练一个“元模型”将它们组合起来,根据不同弱模型的预测结果输出最终的预测结果。非常粗略地说,我们可以说bagging专注于获得一个方差低于其组件的集成模型,而boosting和stacking将主要产生比其组件具有更低偏差的强模型(即使方差也可以降低)。在接下来的部分中,我们将详细介绍bagging和boosting方法(它们比堆叠方法使用更广泛,并允许我们讨论集成学习的一些关键概念),然后简要概述堆叠方法。我们可以结合弱学习者来获得性能更好的模型。组合基本模型的方法应该适合这些模型的类型。1.关于Bagging在“parallelizedapproach”中,我们分别适合不同的学习者,所以他们可以同时训练。最先进的方法是“装袋”(代表“自助服务聚合”),旨在生成比单个模型更健壮的集成模型。Bootstrap:这种统计技术从随机抽取B个观测值作为代理开始,然后从大小为N的初始数据集生成大小为B的样本(称为bootstrap样本)。bootstrap抽样过程示意图在某些假设下,这些样本具有非常好的统计特性:初步近似,它们可以被视为直接从真实的底层(通常是未知的)数据分布中提取,并且彼此独立。因此,它们被认为是真实数据分布的代表性独立样本(几乎独立同分布的样本)。为了使这个近似成立,必须验证两个假设。首先,初始数据集的大小N应该足够大,以捕获底层分布的大部分复杂性。通过这种方式,从数据集中采样可以很好地近似(表示)从真实分布中采样。其次,与引导样本的大小B相比,数据集的大小N应该足够大,这样样本之间就没有太多的相关性(独立性)。请注意,我稍后可能还会提到bootstrap样本的这些属性(代表性和独立性),但读者应始终牢记:“这只是一个近似值”。例如,bootstrap样本通常用于评估统计估计量的方差或置信区间。根据定义,统计估计量是某些观测值的函数。因此,根据这些观察值计算随机变量的方差。为了评估这种估计量的方差,我们需要对从兴趣分布中抽取的几个独立样本进行估计。在大多数情况下,与实际可用的数据量相比,考虑真正独立样本所需的数据量可能太大。但是,我们可以使用bootstrap方法生成一些可以认为是“最具代表性”和“最独立”(几乎独立同分布的样本)的bootstrap样本。这些引导样本允许我们通过估计每个样本的值来近似估计器的方差。Bootstrap方法常用于评估某些统计估计量的方差或置信区间。2.关于Boosting在“sequentialmethod”中,不同的weakmodels组合起来不再是相互独立拟合。这个想法是“迭代地”拟合模型,以便模型在给定步骤的训练取决于前面步骤中拟合的模型。“提升”是这些方法中最先进的,它产生的集成模型通常比构成模型的弱学习器偏差更小。(1)Boosting方法Boosting方法和bagging方法的工作思路是一样的:我们构建一系列的模型,然后聚合它们以获得一个性能更好的强学习器。然而,与侧重于减少方差的bagging不同,boosting侧重于以自适应方式顺序拟合多个弱学习器:序列中的每个模型都更加关注这些序列,因为它适合先前模型中的观察数据。直观地说,每个模型都关注当前最难拟合的观察结果。这样,在过程结束时,我们获得了一个具有较低偏差的强学习器(我们会注意到提升也具有减少方差的效果)。和bagging一样,Boosting也可以用于回归和分类问题。由于重点是减少偏差,因此用于提升的基础模型通常是那些具有低方差和高偏差的模型。例如,如果我们想使用树作为基础模型,我们将主要选择只有几层的较浅的决策树。选择低方差高偏差模型作为提升弱学习器的另一个重要原因是拟合这些模型的计算开销低(参数化自由度低)。在实践中,顺序拟合多个复杂模型的计算量可能会非常大,因为拟合不同模型的计算无法并行处理(与bagging不同)。一旦选择了弱学习器,我们还需要定义它们的拟合方法(拟合当前模型时应该考虑前一个模型的哪些信息?)和聚合方法(如何将当前模型聚合到前一个模型中?)在接下来的两个小节,我们将讨论这些问题,并特别介绍两种重要的增强算法:自适应增强(adaboost)和梯度增强(gradientboosting)。简而言之,两种元算法在序列化过程中创建和聚合弱学习器的方式有所不同。自适应提升更新每个训练数据集中观察值的权重,而梯度提升更新那些观察值。这里差异的主要原因是两种算法以不同的方式解决优化问题(找到最佳模型-弱学习者的加权和)。Boosting迭代地拟合弱学习器,将其聚合成一个集合,并“更新”训练数据集以在拟合下一个基础模型时更好地考虑当前集合的优势和劣势。(2)Adaptiveboosting在adaptiveboosting(通常称为“adaboost”)中,我们将集成模型定义为L个弱学习器的加权和,其中c_l是系数,w_l是弱学习器。**集成模型是一个“困难的优化问题”。因此,我们不是一次性解决问题(找到所有系数和弱学习器以提供最佳的整体加性模型),而是使用更易于处理的“迭代优化程序”(即使它可能会导致我们获得次优解决方案)。此外,我们将弱学习器一一添加到当前的集成模型中,在每次迭代中寻找最佳组合(系数、弱学习器)。换句话说,我们递归地定义s_l如下:其中选择c_l和w_l使得s_l是最适合训练数据的模型,因此这是对s_(l-1)的最佳改进。我们可以进一步将其表示为:其中E(.)是给定模型的拟合误差,e(.,.)是损失/误差函数。因此,我们不是在求和时“全局优化”所有L个模型,而是通过“局部”优化来逼近最优解,并将弱学习器一一添加到强模型中。更具体地说,当考虑二元分类问题时,我们可以按如下方式重写adaboost算法:首先,它将更新数据集中观测值的权重,训练一个新的弱学习器,该学习器专注于模型错误分类的当前集成观测值。其次,它根据代表该弱模型性能的更新系数将弱学习器添加到加权和中:弱学习器表现越好,它对强学习器的贡献就越大。因此,假设我们面临一个二元分类问题:数据集中有N个观测值,我们想在给定一组弱模型的情况下使用adaboost算法。在算法开始时(序列中的第一个模型),所有观察值都具有相同的权重“1/N”。然后,我们重复以下步骤L次(作用于序列中的L个学习器):用当前观测数据的权重拟合最弱的可能模型,计算更新系数的值,也就是弱学习器的值一些一种标量化评价指标,表示弱学习器的组件相对于集成模型如何更新强学习器的权重,通过添加新的弱学习器与其更新系数的乘积来计算新的观测数据,这代表我们下一次迭代要关注哪些观测数据(聚合模型预测错误的观测数据的权重增加,正确预测的观测数据的权重减小)重复这些步骤,我们依次构建L个模型,并将它们聚合成一个简单的线性组合,然后用代表每个学习者表现的系数进行加权。请注意,原始adaboost算法有一些变体,例如LogitBoost(分类)或L2Boost(回归),它们的主要区别在于损失函数的选择。Adaboost在每次迭代时更新观察值的权重。相对于错误分类的观察结果,正确分类的观察结果被加权。在最终的集成模型中,性能更好的模型具有更高的权重。Stacking概述Stacking在两个主要方面不同于bagging和boosting。首先,Stacking通常考虑异构弱学习器(不同学习算法组合),而bagging和boosting主要考虑同质弱学习器。其次,stacking学习将基础模型与元模型结合起来,而bagging和boosting则根据确定性算法将弱学习器结合起来。Stacking上面提到,stacking的概念是学习几个不同的弱学习器,通过训练一个元模型将它们组合起来,然后根据这些弱模型返回的多个预测结果输出最终的结果。预测结果。因此,要构建堆叠模型,我们需要定义两件事:我们要拟合的L个学习器和将它们组合起来的元模型。例如,对于分类问题,我们可以选择KNN分类器、逻辑回归和SVM作为弱学习器,并决定学习神经网络作为元模型。然后,神经网络将三个弱学习器的输出作为输入,并根据该输入返回最终预测。因此,假设我们想要拟合L个弱学习器的堆叠集成。我们必须遵循以下步骤:将训练数据分成两组选择L个弱学习器并使用它们来拟合第一组数据让L个学习器中的每一个对第二组数据中的观察数据进行测试PredictionsFit第二组数据上的元模型,使用弱学习器所做的预测作为输入在上一步中,我们将数据集一分为二,因为用于训练弱学习器的数据的预测与训练的相同元模型不相关。因此,将数据集一分为二的一个明显缺点是我们只有一半数据用于训练基础模型,另一半数据用于训练元模型。为了克服这个限制,我们可以使用某种“k折交叉训练”方法(类似于k折交叉验证中所做的)。这样,所有的观察都可以用来训练元模型:对于任何观察,弱学习器的预测都是通过这些弱学习器在k-1折数据(不包括被考虑的观察)上的训练实例来完成的.换句话说,它训练k-1次折叠并预测剩余的一次。通过迭代地重复这个过程,可以获得任何折叠的观测数据的预测结果。这使我们能够为数据集中的每个观察生成相关预测,然后使用所有这些预测来训练元模型。堆叠方法训练一个元模型,该模型根据较低层中较弱的学习者返回的输出产生最佳输出。原文链接:https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205(id:almosthuman2014)”]点此阅读更多本作者好文