AdaBoost详解
本博客内容摘自李航老师的《统计学习方法》,加以一些整理。
相关概念
提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
对于分类问题而言,给定一个训练集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升(booting)方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
所以对于提升方法而言,有两个问题需要解决:一是在每一轮如何改变训练数据的权值或者概率分布;二是如何将弱分类器组合成一个强分类器。
对于第一个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器”分而治之”。
对于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类错误率小的弱分类器的权重,使其在表决中起较大的作用,减少分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
AdaBoost算法
假定给定一个二分类的训练数据集:
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)初始化训练数据的权值分布
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的训练数据集学习,得到基本分类器:
G_m(x):X\longrightarrow \{-1,+1\}
(b)计算 GmGmG_m在训练数据集上的分类误差率
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)的系数
\alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m}\quad\quad(2.3)
这里的对数是自然对数。可以发现,当错误率 ememe_m越大时, amama_m越小。这个参数将会用在集成阶段。
(d)更新训练数据集的权值分布
D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N})\quad\quad(2.4)
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.
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)=\sum_{m=1}^M\alpha_mG_m(x)\quad\quad(2.7)
错误率越低的弱分类器对应的αα\alpha值越大,使其在表决中起较大的作用。
得到最终的分类器
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)在加权训练数据集上的分类错误率:
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)可以写成:
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详解相关推荐
- VJ框架 与 人脸检测/物体检测 详解
Viola-Jones Object Detection Framework 1. VJ Framework 1.1 Overview 本文详细阐述 Viola-Joines 人脸检测/物体检测 实时 ...
- 机器学习经典算法详解及Python实现--元算法、AdaBoost
http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...
- Sklearn参数详解—Adaboost
总第112篇 前言 今天这篇讲讲集成学习,集成学习就是将多个弱学习器集合成一个强学习器,你可以理解成现在有好多道判断题(判断对错即01),如果让学霸去做这些题,可能没啥问题,几乎全部都能做对,但是现实 ...
- AdaBoost算法详解与python实现
AdaBoost算法详解与python实现 https://tangshusen.me/2018/11/18/adaboost/
- haar分类器详解(Haar特征,积分图,adaboost算法,筛选式级联分类器),DCG介绍 --文献阅读报告《基于素描对视频的人脸识别研究》
基于素描对视频的人脸识别--haar分类器详解,haar特征,adaboost,级联强分类器,积分图,DCG 背景 算法总体流程 1.预处理--识别出人脸并将人脸图像标准化 haar特征 积分图--加 ...
- AdaBoost算法详解及python实现【Python机器学习系列(十八)】
文章目录 1. AdaBoost 算法简介 2. AdaBoost算法 逻辑详解 2.1 数据 2.2 带权错误率 2.3 损失函数 与 确定样本权重 2.3 确定模型权重 2.4 输出模型 3.Ad ...
- Adaboost算法详解(haar人脸检测)
转自:https://wizardforcel.gitbooks.io/dm-algo-top10/content/adaboost.html(脸书动不动上不去故转载)(主要看adaboost的例子. ...
- 机器学习模型评估与超参数调优详解
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤 深圳大学,Datawhale高校群成员 机器学习分为两类 ...
- AdaBoostClassifer详解及实战
AdaBoostClassifer详解及实战 AdaBoost算法是Adaptive Boost的简称,属于Boosting类算法. 随机森林是一种经典的Bagging算法. Boosting通过将一 ...
最新文章
- C# socket编程实践——支持广播的简单socket服务器
- python变量初始化_tensorflow之变量初始化(tf.Variable)使用详解
- python2与python3代码互相转化时注意事项
- java base64 加解密_java Base64加解密
- SAP JCo的Server/Client编程实例
- 绑定事件的几个方法总结
- LG深化与苹果合作,扩大向苹果供应OLED
- CentOS 服务器搭建 mediawiki
- jquery选择器之过滤选择器
- python scrapy框架 简书_Python的Scrapy框架
- sql2005下载地址
- select、poll、epoll之间的区别总结摘自http://www.cnblogs.com/Anker/p/3265058.html
- 加油站都需要什么手续_开加油站,需要在哪些地方审批些什么手续?
- 【转】表情识别(一)--传统方法概述
- 洛谷[P3374] [P3368]树状数组(线段树解法)
- 网络安全HW系列之应急响应方法论思维导图
- (一)性能测试(压力测试、负载测试)、
- O’Shea基于深度学习调制识别代码
- 动态规划法求最优分配方案(空间优化)
- 企业数字化转型困难的这个锅必须得IT行业自己来背