声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验。

(1)在介绍Bagging和Boosting算法之前,首先要简单了解什么是集成学习?

集成学习(Ensemble Learning)是目前模式识别与机器学习中常用的一种学习算法,是使用一系列的学习器(分类器)通过某种规则(投票法、加权投票等)将各分类器的学习结果进行融合,达到比单学习器识别效果更好地目的。

可以打一个简单的比喻,如果我们将“学习器”看做是一个“人”,现在我们需要进行的任务是识别汉字。一个人的识别内容终归是有限的,但是如果我们现在利用三个人来识别,同一个字当A识别错误时,B、C识别正确,最终以少数服从多数的原则取BC的识别结果,那么相比较只用A一个人来识别汉字的情况,我们的准确率会大大提升。当然也许这里有人会存在疑问:万一A本身是一个很有文化的人,B是一个不识字的人,那么叫他们两个一起识别汉字岂不是会拉低整体识别率么?这里也就牵扯到了学习器与学习器之间差异性度量的话题,这个话题在本文中不详细讲述,有兴趣的朋友可以自己查询了解,最白话的解释就是:参与集成学习的学习器们需要具有一定的差异值,既不能完全相同,也不能差异的太大。

在浅显的理解何为集成学习之后,我们来讲Bagging和Boosting,事实上这是两种非常重要的集成方法。

(2)Bagging

该算法在模式识别工具箱中的使用方法为:

W = baggingc (A,CLASSF,N,ACLASSF,T)

  INPUT
A Training dataset.
CLASSF The base classifier (default: nmc)
N Number of base classifiers to train (default: )
ACLASSF Aggregating classifier (default: meanc), [] for no aggregation.
T Tuning set on which ACLASSF is trained (default: [], meaning use A) OUTPUT
W A combined classifier (if ACLASSF was given) or a stacked
classifier (if ACLASSF was []).

以上是PRtools工具箱中bagging的使用说明。

其中:A是训练数据集,其类型是dataset。

CLASSF是基学习器的训练算法,该工具箱中涵盖多种分类器的算法,比较常用的有nmc(最近邻)、treec(决策树)等等。

N是学习器数目,即要训练多少个分类器做最终的集成,默认值100.

ACLASSF是指集成规则,可选的参数有meanc\prodc\medianc\maxc\minc\votec\,其中默认参数为meanc,但是比较常用的规则还是votec投票法

T是指训练集成规则的参数,像投票法是不需要训练的,因为默认该值为[]。

以上内容是直接从工具箱中bagging方法的应用角度来介绍,接下来要从原理方面讲述。

Bagging算法的全称应该是Bootstrap aggregating。

它有两个步骤组成:Bootstrap和aggregating。

所谓基分类器,指的是参与集成的个体分类器,某一种分类算法加以实现后(可以理解为一个函数,输入是特征数据,输出是判断的类别)就是一个分类器。

Boostrap方法是有放回的抽样,即从初始训练集中有放回可重复的随机取出N条数据(这个值需要事先设定,可以是初始数据集的80%、70%都随意)组成新的数据集,假如我们现在要训练100个分类器,那么就取出100组数据集分别进行训练,即要训练100轮。因为每次训练的数据集是不同的,所以训练出的分类器也存在差异。这样我们就得到了100个预测函数序列h1,…,h100。

另一个步骤就是集成,通常用的是投票法。

因此这里主要记住的就是Bagging中分类器的生成方式,当然训练分类器的算法往往有稳定和不稳定两类,通常是使用不稳定的学习算法,因为不稳定的学习算法可以因为数据集微小的变化而导致结果的改变,因此有助于我们生成若干具有一定差异性的分类器集合。

一个例子:

在二维数据中,使用不同的训练算法时的集成效果

clc,clear;
A=gendath([ ]);
[C,D]=gendat(A,[ ]);
W1=baggingc(C,qdc); %quadratic
W2=baggingc(C,ldc); %linear
W3=baggingc(C,knnc);
W4=baggingc(C,treec);
disp([testc(D*W1), testc(D*W2), testc(D*W3), testc(D*W4)]);
scatterd(A);
plotc({W1,W2,W3,W4 });

(3)Boosting

该算法在模式识别工具箱中的使用方法为:

 [W,V,ALF] =  adaboostc(A,CLASSF,N,RULE,VERBOSE);

  INPUT
A Dataset
CLASSF Untrained weak classifier
N Number of classifiers to be trained
RULE Combining rule (default: weighted voting)
VERBOSE Suppress progress report if (default) OUTPUT
W Combined trained classifier
V Cell array of all classifiers
Use VC = stacked(V) for combining
ALF Weights

其参数多数和baggingc很像:

A是训练数据集,其类型是dataset。

CLASSF是基学习器的训练算法。

N是学习器数目。

ACLASSF是指集成规则,其中默认参数为加权投票法。

Boosting主要是Adaboost(Adaptive Boosting),它与Bagging的不同在于他将权重赋予每个训练元组,生成基分类器的过程为迭代生成。每当训练生成一个分类器M(i)时要进行权重更新,使得M(i+1)更关注被M(i)分类错误的训练元组。最终提升整体集合的分类准确率,集成规则是加权投票,每个分类器投票的权重是其准确率的函数。

继续详细介绍的话,假设数据集D,共有d类。(X1,Y1)…(Xd,Yd),Yi是Xi的类标号,假设需要生成k的分类器。其步骤为:

1、对每个训练元组赋予相等的权重1/d。

2、for i=1:k

从D中进行有放回的抽样,组成大小为d的训练集Di,同一个元组可以被多次选择,而每个元组被选中的几率由权重决定。利用Di训练得到分类器Mi,然后使用Di作为测试集计算Mi的误差。然后根据误差调整权重。

当元组没有被正确分类时,则权重增加;反之权重减少。然后利用新的权重为下一轮训练分类器产生训练样本。使其更“关注”上一轮中错分的元组。

3、进行加权投票集成

一个例子:

clc,clear;
A=gendath([ ]);
[C,D]=gendat(A,[ ]);
[W1,V1,ALF1]=adaboostc(C,qdc,); %quadratic
[W2,V2,ALF2]= adaboostc (C,ldc,); %linear
disp([testc(D*W1), testc(D*W2)]);
scatterd(A);
plotc({W1,W2});

(3)Bagging与Boosting的差异

通过上述简单的介绍,可以看出这两种集成算法主要区别在于“加没加权”。Bagging的训练集是随机生成,分类器相互独立;而Boosting的分类器是迭代生成,更关注上一轮的错分元组。因此Bagging的各个预测函数可以并行生成;而Boosting只能顺序生成。因此对于像一些比较耗时的分类器训练算法(如神经网络等)如果使用Bagging可以极大地解约时间开销。

但是通过在大多数数据集的实验,Boosting的准确率多数会高于Bagging,但是也有极个别数据集使用Boosting反倒会退化。

本文没有对两种集成方法的背景知识做过多的介绍,主要是结合模式识别工具箱的应用来简单作为了解使用,如有不准确的地方,还望多加指正。

模式识别与机器学习—bagging与boosting的更多相关文章

  1. [机器学习]Bagging and Boosting

    Bagging 和 Boosting 都是一种将几个弱分类器(可以理解为分类或者回归能力不好的分类器)按照一定规则组合在一起从而变成一个强分类器.但二者的组合方式有所区别. 一.Bagging Bag ...

  2. 机器学习——集成学习(Bagging、Boosting、Stacking)

    1 前言 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < ...

  3. 机器学习基础—集成学习Bagging 和 Boosting

    集成学习 就是不断的通过数据子集形成新的规则,然后将这些规则合并.bagging和boosting都属于集成学习.集成学习的核心思想是通过训练形成多个分类器,然后将这些分类器进行组合. 所以归结为(1 ...

  4. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  5. 以Random Forests和AdaBoost为例介绍下bagging和boosting方法

    我们学过决策树.朴素贝叶斯.SVM.K近邻等分类器算法,他们各有优缺点:自然的,我们可以将这些分类器组合起来成为一个性能更好的分类器,这种组合结果被称为 集成方法 (ensemble method)或 ...

  6. 随机森林(Random Forest),决策树,bagging, boosting(Adaptive Boosting,GBDT)

    http://www.cnblogs.com/maybe2030/p/4585705.html 阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 ...

  7. 常用的模型集成方法介绍:bagging、boosting 、stacking

    本文介绍了集成学习的各种概念,并给出了一些必要的关键信息,以便读者能很好地理解和使用相关方法,并且能够在有需要的时候设计出合适的解决方案. 本文将讨论一些众所周知的概念,如自助法.自助聚合(baggi ...

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

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

  9. Bagging和Boosting的介绍及对比

    "团结就是力量"这句老话很好地表达了机器学习领域中强大「集成方法」的基本思想.总的来说,许多机器学习竞赛(包括 Kaggle)中最优秀的解决方案所采用的集成方法都建立在一个这样的假 ...

随机推荐

  1. STAR法则

    现在相信大部分跳槽的朋友都已经将工作辞了,正在找工作的这个漩涡中,还没辞掉的可能也快了,找工作的这段时间是一个非常考验你的扛打击能力的时候.像网上投了几十家简历,只有几家邀请面试的,其他都是连面试阶段 ...

  2. BZOJ1115:[POI2009]石子游戏Kam (博弈论)

    挺水的 听说是阶梯nim和,就去看了一下,然后就会了= = 观察题目,发现拿第i堆棋子k个造成的影响就是第i+1堆棋子能多拿k个 可以把模型转化为,有n堆石子,每次从某一堆拿一个石子,放在下一堆中,不 ...

  3. 从0移植uboot (二) _启动流程分析

    经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,其次,此时的uboot.bin也没有结合 ...

  4. bootstrap select2 参数详解

    Select2使用示例地址: https://select2.github.io/examples.html Select2参数文档说明: https://select2.github.io/opti ...

  5. 【Scala】Scala之Methods

    一.前言 前面学习了Scala的Class,下面接着学习Method(方法). 二.Method Scala的方法与Java的方法类似,都是添加至类中的行为,但是在具体的实现细节上差异很大,下面展示一 ...

  6. 令人眼前一亮的下拉式终端 Tilda & Guake

    前言 老夫是 Linux 的老用户. 大一的时候某不方便透露姓名的校内组织给了一个 Fedora 13 的安装光盘,然后老夫学会了重装 Windows. 大二的时候知道了 Ubuntu ,开始在虚拟机 ...

  7. Maven与Eclipse使用中遇到的问题解决之道

    在使用Maven以及Eclipse的Maven插件时,我和同事遇到了一下几个问题,本着知其然知其所以然的学习精神,总结如下: Unrecognised tag 问题 由于我使用本地代理仓库,所以set ...

  8. 基于Struts自定义MVC-2

    自定义MVC        数据库:Oracle表:User(id,uname,upwd)自定义Struts框架一.定义Action接口 import javax.servlet.http.*; pu ...

  9. 用C#来学习唐诗三百首

    Begin 最近把项目做完了,闲来无事,就想做点好玩的事情,刚好前几天下载了[唐诗三百首]和[全唐诗]这两个txt文件,正好用C#来整理一下. [唐诗三百首]文件格式 [全唐诗]文件格式 目标 将每一 ...

  10. Robot Framework自动化测试环境部署

    文档版本:v1.0 作者:令狐冲 如有问题请发邮件到:1146009864@qq.com 使用Robot Framework框架(以下简称RF)来做自动化测试. 模块化设计 1.所需环境一览表 软件 ...