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

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

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

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

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

(2)Bagging

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

  1. W = baggingc (A,CLASSF,N,ACLASSF,T)
  2.  
  3. INPUT
  4. A Training dataset.
  5. CLASSF The base classifier (default: nmc)
  6. N Number of base classifiers to train (default: )
  7. ACLASSF Aggregating classifier (default: meanc), [] for no aggregation.
  8. T Tuning set on which ACLASSF is trained (default: [], meaning use A)
  9.  
  10. OUTPUT
  11. W A combined classifier (if ACLASSF was given) or a stacked
  12. 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中分类器的生成方式,当然训练分类器的算法往往有稳定和不稳定两类,通常是使用不稳定的学习算法,因为不稳定的学习算法可以因为数据集微小的变化而导致结果的改变,因此有助于我们生成若干具有一定差异性的分类器集合。

一个例子:

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

  1. clc,clear;
  2. A=gendath([ ]);
  3. [C,D]=gendat(A,[ ]);
  4. W1=baggingc(C,qdc); %quadratic
  5. W2=baggingc(C,ldc); %linear
  6. W3=baggingc(C,knnc);
  7. W4=baggingc(C,treec);
  8. disp([testc(D*W1), testc(D*W2), testc(D*W3), testc(D*W4)]);
  9. scatterd(A);
  10. plotc({W1,W2,W3,W4 });

(3)Boosting

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

  1. [W,V,ALF] = adaboostc(A,CLASSF,N,RULE,VERBOSE);
  2.  
  3. INPUT
  4. A Dataset
  5. CLASSF Untrained weak classifier
  6. N Number of classifiers to be trained
  7. RULE Combining rule (default: weighted voting)
  8. VERBOSE Suppress progress report if (default)
  9.  
  10. OUTPUT
  11. W Combined trained classifier
  12. V Cell array of all classifiers
  13. Use VC = stacked(V) for combining
  14. 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、进行加权投票集成

一个例子:

  1. clc,clear;
  2. A=gendath([ ]);
  3. [C,D]=gendat(A,[ ]);
  4. [W1,V1,ALF1]=adaboostc(C,qdc,); %quadratic
  5. [W2,V2,ALF2]= adaboostc (C,ldc,); %linear
  6. disp([testc(D*W1), testc(D*W2)]);
  7. scatterd(A);
  8. 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. select中的文字垂直居中的问题

    select文字在默认和边框高度增加时 是默认居中的.你要是不想居中的话可以用padding值调整.但是右侧的三角不会改变. select在高度减小时.字体是不会垂直居中的.无论你用什么他都不会垂直居 ...

  2. css之line-height

    行内框盒子模型1."内容区域"(content area)2."内联盒子"(inline boxes)3."行框盒子"(line boxes ...

  3. intellij IDEA mybatis插件破解方法

    1>安装mybatis插件,找到mybatis_plus.jar包的位置,在C:\Users\LZHL\.IntelliJIdea2016.3\config\plugins\mybatis_pl ...

  4. DataReader的用法程序简析

    // 2015/07/05 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  5. ubuntu中的apache的基本技巧

    1. 显示apache的版本号 XXX@XXX-ThinkPad-Edge-E431:~$ apache2 -v Server version: Apache/ (Ubuntu) Server bui ...

  6. centos安装docker容器

    centos安装docker容器 系统环境需求 docker要运行在centos7系统中,系统为64位机器上,内核最小版本在3.10以上 如果系统为centos6,后面有附带的安装方法 uname - ...

  7. DevExpress 控件使用之GridControl基本属性设置

    DEV控件:gridControl常用属性设置     1.隐藏最上面的GroupPanel(实现方法两种)     ①代码实现:gridView1.OptionsView.ShowGroupPane ...

  8. BZOJ 3479: [Usaco2014 Mar]Watering the Fields(最小生成树)

    这个= =最近刷的都是水题啊QAQ 排除掉不可能的边然后就最小生成树就行了= = CODE: #include<cstdio>#include<iostream>#includ ...

  9. 使用StyleCop.Analyzers进行代码审查

    为什么要进行代码审核? 提早发现代码中的BUG,避免将BUG带到生产环境 极大的提高软件质量,以及可维护性 统一代码规范.提高可读性,减少新加入成员的熟悉时间 加速个人和团队的成长,知识和经验的积累 ...

  10. Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册

    豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册   ·FreeBS ...