集成学习,又称为“多分类器系统”(multi-classifier system)“基于委员会的学习”(committee-based learning)等。基本的想法是结合多个学习器,获得比单一学习器泛化性能更好的学习器。

根据个体学习器的生成方式,目前集成学习大致可分为两大类:

  • 序列化方法:个体学习器间存在强依赖关系、必须串行生成,代表是Boosting
  • 并行化方法:个体学习器间不存在强依赖关系、可同时生成,代表是Bagging“随机森林”(Random Forest)

一、利用Hoeffding不等式估算集成学习的错误率上界


考虑二分类问题y∈{-1, +1},真实函数f,并假定基分类器错误率为ε。假设集成通过简单投票结合T个基分类器,i.e.若超过半数的基分类器正确,则集成分类器正确:

接下来估算集成的错误率。首先,有下式

设基分类器正确率为p,由Hoeffding不等式,当n=(p - )T时,成立下述不等式

由n = T/2, p = 1-ε 得=1/2 - ε, 于是

上式估算出了集成学习错误率的上界,且从中可以看出,随着集成中个体分类器数目T的增大,集成的错误率将指数级下降,最终趋于零。

值得注意的是,以上分析基于的假设是基学习器相互独立。然而,在现实问题中,个体学习器为解决同一问题而训练,并不相互独立。因此上述分析只是理论层面,实际问题的解决,还需要深入了解前文提到的序列化与并行化方法。

二、Boosting族算法


Boosting是一族可将弱学习器提升为强学习器的算法,工作机制类似:先由初始训练集训练出基学习器,再根据其表现调整样本分布,赋予未被准确分类的样本更高的权重,然后根据调整后的样本分布再训练接下来的基分类器;重复进行,直至全部T个基学习器训练完成,再对T个基学习器加权结合。

Boosting族算法中以AdaBoost(Adapative Boosting)最为著名。设yi∈{-1, +1}, f是真实函数,AdaBoost的描述如下:

输入:训练集D = {(x1, y1), (x2, y2), ..., (xm, ym)}; 基学习算法; 训练轮数T.

过程:

1: D1 = 1/m. //初始化训练数据的权值分布,每个训练样本被赋予相同的权重

2: for t = 1 to T do

3:     ht(D, Dt); //基于分布Dt从数据集D中训练出分类器ht

4:     εt = Px~Dt(ht(x) ≠ f(x));

5:     if εt > 0.5 then break //检查基学习器是否比随机猜测好;不满足则学习器被抛弃,学习终止。重采样(re-sampling)后重新训练。

6:     αt = (1/2) * ln((1 - εt) / εt); //确定分类器ht的权重,被误分的样本的权值会增大,被正确分类的权值减小,推导过程见p.175

7:     Dt+1(x) = 

= (Dt(x) * exp(-αt * f(x) * ht(x))) / Zt; //”重赋权法“(re-weighting)更新样本分布,其中Zt是规范化因子,推倒见p.176

8: end for 

输出: H(x) = sign(∑Tt=1αtht(x)) //输出最终的强分类器

在该算法过程中,用的是“加性模型”(additive model)推导,即根据基学习器的线性组合来最小化指数损失函数(exponential loss function)

sign(H(x))可以达到贝叶斯最优错误率。这是因为,由损失函数对H(x)的偏导

为零可以解得

于是

即,若H(x)可以让损失函数最小化,则分类错误率也将最小化。

三、Bagging与随机森林


Bagging(Bootstrap AGGregatING)是并行集成学习最著名的代表。它直接基于自主采样法(bootstrap sampling): 采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器结合。对预测输出进行结合时,对分类任务采取简单投票法,对回归任务使用简单平均法。

Bagging的算法描述如下:

输入:训练集D = {(x1, y1), (x2, y2), ..., (xm, ym)}; 基学习算法; 训练轮数T.

过程:

1. for t = 1 to T do

2.     ht = (D, Dbs);

3. end for

输出:H(x) = 

算法的复杂度为T(O(m) + O(s)),其中O(m)为基学习器的计算复杂度,O(s)为采样与投票/平均过程的计算复杂度。由于O(s)与T很小,因此算法复杂度可看作O(m)。可见Bagging是比较高效的。此外,与AdaBoost只适用于二分类任务不同,Bagging可以直接用于多分类、回归等任务。

此外,由于每个基学习器只用了初始训练集中约63.2%的样本,剩下的样本可用作验证集来对泛化能力进行“包外估计”(out-of-bag estimate)

Bagging关注降低方差,在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更佳明显。

随机森林(Random Forest, RF)在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入随机属性选择。

四、结合策略


学习器结合可能的优点:

  • 提升泛化性能
  • 降低陷入局部极小的风险
  • 假设空间有所扩大,有可能学得更好的近似

接下来总结几种常见的结合策略。

4.1 平均法

对数值型输出,常用平均法(averaging)

  • 简单平均法(simple averaging)

  • 加权平均法(weighted averaging)

其中,加权平均法的权重一般从训练数据中学习得到。但由于噪声干扰和过拟合问题,加权平均法也未必优于简单平均法。一般而言,个体学习器性能相差较大时,宜用加权平均法,否则宜用简单平均法。

4.2 投票法

对分类任务,最常见的是用投票法(voting)。将hi在样本x上的预测输出表示为一个N维向量(h1i(x), h2i(x), ..., hNi(x)),其中hji(x)是hi在类别标记cj上的输出。则投票法包括:

  • 绝对多数投票法(majority voting)

  • 相对多数投票法(plurality voting)

  • 加权投票法(weighted voting)

在不允许绝对预测的任务中,绝对多数、相对多数投票法被统称为“多数投票法”。

现实任务中,不同类型学习器可能产生不同的hji(x)值,常见的包括类标记和类概率。

值得注意的是,不同类型的预测值hji(x)不能混用。对一些能在预测出类别标记的同时产生分类置信度的学习器,其分类置信度可转化为类概率使用。若此类值为进行规范化,如支持向量机的分类间隔值,则需要采用Platt缩放(Platt scaling)、等分回归(isotonic regression)等技术对结果进行“校准”(calibration)后才能作为类概率使用。

4.3 学习法

训练数据很多时,可采用学习法:通过另一个学习器进行结合。Sacking是学习法的典型代表。这里将个体学习器称为初级学习器,用于结合的学习器称为次级学习器,或元学习器(meta-learner)

Stacking算法描述如下:

输入:训练集D = {(x1, y1), (x2, y2), ..., (xm, ym)}; 初级学习算法; 次学习算法.

过程:

1: for t = 1 to T do

2:     ht = ; //使用初级学习算法产生初级学习器ht

3:  end for

4: D' = Ø; //生成次级训练集

5: for i = 1 to m do

6:     for t = 1 to T do

7:         zit = ht(xi);

8:     end for

9:     D' = D' ∪ ((zi1, zi2, ..., ziT), yi);

10: end for

11: h' = ; //在D'上用次级学习算法产生次级学习器h'

输出:H(x) = h'(h1(x), h2(x), ..., hT(x))

次级学习器的输入属性和算法对集成的泛化能力有很大影响。具体见书pp.184-185。

集成学习(ensemble learning)的更多相关文章

  1. 【Supervised Learning】 集成学习Ensemble Learning & Boosting 算法(python实现)

    零. Introduction 1.learn over a subset of data choose the subset uniformally randomly (均匀随机地选择子集) app ...

  2. 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting

    本杂记摘录自文章<开发 | 为什么说集成学习模型是金融风控新的杀手锏?> 基本内容与分类见上述思维导图. . . 一.机器学习元算法 随机森林:决策树+bagging=随机森林 梯度提升树 ...

  3. 集成学习(Ensembling Learning)

    集成学习(Ensembling Learning) 标签(空格分隔): 机器学习 Adabost 对于一些弱分类器来说,如何通过组合方法构成一个强分类器.一般的思路是:改变训练数据的概率分布(权值分布 ...

  4. 集成学习ensemble

    集成学习里面在不知道g的情况下边学习边融合有两大派:Bagging和Boosting,每一派都有其代表性算法,这里给出一个大纲. 先来说下Bagging和Boosting之间的相同点:都是不知道g,和 ...

  5. 集成学习(ensemble method)--基于树模型

    bagging方法(自举汇聚法 bootstrap aggregating) boosting分类:最流行的是AdaBoost(adaptive boosting) 随机森林(random fores ...

  6. 集成算法——Ensemble learning

    目的:让机器学习效果更好,单个不行,群殴啊! Bagging:训练多个分类器取平均 Boosting:从弱学习器开始加强,通过加权来进行训练 (加入一棵树,比原来要强) Stacking:聚合多个分类 ...

  7. 【软件分析与挖掘】Multiple kernel ensemble learning for software defect prediction

    摘要: 利用软件中的历史缺陷数据来建立分类器,进行软件缺陷的检测. 多核学习(Multiple kernel learning):把历史缺陷数据映射到高维特征空间,使得数据能够更好地表达: 集成学习( ...

  8. 集成学习中的 stacking 以及python实现

    集成学习 Ensemble learning 中文名叫做集成学习,它并不是一个单独的机器学习算法,而是将很多的机器学习算法结合在一起,我们把组成集成学习的算法叫做“个体学习器”.在集成学习器当中,个体 ...

  9. 集成学习的不二法门bagging、boosting和三大法宝<结合策略>平均法,投票法和学习法(stacking)

    单个学习器要么容易欠拟合要么容易过拟合,为了获得泛化性能优良的学习器,可以训练多个个体学习器,通过一定的结合策略,最终形成一个强学习器.这种集成多个个体学习器的方法称为集成学习(ensemble le ...

  10. [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林

    [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...

随机推荐

  1. Mac下截屏方法

    Refer to:https://zh.wikihow.com/在Mac-OS-X上截取屏幕截图 先来说几个需要用到的Mac键盘和普通键盘不一样的名字: Mac键盘 普通键盘 control Ctrl ...

  2. [配置] win下maven配置

    下载解压 打开环境变量 新建MAVEN_HOME 路径为maven根文件夹 PATH 末尾添加 %MAVEN_HOME%\bin; 命令行 mvn -v 检查 添加网易maven镜像库 阿里的也可以 ...

  3. Asp.net MVC Form认证,IIS改成集成模式后,FormsAuthentication.SetAuthCookie无效,Request.IsAuthenticated值,始终为false,页面提示HTTP 错误 401.0 - Unauthorized,您无权查看此目录或页面

    最近公司领导要求,IIS网站要由经典模式改为集成模式,以提高性能.改完之后,登录成功跳转到主页之后,页面提示“”HTTP 错误 401.0 - Unauthorized“,“您无权查看此目录或页面”, ...

  4. python logging 日志轮转文件不删除问题的解决方法

    项目使用了 logging 的 TimedRotatingFileHandler : #!/user/bin/env python # -*- coding: utf-8 -*- import log ...

  5. FixedUpdate()使用

    当MonoBehaviour启用时,其 FixedUpdate在每一帧被调用. 处理Rigidbody时,需要用FixedUpdate代替Update.例如:给刚体加一个作用力时,你必须应用作用力在F ...

  6. 《构建之法》chapter5,6 读书心得

    <构建之法>第五章用体育运动等团队例子引出软件开发团队的形式,用更加生活化.形象化的例子让读者更能理解软件开发团队的形式.软件团队形式多样,适用于不同的人员与需求.团队可能会演变的模式有: ...

  7. java-IO流-其他流

    ###22.01_IO流(序列流)(了解) * 1.什么是序列流     * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, ...

  8. 寒假作业 pta编程总结3

    实验代码: 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X).捕 ...

  9. java项目---遍历系统文件(1星)

    package Demo; import java.io.*; public class TraversalContent { public static void main(String []arg ...

  10. Redis事务和实现秒杀功能的实现

    今天带着学生学习了Redis的事务功能,Redis的事务与传统的关系型数据库(如MySQL)有所不同,Redis的事务不能回滚. Redis中使用multi.exec.discard.watch.un ...