集成学习(理论)

目录

  • 一、何为集成学习
  • 二、集成学习最简单的模型:投票策略
  • 三、弱学习器的组合算法:自助聚合(Bagging模型)
    • 1、数据划分方法:自助法(Bootstrap Method)
    • 2、Bagging 策略
    • 3、Bagging 模型的典型用例:随机森林(Random Forest)
  • 四、弱学习器的组合算法:提升法(Boosting模型)
    • 1、自适应提升(Adaboost)
    • 2、梯度提升(Gradient Boosting)
  • 五、弱学习器的组合算法:堆叠法(Stacking模型)
  • 六、实战部分

一、何为集成学习

集成学习(Ensemble Learning),通过构建并结合多个学习器来完成学习任务。一般结构是:先产生一组“个体学习器”,再用某种策略将它们结合起来。结合策略主要有平均法、投票法和学习法等。因此,有时也称集成学习为多学习器系统(multiclassifier system)、基于委员会的学习(committee-based learning)。

集成学习主要用来提高模型(分类,预测,函数估计等)的性能,或用来降低模型选择不当的可能性(如用于减小方差的 Bagging 算法、降低偏差的 Boosting 算法或改进预测的 Stacking 算法等。

集成学习有许多集成模型,如自助聚合、随机森林、提升法、 堆叠法以及许多其它模型。集成方法的思想正是通过上述模型来将不同个体学习器(也称“基学习器”或“弱学习器”)的偏置或方差结合起来,从而创建一个更强的学习器(或集成模型),以获得更好的性能。

下面介绍三种旨在组合弱学习器的元算法:

  • 自助聚合(Bagging):该方法通常考虑的是同质弱学习器。其相互独立地并行训练这些弱学习器,并按照某种确定性的平均过程将它们组合起来。
  • 提升法(Boosting):该方法通常考虑的也是同质弱学习器。它以一种高度自适应的方法顺序地学习这些弱学习器(每个基础模型都依赖于前面的模型,即串行训练),并按照某种确定性策略将它们组合起来(尝试在每次分类中都将上一次分错的数据权重提高一点再进行分类,来获得一个强分类器)。
  • 堆叠法(stacking):该方法通常考虑的是异质弱学习器。通过并行地训练这些弱学习器,然后再构建一个元模型来组合不同弱模型的预测结果,并输出最终预测结果。

粗略来看,Bagging 的重点在于获得一个方差比其组成部分更小的集成模型,而 Boosting 和 Stacking 则注重生成偏置比其组成部分更低的强模型(方差也随之减小)。


二、集成学习最简单的模型:投票策略

测试时,对待测样本分别选取不同分类器进行,然后再汇总各分类器的结果进行汇总。汇总策略主要有平均法、投票法和学习法等。这里说一下投票法的两种方式:

  1. 硬投票:在所有分类器预测的结果里,选择出现频次最高的(少数服从多数)。采取这样的投票策略时,下图展示的集成学习模型则认为待预测样本应被归类为 1 类(3 > 1);
  2. 软投票:将所有分类器预测的结果进行加权平均,然后再选择可能性最大的(这就要求各分类器能得到概率值)。采取这样的投票策略时,下图展示的集成学习模型则认为待预测样本应被归类为 2 类。


三、弱学习器的组合算法:自助聚合(Bagging模型)

并行化方法的最大特点是可以单独且同时训练不同学习器。最著名的方法是自助聚合(Bagging,全称是 Bootstrap Aggregation),它的目标是生成比单个模型更棒的集成模型。其实现思路是:并行训练多个弱学习器 f i ( x ) f_i(x) fi​(x) ,并取平均值作为最终的预测结果。即: f ( x ) = 1 M ∑ m = 1 M f m ( x ) f(x)=\frac1M\sum_{m=1}^Mf_m(x) f(x)=M1​∑m=1M​fm​(x)(从该式可以看出,最终的预测结果将更加平滑,方差会大幅降低)。

对于每个弱学习器,我们自然希望他它们能在某个方面取得较好的拟合效果(或者说,每个学习器都尽量对不一样的数据进行拟合,否则大家都训练统一的数据将毫无意义)。这样一来,在最终集成时就能汇总大家的长处,来共同组成一个在各方面都不错的集成模型。于是,我们需要设计一种方法,使得一份数据集能够被合理地划分为不同训练集。自助法显然是一个不错的方案。

1、数据划分方法:自助法(Bootstrap Method)

自助法:从给定训练集中有放回地进行均匀抽样。

假设给定的数据集包含 n 个样本,接下来对该数据集进行有放回地抽样 k 次,这将产生含 k 个样本的训练集。由于采样时对每个样本都有放回,则用这样的方式得到的训练集很可能会包含一些重复样本(即某些样本在该训练集中出现多次)。

在某些假设条件下,这些样本具有非常好的统计特性:在一级近似中,它们可以被视为“直接从真实的底层(并且往往是未知的)数据分布中抽取出,并且彼此之间相互独立”。因此,它们被认为是真实数据分布的代表性和独立样本。为了使这种近似成立,需要最大限度地满足以下两点:

  1. 初始数据集的大小 n 应该足够大,以服从底层分布的大部分复杂性。这样,从数据集中抽样就是从真实分布中抽样的良好近似(代表性)。
  2. 与自助样本的大小 k 相比,数据集的规模 n 要足够大,这样样本之间就不会有太大的相关性(独立性)。

2、Bagging 策略

在对数据进行合理划分后,就能对其分别构建弱学习器,并在最后进行汇总。这个步骤可归结如下:

  1. 首先对训练数据集进行多次采样,保证每次得到的采样数据都是不同的;
  2. 分别训练多个同质的模型,例如树模型;
  3. 预测时需得到所有模型的预测结果再进行集成。

3、Bagging 模型的典型用例:随机森林(Random Forest)

Bagging 模型最典型的例子就是随机森林(Random Forest)。
随机是指数据采样随机,特征选择随机;森林则是指,一片森林由多棵决策树构成。

随机森林的优势在于:

  1. 能处理高纬度的数据(不用专门做特征选择);
  2. 训练后得到的模型能反映出哪些特征比较重要;
  3. 并行算法,执行速度较快;
  4. 具有可解释性,且便于进行可视化展示(实战部分会证明这一点)。

四、弱学习器的组合算法:提升法(Boosting模型)

顺序化方法的主要思路是对模型进行迭代拟合,即每次构建模型时都依赖于其在前一步所构建的模型。对于采取顺序化方法组合的弱模型而言,彼此之间不再独立,而是存在一种后者依赖于前者的关系。在顺序化方法中,提升法(Boosting) 是最著名的一种,由它生成的集成模型通常比组成该模型的弱学习器偏置更小。通俗地说就是,提升法认为:每加入一个新的弱学习器就一定要带来正收益,使得最终的集成模型更强。

Boosting 和 Bagging 的工作思路相同:构建一系列模型,将它们聚合起来得到一个性能更好的强学习器。然而,与重点在于减小方差的 Bagging 不同,Boosting 着眼于以一种适应性很强的方式顺序拟合多个弱学习器:序列中每个模型在拟合的过程中,会更加重视那些 “序列之前的模型处理很糟糕的观测数据” 。直观地说,每个模型都把注意力集中在目前最难拟合的观测数据上。这样一来,在该过程的最后,就能获得一个具有较低偏置的强学习器(显然,方差也会降低)。

和 Bagging 一样,Boosting 也可以用于回归和分类问题。由于其重点在于减小偏置,所以用 Boosting 基础模型的通常是那些低方差高偏置的模型。例如,如果想要使用树作为基础模型,我们将主要选择只有少许几层的较浅决策树。而选择低方差高偏置模型作为 Boosting 弱学习器的另一个重要原因是:这些模型拟合的计算开销较低(参数化时自由度较低)。实际上,由于拟合不同模型的计算无法并行处理(与 Bagging 最大的不同之处),因此顺序拟合若干复杂模型会导致计算开销变得非常高。

一旦选定了弱学习器,我们仍需要定义它们的拟合方式和聚合方式。这便引出两个重要的 Boosting 算法:自适应提升(Adaboost)和梯度提升(Gradient Boosting)。简单说来,这两种元算法在顺序化的过程中创建和聚合弱学习器的方式存在差异:

  • 自适应提升算法:会更新附加给每个训练数据集中观测数据的权重;
  • 梯度提升算法:会更新每个训练数据集中观测数据的值。

产生以上差异的主要原因是:两种算法解决优化问题(寻找最佳模型——弱学习器的加权和)的方式不同。

1、自适应提升(Adaboost)

自适应提升(Adaboost)算法的核心思想是:上一次分类错误的数据,接下来需要重点关注(就像上学时,我们的错题本)。因此,Adaboost 通过在训练样本数据时,不断修正对这些数据的权重,以此达到“对症下药”的目的,从而提高最终集成模型的分类效果。

在自适应提升算法中,我们将集成模型定义为 L 个弱学习器的加权和:

s L ( ⋅ ) = ∑ l = 1 L c l × w l ( ⋅ ) s_L(·)=\sum_{l=1}^Lc_l×w_l(·) sL​(⋅)=l=1∑L​cl​×wl​(⋅)

其中 c l c_l cl​ 为权重系数(可理解为弱学习器的地位评估), w l w_l wl​ 为弱学习器的拟合参数(可理解为弱学习器)。于是,求解集成模型就变为使上式参数最佳的一个优化问题(找到给出最佳整体加法模型的所有系数和弱学习器)。在一步之内“寻找使上式最优的参数”,这无疑是一个非常困难的优化问题。但是,我们可以采取更易于处理的迭代优化方式。也就是说,可以顺序地将弱学习器逐个添加到当前集成模型中,并在每次迭代时寻找可能的最佳组合(系数、弱学习器)。此时,可将某次迭代时的 s l ( ⋅ ) s_l(·) sl​(⋅) 定义为:

s l ( ⋅ ) = s l − 1 ( ⋅ ) + c l × w l ( ⋅ ) s_l(·)=s_{l-1}(·)+c_l×w_l(·) sl​(⋅)=sl−1​(⋅)+cl​×wl​(⋅)

其中, c l c_l cl​ 和 w l w_l wl​ 是被挑选出来使得 s l ( ⋅ ) s_l(·) sl​(⋅) 最适合的参数,因此这是对 s l − 1 ( ⋅ ) s_{l-1}(·) sl−1​(⋅) 的最佳可能改进。我们可以进一步将其表示为:

( c l , w l ( ⋅ ) ) = a r g c , w ( ⋅ ) m i n { E ( s l − 1 ( ⋅ ) + c l × w ( ⋅ ) ) } = a r g c , w ( ⋅ ) m i n ( ∑ l = 1 n e ( y l , s l − 1 ( x n ) + c l × w ( x n ) ) ) \left(c_l,w_l\left(·\right)\right) = arg_{c,w(·)}min\{E\left(s_{l-1}(·)+c_l×w(·)\right)\}= arg_{c,w(·)}min\left(\sum_{l=1}^ne\left(y_l,s_{l-1}(x_n)+c_l×w(x_n)\right)\right) (cl​,wl​(⋅))=argc,w(⋅)​min{E(sl−1​(⋅)+cl​×w(⋅))}=argc,w(⋅)​min(l=1∑n​e(yl​,sl−1​(xn​)+cl​×w(xn​)))

其中, E ( ⋅ ) E(·) E(⋅) 是给定模型的拟合误差, e ( ⋅ ) e(·) e(⋅) 是损失(误差)函数。因此,我们并没有在求和过程中对全部(L个)模型进行全局优化,而是通过局部优化来将近似最优系数以及弱学习器逐个添加到强模型中。

特别的是,在考虑二分类问题时,可将 Adaboost 算法写入以下过程:

  1. 更新数据集中观测数据的权重,并以此训练新的弱学习器(该学习器将重点关注当前集成模型误分类的观测数据);
  2. 根据一个表示该弱模型性能的更新系数,将弱学习器添加到加权和中(显然,弱学习器的性能越好,其对强学习器的贡献就越大,则对应的更新系数也越大)。

基于此,假设面对具有 n 个观测数据的数据集,则在给定一组弱模型的情况下用 Adaboost 算法求解时,其过程如下:

  1. 算法开始,置所有观测数据相同权重 1 n \frac1n n1​;
  2. 重复以下步骤 L 次(定义了 L 个弱学习器):
    ① 基于当前观测数据的权重拟合可能的最佳弱模型;
    ② 计算更新系数的值(更修系数是弱学习器的某种量化评估指标,表示其相对集成模型来说,该弱学习器的分量如何);
    ③ 添加新的弱学习器及其更新系数的乘积,并由该乘积来更新强学习器接下来要学习的观测数据的权重,该权重表示了在下一轮迭代中会重点关注哪些观测数据(在当前集成模型中,预测错误的观测数据其权重将增加,而预测正确的观测数据其权重则减小)。

重复以上步骤,就能顺序地构建出 L 个模型,并将它们聚合成一个简单的线性组合,最后再由表示每个学习器性能的系数加权。注意,初始 Adaboost 算法有一些变体,比如 LogitBoost(分类)或 L2Boost(回归),它们的差异主要取决于损失函数的选择。

2、梯度提升(Gradient Boosting)

梯度提升(Gradient Boosting)是一种常用于回归和分类问题的集成学习算法,主要以弱预测模型(通常是决策树)集合的形式产生预测模型。聚合算法汇聚不同弱学习器的结果,然后采取均值或投票方式产生最终结果,而梯度提升则是把所有学习器的结果累加起来得出最终结论。梯度提升的核心在于,每一个学习器学习的目标是之前所有学习器结论之和的残差。比如,小明的真实贷款额度为 1000,第一个学习器预测出是 950,差了 50,即残差为 50;那么在第二个学习器里,就需要把小明的贷款额度设为 50 去学习,如果第二个学习器在测试时真的能把小明的贷款额度预测为 50,则累加两个学习器的结果就是小明的真实贷款额度;如果第二个学习器的预测结果是 45,则仍然存在 5 的残差,那第三个学习器里小明的贷款额度就变成 5,继续学习……这就是梯度提升的算法流程。

提升算法的主要思想是每步产生一个弱学习器,并不断把弱学习器加权累加到总模型当中,其基本公式如下:

F L ( x ) = ∑ i = 1 L c i w i ( x ) F_L(x)=\sum_{i=1}^Lc_iw_i(x) FL​(x)=i=1∑L​ci​wi​(x)

其中,

【机器学习】集成学习(理论)相关推荐

  1. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  2. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  3. 机器学习 - [集成学习]Bagging算法的编程实现

    机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...

  4. 深入理解机器学习——集成学习(Ensemble Learning):基础知识

    分类目录:<深入理解机器学习>总目录 集成学习基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好.实际上,就是" ...

  5. 机器学习集成学习与模型融合!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle ...

  6. 【机器学习基础】浅析机器学习集成学习与模型融合

    作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物.集成学习可谓是上分大杀器,今天就跟大家分享在Kagg ...

  7. 深度学习auc_机器学习集成学习与模型融合!

    ↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle比赛 ...

  8. 机器学习集成学习与模型融合

    来源:Datawhale 本文约5955字,建议阅读10分钟. 本文介绍在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器---集成学习. 对比过kaggle比赛上面的top10的模型,除了深度 ...

  9. 通俗易懂的机器学习——集成学习

    集成学习 普通决策树与随机森林的对比 生成circles数据集 画图函数 使用决策树进行预测 构建决策树并训练 画图 交叉验证 使用Voting Classifier 投票 构建投票分类器 画图 So ...

  10. 机器学习--集成学习--Bagging,Boosting,Stacking

    在一些数据挖掘竞赛中,后期我们需要对多个模型进行融合以提高效果时,常常会用到Bagging,Boosting,Stacking等这几个框架算法.下面就来分别详细讲述这三个框架算法.这里我们只做原理上的 ...

最新文章

  1. 量子计算 qiskit_将Tensorflow和Qiskit集成到量子机器学习中
  2. 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
  3. gRPC的平滑关闭和在Kubernetes上的服务摘流方案总结
  4. 【python】为本地乌云漏洞库/知识库生成目录
  5. python和c++哪个好-C#、C++、Java、Python 选择哪个好?
  6. BATJ等大厂最全经典面试题分享
  7. C语言图形库简单对比及EGE库的安装小手册
  8. Chrome插件:OneNote Web Clipper 搜集和整合碎片信息的神器
  9. 算法分析与设计实验报告四——回溯法实验
  10. 基于主成分分析法的PCA人脸识别算法实现
  11. cannot import name 'izip_longest'
  12. 很早以前就想要的东西,没想到今天会“妙手偶得”
  13. 亿沃钛计算机科技有限公司怎么样,2017年8月联通沃指数发布:高德地图活跃用户2.17亿,排名行业第一...
  14. 用MVC写的查询,添加,删除,修改,登录。
  15. 计算机考研高数范围,考研数学一范围
  16. js实现图片拖拽,定点缩放,旋转 (二)
  17. VMware修改主机名
  18. 零成本学arduino教程——74hc165扩展寄存器教程
  19. 智慧景区电子票务系统人脸识别售检票基本思路
  20. Qt 按钮控件虚线框

热门文章

  1. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql;Task3:谓词、CASE
  2. Java基础入门(二)——JDK、JRE与JVM
  3. 驱动程序编写基本流程
  4. android 录音 mediaRecorder
  5. Excel中计算票面利率Coupon Rate
  6. 覆盖件的冲压工艺包括拉深、修边、翻边等多道工序
  7. 0319 复利计算器4.0
  8. 伊利的信心,潘刚的远方
  9. 多项目与项目组合管理专家胡立
  10. 基于PIE-Engine的耕地“非农化”“非粮化”智能监测平台应用