集成算法简述

  • 什么是集成学习
    • 如何得到多个个体学习器
  • 集成学习常用算法
    • Bagging
      • 自助采样
      • 学习器结合
      • 包外估计
    • 随机森林
    • Adaboost
      • Boosting
      • Adaboost算法原理
  • 注意

什么是集成学习

如现在你要买一台电脑,相信你大概率不会只听销售员的介绍,就下单的,你可能会询问一下身边的朋友,或是上网查阅有关电脑的品牌、配置、价格等问题。简单说,就是不会单一的做出决定,而是或经过都方面的意见与建议。
这便是集成算法的通俗理解,集成模型结合多个模型的决策,以提高整体性能。


对于训练集数据,我们通过训练多个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器。也就是说,集成学习有两个主要的问题需要解决:第一是如何得到若干个个体学习器;第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器。

如何得到多个个体学习器

1、同质个体学习器:所有的个体学习器都是一个种类的,或者说是同质的。比如都是决策树个体学习器,或者都是神经网络个体学习器。
2、异质个体学习器:所有的个体学习器不全是一个种类的,或者说是异质的。比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。

目前来说,同质个体学习器的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是 CART 决策树和神经网络

同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类:
1、第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是 boosting 系列算法。
2、第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是 bagging 和随机森林(Random Forest)系列算法。

集成学习常用算法

目前的集成学习方法大致可分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是 Boosting ,后者的代表是 Bagging随机森林 (Random Forest)。(注意

Bagging

并行式集成学习方法中最著名的代表,它是基于自助采样法进行模型训练和模型评估的方法。基本思想为在分类问题中,将若干个弱分类器的分类结果进行投票选择,从而组成一个强分类器。
它的基本流程是:通过 n 次自助采样,采样出n个与原始样本集规模一样的训练集,然后基于n个训练集学习到n个个体学习器,再将这些基学习器进行结合,并用包外估计进行模型评估。所以可以从自助采样学习器结合包外估计这三个步骤来理解 Bagging 。

自助采样

通过一次自助采样,对于包含 m 个样本的原始数据集,我们可以得到包含 m 个样本的训练集,训练集与原始数据集大小一致。这样做有什么好处呢?
在集成学习中,如果希望个体学习器能够形成泛化性能较强的集成,那么一方面要求每个个体学习器自身的效果比较好,另一方面要求个体学习器之间尽可能具有较大的差异。而通过自助采样,一方面训练集的样本规模和原始数据集的大小一致,个体学习器能够进行比较充分的学习,性能比较好。另一方面多次自助采样后产生的多个训练集是不同的(尽管也有重叠的样本),因此从每个训练集中学习到的个体学习器之间有比较大的差异,我们可以把这种机制叫做样本扰动。基于这两点,Bagging 集成的泛化性能是比较强的。

学习器结合

对学习好的 T 个基学习器进行结合,其实就是对预测输出进行结合,在分类任务中,Bagging 使用简单投票法,在回归任务中使用简单平均法。如果在分类预测时出现两个类获得的票数相同,那么可以随机地二选一,或者进一步考察基学习器投票的置信度来确定。

包外估计

通过自助采样得到的训练集,对其去重后得到的样本量约为原始数据集的 63.2% ,那么剩下约 36.8% 的样本正好可以用来作为验证集,评估模型的泛化误差,这种评估方法就叫做包外估计。
具体怎么得到 Bagging 的泛化误差的包外估计呢?对于某一个样本 (xi, yi),它大约会被 63.2% 的基学习器进行训练,而大约 36.8% 的基学习器未使用它进行学习。于是就用这 36.8% 的基学习器对这个样本进行预测,并把预测结果结合起来,与真实的标记 yi 进行对比,如果预测错误,就把对比结果记为 1 ,预测正确,则记为 0 。对原始样本集 D 中的所有样本( m 个)都进行这种操作,并把对比结果累加起来(误分类样本个数),再除以样本总数,就得到了泛化误差的包外估计。

好,理解以上这三点,差不多也就理解了 Bagging 的思想。再补充以下几点:
一是由于 Bagging 属于并行集成,所以训练一个 Bagging 集成与直接使用基学习算法训练一个基学习器的复杂度同阶,这表明 Bagging 是一个非常高效的集成学习算法。

二是与标准的 AdaBoost 只适用于二分类任务不同,Bagging 可以不经调整就用于多分类和回归任务。

三是从偏差-方差分解的角度来看,与 GBDT 关注于降低偏差不同,Bagging 主要关注降低方差,因此在不剪枝决策树、神经网络等容易受到样本扰动的学习器上效果更明显。

随机森林

这以决策树为基学习器的 Bagging 集成算法,是Bagging 集成算法中性能最强的。要理解随机森林,就要从它的名称入手,拆成“随机”和“森林”两个词,分别来理解。

首先森林两个字是非常好理解的,随机森林的基学习器是决策树,成百上千棵决策树就构成了一个森林,这是一种形象的说法。学习到多棵决策树之后,再按照上面所写的 Bagging 中基学习器的结合方法,就可以得到分类或回归的最终预测结果

再来理解随机二字。随机森林中运用了两个“随机”,一是样本随机,也就是一般的 Bagging 集成中通过自助采样所得到的效果,也叫做样本扰动,这体现了随机森林继承性的一面。二是特征随机,也叫属性扰动,体现了随机森林创新的一面。假设训练数据集中的样本有 d 个属性(特征),构成一个属性集合,那么随机森林在构建一棵决策树的过程中,在每一个结点上选择属性进行分裂时,都先从属性集合中随机选择一个包含 k 个属性的属性子集( k<d ),再从这个子集中选择一个最优属性进行分裂。回想一下传统的决策树构建过程,在每一个结点上都是从完整的属性集合(包含 d 个属性)中,选择最佳的属性进行分裂。一般情况下,推荐 k 的值取。

所以随机森林中每棵树生成的规则是:

1、对于包含 m 个样本的原始数据集,通过自助采样得到同样包含 m 个样本的训练集;
2、每个样本有 d 个特征,那么选择一个小于 d 的整数 k ,随机地从 d 个特征中选择 k 个特征,然后决策树在每个结点上进行分裂时,从 k 个特征中选择最优的;
3、每棵树都生长到最大深度,不进行剪枝。

随机森林只是对 Bagging 做了一个小改动,与一般 Bagging 集成中基学习器的“多样性”仅来自于样本扰动不同,随机森林再加入了属性扰动的机制。

其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N 棵树会有 N 个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别,指定为最终的输出,这就是一种最简单的 Bagging 思想。集成学习通过建立几个模型的组合,来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。
随机森林是集成学习的一个子类,它依靠于决策树的投票选择,来决定最后的分类结果。随机森林基本流程如下:

1)从样本集中有放回随机采样选出 n 个样本;
2)从所有特征中随机选择 k 个特征,对选出的样本利用这些特征建立决策树(一般是CART,也可是别的或混合使用);
3)重复以上两步 m 次,即生成 m 棵决策树,形成随机森林;
4)对于新数据,经过每棵树决策,最后投票确认分到哪一类。

Adaboost

Adaboost 是属于机器学习里面的监督学习,是一个二分类模型。它是一种迭代算法,其核心思想是针对同一个训练集,训练不同的分类器(弱分类器) ,然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)
其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集,送给下层分类器进行训练,最后将每次训练得到的分类器融合起来,作为最后的决策分类器。使用 Adaboost 分类器可以排除一些不必要的训练数据特征,并将重心放在关键的训练数据上面。

Boosting

Boosting 基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。
在 PAC 学习的框架中,一个概念,如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,但是学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。
在学习中,如果已经发现了弱学习算法,那么能否将它提升为强学习算法。大家知道,发现弱学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。

与 bagging 不同,boosting 采用的是一个串行训练的方法。首先,它训练出一个弱分类器,然后在此基础上,再训练出一个稍好点的弱分类器,以此类推,不断的训练出多个弱分类器,最终再将这些分类器相结合,这就是 boosting 的基本思想。

Adaboost算法原理

对提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成一个强分类器。
第 1 个问题,Adaboost 的做法是:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。
第 2 个问题,即弱分类器的组合,Adaboost采取加权多数表决的方法,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

注意

Bagging + 决策树 = 随机森林
AdaBoost + 决策树 = boosting

来源:头歌

机器学习——集成学习算法(Adaboost、随机森林)相关推荐

  1. 【进阶版】机器学习之集成学习介绍、随机森林模型经验贴(12)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 集成学习 个体与集成 Boosting Bagging与Ran ...

  2. 集成学习中的随机森林

    摘要:随机森林是集成算法最前沿的代表之一.随机森林是Bagging的升级,它和Bagging的主要区别在于引入了随机特征选择. 本文分享自华为云社区<集成学习中的随机森林>,原文作者:ch ...

  3. 集成学习——BAGGING和随机森林

    集成学习--BAGGING和随机森林 集成学习--BAGGING和随机森林 1.什么是集成学习 2.怎样进行集成学习 3.Bagging方法 4.Bagging方法训练.预测过程 5.Bagging方 ...

  4. 机器学习笔记(六)Boosting集成学习算法Adaboost和GBDT

    一.前言 在前一篇文章中我们介绍了集成学习算法中的Bagging模型,本篇文章将继续介绍集成学习算法中的另一个代表性算法Boosting模型.Boosting是一种可将弱学习器提升为强学习器的算法,其 ...

  5. 机器学习集成学习算法

    目录 1 集成学习算法简介 1.1 什么是集成学习 1.2 机器学习的两个核心任务 1.3 集成学习中boosting和Bagging 1.4 小结 2 Bagging和随机森林 2.1 Baggin ...

  6. 【数据挖掘算法分享】机器学习平台——回归算法之随机森林

    随机森林回归算法是决策树回归的组合算法,将许多回归决策树组合到一起,以降低过拟合的风险.随机森林可以处理名词型特征,不需要进行特征缩放处理.随机森林并行训练许多决策树模型,对每个决策树的预测结果进行合 ...

  7. 【机器学习】集成学习ensemble之随机森林

    Bootstrapping Bootstrapping从字面意思翻译是拔靴法,从其内容翻译又叫自助法,是一种再抽样的统计方法.自助法的名称来源于英文短语"to pull oneself up ...

  8. 机器学习5—分类算法之随机森林(Random Forest)

    随机森林(Random Forest) 前言 一.随机森林 1.什么是随机森林 2.随机森林的特点 3.随机森林的生成 二.随机森林的函数模型 三.随机森林算法实现 1.数据的读取 2.数据的清洗和填 ...

  9. 集成学习-Boosting集成学习算法AdaBoost

    Boosting是一族将弱学习器提升为强学习器的算法,适用于个体学习器间存在强依赖关系.必须串行生成序列化方法.最著名的代表是AdaBoost. Boosting的工作机制:从初始的训练集中训练出一个 ...

最新文章

  1. iOS图片,视频上传视频内容旋转
  2. python替换字符串内容
  3. XP,2003下使用route命令增加永久路由(静态路由)
  4. 专访1药网技术副总裁黄哲铿:揭秘技术跨界管理之道
  5. 汇编语言int 13中断02h功能Demo - 使用emu8086
  6. ABAP取字符串中的连续数字
  7. leetcode 209. Minimum Size Subarray Sum | 209. 长度最小的子数组(Java)
  8. Docker发布应用程序指南
  9. LightOJ1298 One Theorem, One Year(DP + 欧拉函数性质)
  10. python技术是什么意思_python中“//”表示什么意思_后端开发
  11. 【工作经验分享】这些新技术你们都知道吗
  12. linux的strace命令(详解)
  13. Java从控制台中读取数据完全攻略
  14. python线程同步锁_[python] 线程间同步之Lock RLock
  15. mysql数据库在什么程序操作_MySQL数据库基本操作(一)
  16. 【字符串】面试题之奇偶字符串分离
  17. 建立类成员函数与字符串的对应关系
  18. python 通信_深入浅出通信原理(Python代码版)
  19. 计算机cpu基础知识ppt,计算机硬件基础知识ppt课件
  20. std在汇编语言是什么指令_详解汇编语言各种指令的解释与用法

热门文章

  1. 我不去想,是否能够成功。既然选择了远方,便只顾风雨兼程。
  2. 【榜单公布】1024征文结果出炉,快来看看你上榜了没?
  3. 谈因果——听赵老师讲法后的感受1
  4. 微信小程序个人开发心得
  5. 什么专业转CS,成功率最高?
  6. Docker可视化工具Portainer的安装和使用
  7. BUUCTF-[BJDCTF2020]EzPHP
  8. u盘或者移动硬盘插电脑上打不开,再点一下就资源管理器无响应
  9. solidity变量01
  10. 使用Java_Swing来实现扫雷小游戏