6.集成算法boosting----AdaBoost算法

1.提升算法

  提升算法实为将一系列单一算法(如决策树,SVM等)单一算法组合在一起使得模型的准确率更高。这里先介绍两种Bagging(代表算法随机森林),Boosting(代表算法AdaBoost-即本篇核心)

  Bagging思想:以随机森林为例

    假设样本集的总样本量为100个,每个样本有10个特征(也就是维度是10);随机取样的比例一般为(60%-80%)

    步骤1 :我们随机从中拿出60个数据(注意这里是有放回的取样)用于建立决策树,这样随机取50次,最终将会形成60棵决策树。

    步骤2: 我们在构建决策树时对于每个决策树的特征也采用随机取样(有放回),随机选6个特征。

    步骤3:利用上述步骤1,步骤2构建的60个不同的决策树模型,最终结果用这60棵综合区评判,如下图(图片来此网络):

    

  Boosting思想:在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能(后文以AdaBoost进行说明)。

  Bagging与Boosting的异同点:

    同:两者都是集成算法,即综合考虑更过的分类器,提高分类的准确性

    异:分类器层面:比如一个20人的工作小组,现在要对某一问题达成一项决议。现在开会讨论,Bagging是一视同仁的,即不论工作经验多少,能力怎样,我看多数,后者取平均。而Boosting会根据能力或者说经验的多少综合评定给每个工程师一个权重,也就说能力强的,有经验的权重就大一些,他们的意见就重要一些。在这个基础上再去决策(注意这此示例只针对分类器层面)。

      样本层面:Boosting也会给予样本一定的权重。如果从结构层面。

      模型结构层面:Bagging是并行决策的(可类比并联电路),而Boosting是串行决策的。

2.AdaBoost算法

  2.1 AdaBoost原理以及形成过程

  AdaBoost算法的感悟,我在整理时,想采用一种倒立的方式去记录和解读,因为我自己在学习的过程中直接从数学表达式去学习,总是感觉有诸多的疑问,以至于接受此算法所用的时间稍微长了一些,下面正式开始整理自己理解AdaBoost的过程

  AdaBoost算法是boosting算法中的一种,它的作用就是将一系列弱分类器线性组合在一起形成一个强分类器,可以这样理解AdaBoost就像一个领导,那些弱分类器算法(如:单层决策树等)就像员工,每个员工均有自己的特征,而AdaBoost做为老板的作用就是将这些员工通过某种方式组合在一起将事情做得更好,放在机器学习中就是将分类任务或者说回归任务能做得更好,也就是所说的提升方法。AdaBoost是通过什么样的方式来完成这个任务的呢?

  在《李航-统计学习方法中》关于提升方法提出两个问题,而AdaBoost的原理就是如何解决这两个问题

  问题1:每一轮如何改变训练数据的权值或概率分布?

  AdaBoost:提高那些被前一轮分类器错误分类样本的权值,而降低那些被分类正确样本的权值。这样一来,那些没有得到正确分类的的数据,由于其权值加大而受到后一轮若分类器更大的关注。

  问题2:如何将若分类器组合成一个强分类器?

  AdaBoost:采用加权多数表决的方法,即加大分类误差小的弱分类器的权值,使其在表决中起较大的作用,减小分类吴超率大的弱分类器的权值,使其在表决中起较小的作用

  理解AdaBoost即就是理解上述两个问题的数学表达:

  AdaBoost最终的数学表达式为:

    

    其中m表示:第m个分类器,M表示总共有M个分类器

    x:表示样本集合

    上式(1)的形成过程如下:

    输入:训练数据集,其中;弱学习算法;

    输出:最终分类器G(x)

    

  2.2 分步骤理解上述AdaBoost算法

    m = 1 时,即利用第一个分类器开始学习训练数据集时

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

    第一步:对于第一个分类器,我们假设每个样本的权值是相同的。引用《李航-统计学习方法》中的案例来理解第一步:

      例:对于如下数据集,假设弱分类器由x<ν或想x>v产生,其中阀值ν使得该分类器在训练数据集上分类误差率最低,试用AdaBoost算法学习一个强分类器;

      

      

      

    第二步:确定基本分类器G

      

      此处样本量并不大,我们可以手动计算一下,例如阀值分别取1.5,2.5,3.5,...,9.5时的分类误差率,就能得到当v=2.5是分类误差率最小即:

      

    第三步:计算在分类器上的训练误差率

      

    第四步:计算分类器的权值(注意这里是以e为底进行计算的)

      

    第六步:确定最终分类器

      

      利用上述G(x)对训练数据集进行分类,仍有3个数据被分类错误

    第七步:计算下一次循环的样本集的权重

      

      

      D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715,0.1666, 0.1666, 0.1666, 0.0715)

    m = 2 ,组合第二个弱分类器

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 

    重复上述第二步到第七步

      

      分类误差率最小的阀值为8.5

      

      

      

      

      此时利用上述G(x)对训练数据集进行分类,仍有3个点被误分类

    m = 3 ,组合第三个弱分类器

    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 

    再次重复上述第二步到第七步

      

      分类误差最小的阀值为5.5

      

      

      

      

      此时利用上述的G(x)在对样本集进行分类,上述训练数据集上有0个误分类点,即误分率为0,此时即可停止,上述G(x)即可作此数据的强分类器

  1.3 总结

    通过对上述案例的认识,我们可量化的指标所表现的规律再从定性的角度理解

    (1)被前一个分类器分错得样本,下一个分类器再对其进行分类时一定不会被分错,为什么?

      我们通过数值观察,被分错的样本,在下一次分类时样本权值被增大如(m=2时样本权值为0.1666的样本),而我们在流程图中第二步提到,在选择分类器时,要求选择分类误差率最低的分类器(为甚要这么选的原理见下文式(11)),显然如果将权值大的样本分类错时根本达不到第二步的要求。

    (2)m=3时为什么误分率为0,从定性的角度如何理解?

      m=3时的组合分类器的权值alpha逐渐增大,即我们给予分类误差率低的样本给予了高的权值,而从数值上去判断,最终f(x)>0亦或是f(x)<0是由三个分类器所共同决定的,假如说第一个分类器将某一样本原本是1类别,分成了-1类别,那么其对最终分类器来说,会提供一个负的贡献,而后边的分类器总会将这个负的贡献抵消掉,使得最终结果还是1类别。

3.AdaBoost算法的理解

  《李航-统计学习方法》中提到,AdaBoost算法是模型为加法模型损失函数为指数函数学习算法为前向分步算法时的二分类学习方法,此解释实际解释了上述我们的AdaBoost算法的原理的由来;

  3.1 加法模型的一般表达式如下:

    

    

  3.2 前向分步算法:

    选定模型后,我们的目标就是通过训练数据集去训练模型(本质是训练模型中的参数),用什么来衡量模型训练的好坏呢?常常通过经验风险极小化即损失函数极小化,此处在给定训练数据集损失函数L(y,f(x))的条件下,我们的目标极小化此损失函数,形式如下:

    

    由于f(x)为加法模型,现在我们的任务是优化模型参数,使得损失函数最小,我们可以采用优化加法模型中的每一项,让每一项的结果最小,这样问题将转化为如下形式:

    

    上述(3)到(4)转化过程即为前向分步算法的核心

  3.3 利用上述加法模型以及前向分步算法的原理推导AdaBoost模型

    AdaBoost模型为:

    

    损失函数为:

    

    设已经优化了m-1轮,即已经得到了,如式(7),在第m轮我们通过迭代可得如下式(8)

    

    

    我们可通过使上述式(8)对对应的损失函数最小,损失函数如下式(9)

    

    通过优化式(9)使得式(9)最小即可得到

    

    即不依赖于alpha,也不依赖于G,故以G为自变量求解损失函数的极小值即等价于下述式(11):

    

    式(11)解释了再上述流程图的第二步,我们每次找分类器的时候,要找误差率最小的分类器的原因,即要使得损失函数最小。

    而对于alpha,式(9)关于alpha求导,并令倒数等于0,即可得到,过程如下:

    ,令其为0即得

    

    由上述(9)已知,所以

    

    此处与AdaBoost算法的不同之处在于,AdaBoost对w进行了归一化

    

    

    

    

    

    

    

    

  

    

    

    

    

  

          

          

          

          

          

        

      

          

          

          

          

          

          

          

          

          

        

          

          

       

          

          

          

          

      

  

  2.实例

  3.算法推导

  4.注意点

原文地址:https://www.cnblogs.com/houzichiguodong/p/9268780.html

时间: 2024-08-30 17:46:59

6.集成算法boosting----AdaBoost算法的相关文章

集成学习之Adaboost算法原理小结

在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boosting系列算法.在boosting系列算法中, Adaboost是最著名的算法之一.Adaboost既可以用作分类,也可以用作回归.本文就对Adaboost算法做一个总结. 1. 回顾boosting算法的基本原理 在集成学习原理小结中,我们已经讲到了boosting算法系列的基本思想,如下图: 从图中

机器学习——Boosting算法与Adaboost算法

Boosting算法 关键点与难点在于如何修改数据 原理:将 含有m个数据的数据集 丢给一个弱学习器1分类,比如分对百分之60, 那么经过一定手段修改数据集,数据个数还是m个,将修改后的数据集扔给弱学习器2训练,学习器2把在学习器1中分错的那一部分又分对百分之三十. 再修改数据集,将修改后的数据集扔给弱学习器3训练,学习器3把在学习器1和2中分错的那一部分又分对百分之三十. 最后加权融合为一个强学习器. ...... ...... 如下图: 重点:修改数据集的方法 ①凡解(配图讲解,绝对可以懂)

【机器学习笔记之四】Adaboost 算法

本文结构: 什么是集成学习? 为什么集成的效果就会好于单个学习器? 如何生成个体学习器? 什么是 Boosting? Adaboost 算法? 什么是集成学习 集成学习就是将多个弱的学习器结合起来组成一个强的学习器. 这就涉及到,先产生一组‘个体学习器’,再用一个策略将它们结合起来. 个体学习器可以选择:决策树,神经网络.集成时可以所有个体学习器属于同一类算法:全是决策树,或全是神经网络:也可以来自不同的算法.结合策略:例如分类问题,可以用投票法,少数服从多数. 之所以用这种集成的思想,是因为单

《机器学习实战》AdaBoost算法的分析与实现

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python 算法实现均采用Python              如需转载请注明出处,谢谢 ========

机器学习经典算法详解及Python实现--元算法、AdaBoost

第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果.如同专家团临床会诊一样,重大决定汇总多个人的意见往往胜过一个人的决定.机器学习中也吸取了'三个臭皮匠顶个诸葛亮'(实质上是由三个裨将顶个诸葛亮口误演化而来)的思想,这就是元算法的思想.元算法(meta-algorithm)也叫集成方法(ensemble method),通过将其他算法进行组合而形成更优的算法,组合方式包括:不同算法的集成,数据集不同部分采用不同算法分类后的集成或者同一算法在不同设置下的集成.

Adaboost算法初识

1.算法思想很简单: AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(三个臭皮匠,顶个诸葛亮) 它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器.同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数. 2.具体说来,整个Adaboost 迭代算法就3步: 初始化训练数据的权值分布.如果有N个样本,则每

AdaBoost算法详解与实战

[原创]Liu_LongPo 转载请注明出处 [CSDN]http://blog.csdn.net/llp1992 AdaBoost算法是基于单层决策树等弱分类算法的强学习分类算法.单层决策树算法也是一种分类算法,但是其分类效果较差,只根据一个特征进行数据划分,因此单层决策树算法被称为弱分类算法:而AdaBoost算法通过将多个弱分类算法串行训练而成,属于强分类算法. AdaBoost算法是boosting算法的一种,它所串联的弱分类器一般都是一致的,而且它训练是的关注点在于被之前分类器分错的数

Adaboost 算法

一 Boosting 算法的起源 boost 算法系列的起源来自于PAC Learnability(PAC 可学习性).这套理论主要研究的是什么时候一个问题是可被学习的,当然也会探讨针对可学习的问题的具体的学习算法.这套理论是由Valiant提出来的,也因此(还有其他贡献哈)他获得了2010年的图灵奖.这里也贴出Valiant的头像,表示下俺等菜鸟的膜拜之情.哈哈哈 PAC 定义了学习算法的强弱   弱学习算法---识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)   强学习算法---

统计学习方法--提升方法adaBoost算法(集成学习)

1.主要内容 介绍集成学习,然后讲述boosting和bagging的区别与联系,同时对adaBoost进行推导然后进行gbdt的推导,最后比较随机森林和gdbt的区别和联系. 2.集成学习 集成学习(ensamble learning)通过构建多个学习器来完成任务.集成学习的一般结构:先产生一组"个体学习器",然后再用某种策略将这些个体学习器进行联系起来,个体学习器由现有的一个算法产生,比如说c4.5决策树,bp神经网络等.根据集成学习中个体学习器是否相同可以分为同质集成和已质集成,

吴裕雄 python 机器学习——集成学习AdaBoost算法分类模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklearn.model_selection import train_test_split def load_data_classification(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 digits 数据集 digits=datasets.load_d