本文结构:

  • 什么是集成学习?
  • 为什么集成的效果就会好于单个学习器?
  • 如何生成个体学习器?
  • 什么是 Boosting?
  • Adaboost 算法?

什么是集成学习

集成学习就是将多个弱的学习器结合起来组成一个强的学习器。

这就涉及到,先产生一组‘个体学习器’,再用一个策略将它们结合起来。

个体学习器可以选择:决策树,神经网络。
集成时可以所有个体学习器属于同一类算法:全是决策树,或全是神经网络;也可以来自不同的算法。
结合策略:例如分类问题,可以用投票法,少数服从多数。

之所以用这种集成的思想,是因为单独用一个算法时,效果往往不容易达到很好,但如果多个个体算法结合在一起,取长补短,整体效果就会比单独一个要强。


什么时候集成的效果就会好于单个学习器

当然集成并不是不管怎么选择学习器,怎么组合都一定会获得更好的效果,最好的情况是,每个学习器都不是特别差,并且要具有一定的多样性,否则可能集成后的会没有效果,或者起负作用:

来证明一下:

假设个体学习器的错误率为 ε,

假设错误率相互独立,由 Hoeffding 不等式可得到整体学习器的错误率为:

由不等式的右边可知,如果将学习器的数目 T 逐渐增大,那么整个学习器的错误率将指数级下降,甚至最终趋向于零。


这里提到了‘错误率相互独立’的假设,这就是集成学习的一个核心问题:
如何生成准确性又不是很差,并且还能保证多样性的个体学习器呢

目前主要有两种生成方式:

Boosting:个体学习器间存在强依赖关系,必须串行生成。
Bagging,随机森林:个体之间不存在强依赖关系,可并行生成。


Boosting 思想:
给定初始训练数据,由此训练出第一个基学习器;
根据基学习器的表现对样本进行调整,在之前学习器做错的样本上投入更多关注;
用调整后的样本,训练下一个基学习器;
重复上述过程 T 次,将 T 个学习器加权结合。

根据 Boosting 的定义,它有三个基本要素:
基学习器
组合方式
目标函数


Boosting 的代表是 Adaboost:
AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。

Adaboost 算法

  • 第 1 行,初始化样本权重分布,此时每个数据的权重是一样的,所以是 1/m;
    以分类问题为例,最初令每个样本的权重都相等,对于第 t 次迭代操作,我们就根据这些权重来选取样本点,进而训练分类器 C_t

  • 第 2 行,进入 for 循环 T 次,即基学习器的个数为 T 个;

  • 第 3 行,根据具有当前权重分布 D_t 的数据集,学习出 h_t
    前一个分类器分错的样本会被用来训练下一个分类器。
    h_t 是分量分类器 C_t 给出的对任一样本点 xi 的标记(+1或-1),h_t(xi) = yi 时,样本被正确分类。

  • 第 4 行,计算当前学习器的误差;

  • 第 5 行,如果误差大于 0.5,就停止;
    AdaBoost 方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。

  • 第 6 行,计算当前学习器的权重 α_t
    权值是关于误差的表达式,当下一次分类器再次错分这些点之后,会提高整体的错误率,这样就导致分类器权值变小,进而导致这个分类器在最终的混合分类器中的权值变小,也就是说,Adaboost算法让正确率高的分类器占整体的权值更高,让正确率低的分类器权值更低,从而提高最终分类器的正确率。

  • 第 7 行,得到下一时刻的权重分布 D_t+1.
    如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost 方法能“聚焦于”那些较难分(更富信息)的样本上。

最后的总体分类的判决可以使用各个分量分类器加权平均来得到,
再取符号,这样,最后对分类结果的判定规则是:


举个例子

图中“+”和“-”表示两种类别,
共10个样本,故每个样本权值为0.1,

第一次划分有3个点划分错误,根据误差表达式得到误差:e1=(0.1+0.1+0.1)/1.0=0.3

分类器权重:

根据算法,对于正确分类的7个点,权值不变,仍为0.1, 对于错分的3个点,权值为:
D1=D0*(1-e1)/e1=0.1*(1-0.3)/0.3=0.2333

第二次分类,有3个 "-" 分类错误,按照算法计算如下:
上轮分类后权值之和为:0.17+0.23333=1.3990
分类误差:e2=0.1*3/1.3990=0.2144
分类器权重 a2=0.6493
错分的3个点权值为:D2=0.1*(1-0.2144)/0.2144=0.3664

第三次:

最后将三次的分类器结合起来,得到上面的分类结果:


接下来看 α_t , D_t 是怎么推导出来的

我们最后学习出来的预测数据的模型为 H:

即强学习器是基学习器的线性组合形式。

目标函数用指数损失函数:

为什么目标函数用指数损失函数?

当我们用指数损失函数时,

我们需要求得 H 使得损失函数达到极小,那么就想到求偏导,

并使其为 0,得到 H 的形式:

那么最终的判定规则为:

说明若指数损失达到最小,则分类错误率也将最小化,也就是说指数损失可以作为分类任务 0 1 损失的替代函数,因为它连续可微,就用它来替代 0 1 损失函数作为优化目标。

第一个基学习器由初始数据得到,之后的 α_t , h_t 都是迭代产生。

第 6 行: α_t

想要求得 α_t 使得 α_t*h_t 最小化指数损失函数:

那就需要对 α_t 求导:

使导数为 0 后得到 α_t 的解为:

第 4,5 行: h_t 的条件

学习到 H_t-1 后,希望下一个 h_t 可以纠正 H_t-1 的全部错误,即使下面的目标函数达到最小:

经过一系列推导后,可得到理想的基学习器为:

即理想的 h_t 将在分布 D_t 下最小化分类误差,也就是在用 D_t 训练 h_t 时,分类误差应小于 0.5。

第 7 行:再推导一下 D_tD_t-1 之间的关系

这样就推导出了 Adaboost 算法。

参考:
《机器学习》
https://zh.wikipedia.org/wiki/AdaBoost
http://blog.csdn.net/iemyxie/article/details/40423907

简书原文地址:https://www.jianshu.com/p/389d28f853c0

机器学习-Adaboost 算法(集成学习)相关推荐

  1. EL之AdaBoost:集成学习之AdaBoost算法的简介、应用、经典案例之详细攻略

    EL之AdaBoost:集成学习之AdaBoost算法的简介.应用.经典案例之详细攻略 目录 AdaBoost算法的简介 1.理解AdaBoost算法 1.1.从前向逐步递增角度来看理解AdaBoos ...

  2. 机器学习笔记之集成学习(四)Gradient Boosting

    机器学习笔记之集成学习--Gradient Boosting 引言 回顾: Boosting \text{Boosting} Boosting算法思想与 AdaBoost \text{AdaBoost ...

  3. 机器学习——Adaboost 算法

    机器学习--Adaboost 算法 资料来源:<MATLAB 神经网络 43 个案例分析> Adaboost算法思想 Adaboost算法的基本思想是合并多个弱分类器来实现更为有效的分类. ...

  4. 机器学习实战-54: 集成学习分类算法(ada-boost)

    集成学习分类算法 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 集成学习分类算法(ada-boost)属于监督学习算法.常用分类算法包括:逻辑回归(Logistic Regress ...

  5. 机器学习算法——集成学习1(个体与集成)

    集成学习(Ensemble Learning)通过构建并结合多个学习器来完成学习任务. 上图为集成学习的一般结构:先产生一组"个体学习器",再用某种策略将它们结合起来. 个体学习器 ...

  6. 【机器学习】boosting集成学习Adaboost

    一.什么是Adaboost AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年 ...

  7. 机器学习中的集成学习模型实战完整讲解

    2019-12-03 13:50:23 集成学习模型实践讲解 --沂水寒城 无论是在机器学习领域还是深度学习领域里面,通过模型的集成来提升整体模型的性能是一件非常有效的事情,当前我们所接触到的比较成熟 ...

  8. 机器学习实战7-sklearn集成学习和随机森林

    集成方法:聚合一组预测器(比如分类器或回归器)的预测,得到的预测结果也比最好的单个预测器要好. 例如,你可以训练一组决策树分类器,每一棵树都基于训练集不同的随机子集进行训练.做出预测时,你只需要获得所 ...

  9. 机器学习笔记系列---集成学习

    集成算法,包括多种形式,顾名思义--可以是多种算法的集成,也可以是一种算法在不同设置下的集成,还可以将数据集的同部分分配不同的分类器,再将这些分类器进行集成.(包括boosting和bagging) ...

最新文章

  1. cmd开无线服务器,使用cmd命令开启wifi
  2. 人造神经元计算速度超过人脑
  3. 如何获取所有Git分支
  4. iBeacon的数据包格式
  5. Android开发之使用TabLayout快速实现选项卡切换功能(附源码下载)
  6. Spoonwep破解wep加密无线路由密码
  7. Python+socket+多线程实现同时应答多客户端的自助聊天机器人
  8. android中实现GPS定位功能,Android中实现GPS定位的简单例子
  9. Java模板回调函数,模板方法与回调函数
  10. 使用DxVcl为Python的飞信库写一个简单的GUI
  11. 一款十分完整的客户关系管理系统源码【源码免费分享】
  12. gcc怎么编写c语言程序,gcc如何编译C语言程序
  13. t检验的p值对照表_R语言系列第四期:①R语言单样本双样本差异性检验
  14. springboot2 oauth2 jwt认证服务器和资源服务器
  15. 【c语言】算数转换解析+试题
  16. c语言随机摇号程序,再谈电脑摇号之作弊
  17. 1-2 用Python爬取猫眼票房网上的电影票房信息
  18. 在Linux系统下安装更换操作系统
  19. cesium 鼠标操作习惯修改 鼠标左键旋转 鼠标右键平移
  20. world quant global alphathon 全球总决赛 第二名经验分享

热门文章

  1. 值转换成布尔类型的False;
  2. SCRUM Beta Day 3
  3. Elasticsearch教程(六) elasticsearch Client创建
  4. 下拉框value ,selectedIndex
  5. Codeforces 369E Valera and Queries --树状数组+离线操作
  6. sharepoint_wf 启动窗口设计,支配给自由域用户
  7. Lambda 表达式与 Stream
  8. Linux文件属性与管理
  9. 域间套接字socketpair
  10. php curl发送delte,php Curl如何发起POST DELETE GET POST请求