本博客内容摘自李航老师的《统计学习方法》,加以一些整理。

相关概念

  提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。

  对于分类问题而言,给定一个训练集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升(booting)方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。

  所以对于提升方法而言,有两个问题需要解决:一是在每一轮如何改变训练数据的权值或者概率分布;二是如何将弱分类器组合成一个强分类器。

  对于第一个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器”分而治之”。

  对于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类错误率小的弱分类器的权重,使其在表决中起较大的作用,减少分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

AdaBoost算法

  假定给定一个二分类的训练数据集:

T={(x1,y1),(x2,y2),...,(xN,yN)}T={(x1,y1),(x2,y2),...,(xN,yN)}

T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
其中,每个样本点由实力和标记组成。实例 xi∈X⊆Rnxi∈X⊆Rnx_i\in X\subseteq R^n(表示实数),标记 yi∈Y={−1,+1}yi∈Y={−1,+1}y_i\in Y=\{-1,+1\},即有两种标签的数据,用 {−1,+1}{−1,+1}\{-1,+1\}来表示这两种类别; XXX是实例空间,Y" role="presentation">YYY是标记集合。AdaBoost算法利用以下算法,从训练数据中学习一系列弱分类器或基本分类器,并将这些弱分类器线性组合成一个强分类器。

AdaBoost描述:
  输入:训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)}T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},其中xi∈X⊆Rn,yi∈Y={−1,+1}xi∈X⊆Rn,yi∈Y={−1,+1}x_i\in X\subseteq R^n,y_i\in Y=\{-1,+1\};得到弱学习算法;
  输出:最终分类器G(x)G(x)G(x)

算法步骤:

(1)初始化训练数据的权值分布

D1=(w11,...,w1i,...,w1N),w1i=1N,i=1,2,...,N(2.1)D1=(w11,...,w1i,...,w1N),w1i=1N,i=1,2,...,N(2.1)

D_1=(w_{11},...,w_{1i},...,w_{1N}),w_{1i}=\frac{1}{N},i=1,2,...,N\quad\quad(2.1)
D是用来描述各样本的权值分布的。

(2)对m=1,2,...,Mm=1,2,...,Mm=1,2,...,M,mmm表示迭代的次数
(a)使用具有权值分布Dm" role="presentation">DmDmD_m的训练数据集学习,得到基本分类器:

Gm(x):X⟶{−1,+1}Gm(x):X⟶{−1,+1}

G_m(x):X\longrightarrow \{-1,+1\}
   (b)计算 GmGmG_m在训练数据集上的分类误差率

em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm≠yi)(2.2)em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm≠yi)(2.2)

e_m=P(G_m(x_i)\not= y_i)=\sum_{i=1}^Nw_{mi}I(G_m\not= y_i)\quad\quad(2.2)
其中 I(Gm≠yi)={0,1}I(Gm≠yi)={0,1}I(G_m\not= y_i)=\{0,1\},当分类正确时,等于0;分类错误时,等于1; Gm(xi)Gm(xi)G_m(x_i)表示第 mmm轮得到的弱分类器Gm" role="presentation">GmGmG_m对第 iii个样本xi" role="presentation">xixix_i的分类结果, yiyiy_i表示第 iii个样本的真实类别。注意计算误差率是用到了权重分布D" role="presentation">DDD中的 wmwmw_m。
   (c) 计算 Gm(x)Gm(x)G_m(x)的系数

αm=12log1−emem(2.3)αm=12log1−emem(2.3)

\alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m}\quad\quad(2.3)
这里的对数是自然对数。可以发现,当错误率 ememe_m越大时, amama_m越小。这个参数将会用在集成阶段。
   (d)更新训练数据集的权值分布

Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)(2.4)Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)(2.4)

D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N})\quad\quad(2.4)

wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N(2.5)wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N(2.5)

w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)),i=1,2,...,N\quad\quad(2.5)
这里, ZmZmZ_m是规范化因子,使得总的 wm+1wm+1w_{m+1}值和为1.

Zm=∑i=1Nwmiexp(−αmyiGm(xi))(2.6)Zm=∑i=1Nwmiexp(−αmyiGm(xi))(2.6)

Z_m=\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i))\quad\quad(2.6)
它使得 Dm+1Dm+1D_{m+1}成为一个概率分布。

(3)构建基本分类器的线性组合

f(x)=∑m=1MαmGm(x)(2.7)f(x)=∑m=1MαmGm(x)(2.7)

f(x)=\sum_{m=1}^M\alpha_mG_m(x)\quad\quad(2.7)
错误率越低的弱分类器对应的αα\alpha值越大,使其在表决中起较大的作用。
得到最终的分类器

G(x)=sign(f(x))=sign(∑m=1MαmGm(x))(2.8)G(x)=sign(f(x))=sign(∑m=1MαmGm(x))(2.8)

G(x)=sign(f(x))=sign\left(\sum_{m=1}^M \alpha_mG_m(x)\right)\quad\quad(2.8)

对AdaBoost算法作如下说明:
  步骤(1)假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第1步能够在原始数据上学习基本分类器G1(x)G1(x)G_1(x).

  步骤(2)AdaBoost反复学习基本分类器,在每一轮m=1,2,...,Mm=1,2,...,Mm=1,2,...,M顺次地执行下列操作:
  (a)使用当前分布DmDmD_m加权的训练数据集,学习基本分类器Gm(x)Gm(x)G_m(x).
  (b)计算基本分类器Gm(x)Gm(x)G_m(x)在加权训练数据集上的分类错误率:

em=P(Gm(xi)≠yi)=∑Gm(xi)≠yiwmi(2.9)em=P(Gm(xi)≠yi)=∑Gm(xi)≠yiwmi(2.9)

e_m=P(G_m(x_i)\not=y_i)=\sum_{G_m(x_i)\not=y_i}w_{mi}\quad\quad(2.9)
这里, wmiwmiw_{mi}表示第 mmm轮中第i" role="presentation">iii个实例的权值, ∑Ni=1wmi=1∑i=1Nwmi=1\sum_{i=1}^Nw_{mi}=1.这表明, Gm(x)Gm(x)G_m(x)在加权的训练数据集上的分类错误率是被 Gm(x)Gm(x)G_m(x)误分类样本的权值之和,由此可以看出数据权值分布 DmDmD_m与基本分类器 Gm(x)Gm(x)G_m(x)的分类错误率的关系。
  (c)计算基本分类器 Gm(x)Gm(x)G_m(x)的系数 αm,αmαm,αm\alpha_m,\alpha_m表示 Gm(x)Gm(x)G_m(x)在最终的分类器中的重要性。由式子(2.3)可知,当 em≤12em≤12e_m\leq \frac{1}{2}时, αm≥0αm≥0\alpha_m\geq 0,并且 αmαm\alpha_m伴随着 ememe_m的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
  (d)更新训练数据的权值分布,为下一轮作准备。式子(2.5)可以写成:

wm+1,i={wmiZme−αm,wmiZmeαm,Gm(xi)=yiGm(xi)≠yiwm+1,i={wmiZme−αm,Gm(xi)=yiwmiZmeαm,Gm(xi)≠yi

w_{m+1,i}= \begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m}, & \text {$G_m(x_i)=y_i$} \\ \frac{w_{mi}}{Z_m}e^{\alpha_m}, & \text{$G_m(x_i)\not=y_i$} \end{cases}
由此可知,被基本分类器 Gm(x)Gm(x)G_m(x)误分类样本的权值得以扩大,而被正确分类样本的权值却得以缩小。二者比较,误分类样本的权值被放大 e2αm=em1−eme2αm=em1−eme^{2\alpha_m}=\frac{e_m}{1-e_m}倍.因此,误分类样本在下一轮学习中起更大的作用。 不改变所给的训练数据,而不断改变训练数据的权值分布,使得训练数据在基本分类器的学习中起不同的作用,这是AdaBoost的一个特点。

  步骤(3)线性组合f(x)f(x)f(x)实现了MMM个基本分类器的加权表决。系数αm" role="presentation">αmαm\alpha_m表示了基本分类器Gm(x)Gm(x)G_m(x)的重要性,这里,所有αmαm\alpha_m之和并不为1.f(x)f(x)f(x)的符号决定实例xxx的类,f(x)" role="presentation">f(x)f(x)f(x)的绝对值表示分类的确信度,利用基本分类器的线性组合构建最终分类器是AdaBoost的另一特点。

参考例子




注意,权值分布是在计算错误率ee<script type="math/tex" id="MathJax-Element-74">e</script>时起作用,公式(2.2)中。

AdaBoost详解相关推荐

  1. VJ框架 与 人脸检测/物体检测 详解

    Viola-Jones Object Detection Framework 1. VJ Framework 1.1 Overview 本文详细阐述 Viola-Joines 人脸检测/物体检测 实时 ...

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

    http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...

  3. Sklearn参数详解—Adaboost

    总第112篇 前言 今天这篇讲讲集成学习,集成学习就是将多个弱学习器集合成一个强学习器,你可以理解成现在有好多道判断题(判断对错即01),如果让学霸去做这些题,可能没啥问题,几乎全部都能做对,但是现实 ...

  4. AdaBoost算法详解与python实现

    AdaBoost算法详解与python实现 https://tangshusen.me/2018/11/18/adaboost/

  5. haar分类器详解(Haar特征,积分图,adaboost算法,筛选式级联分类器),DCG介绍 --文献阅读报告《基于素描对视频的人脸识别研究》

    基于素描对视频的人脸识别--haar分类器详解,haar特征,adaboost,级联强分类器,积分图,DCG 背景 算法总体流程 1.预处理--识别出人脸并将人脸图像标准化 haar特征 积分图--加 ...

  6. AdaBoost算法详解及python实现【Python机器学习系列(十八)】

    文章目录 1. AdaBoost 算法简介 2. AdaBoost算法 逻辑详解 2.1 数据 2.2 带权错误率 2.3 损失函数 与 确定样本权重 2.3 确定模型权重 2.4 输出模型 3.Ad ...

  7. Adaboost算法详解(haar人脸检测)

    转自:https://wizardforcel.gitbooks.io/dm-algo-top10/content/adaboost.html(脸书动不动上不去故转载)(主要看adaboost的例子. ...

  8. 机器学习模型评估与超参数调优详解

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤  深圳大学,Datawhale高校群成员 机器学习分为两类 ...

  9. AdaBoostClassifer详解及实战

    AdaBoostClassifer详解及实战 AdaBoost算法是Adaptive Boost的简称,属于Boosting类算法. 随机森林是一种经典的Bagging算法. Boosting通过将一 ...

最新文章

  1. C# socket编程实践——支持广播的简单socket服务器
  2. python变量初始化_tensorflow之变量初始化(tf.Variable)使用详解
  3. python2与python3代码互相转化时注意事项
  4. java base64 加解密_java Base64加解密
  5. SAP JCo的Server/Client编程实例
  6. 绑定事件的几个方法总结
  7. LG深化与苹果合作,扩大向苹果供应OLED
  8. CentOS 服务器搭建 mediawiki
  9. jquery选择器之过滤选择器
  10. python scrapy框架 简书_Python的Scrapy框架
  11. sql2005下载地址
  12. select、poll、epoll之间的区别总结摘自http://www.cnblogs.com/Anker/p/3265058.html
  13. 加油站都需要什么手续_开加油站,需要在哪些地方审批些什么手续?
  14. 【转】表情识别(一)--传统方法概述
  15. 洛谷[P3374] [P3368]树状数组(线段树解法)
  16. 网络安全HW系列之应急响应方法论思维导图
  17. (一)性能测试(压力测试、负载测试)、
  18. O’Shea基于深度学习调制识别代码
  19. 动态规划法求最优分配方案(空间优化)
  20. 企业数字化转型困难的这个锅必须得IT行业自己来背

热门文章

  1. Web Map Gis 开发系列索引
  2. SQL Server 备份与恢复之八:还原数据库
  3. CentOS下如何配置LAMP环境
  4. 2006的最后一篇之学车大结局
  5. Nginx配置文件示例
  6. 运用PARALLEL方式成倍提升Oracle数据分析效率
  7. 个推成为首家支持统一推送接口标准的第三方推送服务商!
  8. CCF 201512-1 数位之和
  9. sqlmap第一次打靶成功
  10. python三方库之paramiko