声明:本文用到的代码均来自于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. TypeScript和JavaScript哪种语言更先进

    TypeScript和JavaScript哪种语言更先进 近两年来最火爆的技术栈毫无争议的是JavaScript,随着ES6的普及,不管是从前端的浏览器来看,还是后端的NodeJS场景,JavaScr ...

  2. asp.net core mvc实现伪静态功能

    在大型网站系统中,为了提高系统访问性能,往往会把一些不经常变得内容发布成静态页,比如商城的产品详情页,新闻详情页,这些信息一旦发布后,变化的频率不会很高,如果还采用动态输出的方式进行处理的话,肯定会给 ...

  3. DFS 分布式文件系统 选型笔记

    需求按优先级顺序如下: 1)存放3TB以上中小型文件,图片为主,平均在500~700k,一般在1M以内. 2)要集群化,支持负载均衡,高可用高性能.有大企业使用背书最好. 3)提供Java程序上传文件 ...

  4. JavaScript实现按键精灵

    最近有个需求,需要在页面上面自动点击.输入.提交. 用以模拟真实用户的操作行为,可以通过直接执行某个元素绑定的事件,来执行操作. 也可以创建事件,再派发事件,执行操作.关于事件的更多细节,可以参考&l ...

  5. CEOI 2014 wall (最短路)

    描述:给定一个网格图,每个区间可能会有城市,求在边上建墙使无法从外边到达所有城市切所有城市必须联通 n,m<=400 首先对于30%的数据,n,m<=10我们可以考虑用数位dp来解决这个问 ...

  6. [Selenium With C#学习笔记] Lesson-01环境搭建

    Step-1:准备所需的开发环境.浏览器驱动.Selenium-Webdriver.单元测试框架,因目前使用C#的开发神器都Visual Studio,本文也打算采用Visual Studio 201 ...

  7. Git建空白分支

    先执行以下命令从当前分支建一个分支,NEWBRANCH为新分支名字. git checkout --orphan NEWBRANCH 执行上面命令后,会切换到新分支.再执行命令下面命令,清空该分支(注 ...

  8. 一个web应用的诞生(7)--结构调整

    现在所有的Py代码均写在default.py文件中,很明显这种方法下,一旦程序变的负责,那么无论对于开发和维护来说,都会带来很多问题. Flask框架并不强制要求项目使用特定的组织结构,所以这里使用的 ...

  9. 字符串查找算法总结(暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法)

    字符串匹配是字符串的一种基本操作:给定一个长度为 M 的文本和一个长度为 N 的模式串,在文本中找到一个和该模式相符的子字符串,并返回该字字符串在文本中的位置. KMP 算法,全称是 Knuth-Mo ...

  10. 用CSS3 做的星体

    制作原理:在我的上一篇随笔中有详细的说明,由于这个方法制作的球,比较耗性能,就只做了3个小球,效果大家可以试验. <!DOCTYPE html><html><head l ...