machine-learning-notes
  • 封面
  • 目录
  • 前言
  • 个人前言
  • 机器学习前言
    • 什么是机器学习和模式识别
    • 机器学习的应用
    • 机器学习的流程
    • 不同的机器学习算法对相同数据预测效果不同
    • 快速入门机器学习
    • 机器学习需要参考哪些书
    • 机器学习的学习路径
    • 深度学习的学习路径
    • 互联网机器学习特定岗位所需技能
  • 机器学习面试
  • 数学基础
  • 微积分
    • 泰勒展开
    • e的直观认识
    • 傅里叶变换
    • 希尔伯特空间
  • 线性代数
    • 范数
    • 矩阵求导
    • 特征值
    • 奇异值分解
  • 概率与信息论
    • 综述概率论基本定义
    • 概率论与贝叶斯先验
    • 正态分布
    • 贝叶斯概率
    • 概率符号说明
    • 共轭先验
    • 信息论
  • 数值计算与优化
    • 最小二乘法
    • 等式约束的拉格朗日乘子法
    • 凸优化
      • 凸集和凸函数
      • 凸优化问题
  • 梯度下降算法
    • 随机梯度下降SGD
    • 动量法Momentum
    • 牛顿动量Nesterov
    • AdaGrad
    • RMSprop
    • Adadelta
    • Adam
    • Nadam
    • AMSGrad
    • AdasMax
  • 概率图模型
    • 概率图模型概论
    • 概率图简介
  • 编程基础
  • linux
    • linux常用命令
    • shell
      • 输入输出重定向
  • python
    • python简介
    • python语法
      • 基础语法
      • 数据结构
      • 过程控制
      • 函数
      • 类和对象
      • 文件操作
      • 正则表达式
    • python库
      • numpy
      • pandas
      • scipy
      • matplotlib
      • scikit-learn
    • python应用
      • 排序算法
  • 数据结构与算法
    • 数据结构
    • 算法思想
      • 排序
        • 堆排序
        • 归并排序
        • 快速排序
      • 递归
    • 剑指offer
      • 链表
      • 二叉树
      • 数组
      • 字符串
      • 栈和队列
      • 递归
      • 动态规划
      • 其他
    • leetcode
    • 编程语言
      • c++
  • Hadoop
    • Hadoop简介
    • MapReduce
  • Hive
  • Spark
  • TensorFlow
    • TensorFlow1.0
      • TensorFlow基础
      • TensorFlow基础概念解析
      • TensorFlow机器学习基础
      • Tensorflow分布式架构
    • TensorFlow2.0
  • PyTorch
  • 机器学习
  • 机器学习概论
  • 特征工程
  • 感知机
  • k近邻
  • 朴素贝叶斯
  • 线性模型
    • 最大熵模型
    • 指数族分布与广义线性模型
    • 线性回归
      • Ridge回归(岭回归)
      • Lasso回归
    • Logistic回归-对数几率回归
  • 决策树
  • 支持向量机
    • 线性可分支持向量机与硬间隔最大化
    • 线性支持向量机与软间隔最大化
    • 非线性支持向量机与核函数
    • 序列最小最优化算法SMO
    • SVM总结
  • 集成学习
    • Bagging
      • 随机森林
    • Boosting
      • AdaBoost
      • GradientBoosting
        • GBDT
        • XGBoost
          • XGBoost理论
          • XGBoost实践
    • Stacking
  • 降维
    • PCA主成分分析
    • 流形学习
  • EM算法
  • HMM隐马尔科夫模型
  • CRF条件随机场
  • 聚类
    • k均值聚类
    • 高斯混合模型
  • 主题模型
    • LDA隐狄利克雷分布
  • 知识点
    • 损失函数
    • 负采样
  • 机器学习算法总结
  • 深度学习
  • 深度学习概论
  • ANN人工神经网络
  • 知识点
    • Batch Normalization
  • CNN卷积神经网络
  • 深度学习优化算法
  • RNN循环神经网络
  • LSTM长短期记忆网络
  • GRU门控循环单元
  • GNN图神经网络
    • GNN图神经网络综述
    • GCN图卷积网络
      • GCN图卷积网络初步理解
      • GCN图卷积网络的numpy简单实现
      • GCN图卷积网络本质理解
      • GCN图卷积网络全面理解
      • SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS ICLR2017
  • 神经网络架构搜索
    • Weight-Agnostic-Neural-Networks Google2019
  • 强化学习
  • 强化学习概论
  • 马尔科夫决策过程
  • 动态规划
  • 无模型方法一:蒙特卡洛
  • 无模型方法二:时间差分
  • 无模型方法三:多步自举
  • 函数近似和深度网络
  • 策略梯度算法
  • 深度强化学习
  • 基于模型的强化学习
  • 强化学习前景
  • 自然语言处理
  • 自然语言处理概论
  • 自然语言
  • 语言模型和中文分词
  • word2vec
    • word2vec概述
    • word2vec算法原理
    • word2vec源码分析
    • word2vec实践
  • Seq2Seq模型和Attention机制
  • Self-Attention和Transformer
  • 知识图谱
  • 推荐系统
  • 推荐系统概论
  • 基础知识
  • 进阶知识
    • 机器学习
      • Factorization Machines ICDM2010
    • embedding
      • Network Embedding
        • LINE: Large-scale Information Network Embedding
    • 深度学习
      • DeepFM: A Factorization-Machine based Neural Network for CTR Prediction 2017
      • DSSM: Learning Deep Structured Semantic Models for Web Search using Clickthrough Data CIKM2013
    • 图卷积网络
      • Graph Convolutional Neural Networks for Web-Scale Recommender Systems KDD2018
    • 强化学习
      • DRN基于深度强化学习的新闻推荐模型
  • 业界应用
    • YouTube
      • Deep Neural Networks for YouTube Recommendations RecSys2016
    • Alibaba
      • Learning Tree-based Deep Model for Recommender Systems KDD2018
      • Deep Interest Network for Click-Through Rate Prediction KDD2018
      • DSIN:Deep Session Interest Network for Click-Through Rate Prediction IJCAI2019
Powered by GitBook
On this page
  • AdaBoost
  • AdaBoost概述
  • AdaBoost算法
  • AdaBoost算法的训练误差分析
  • AdaBoost算法的解释
  • 前向分布算法
  • 前向分步算法与AdaBoost
  • AdaBoost算法的优点
  • 参考资料

Was this helpful?

  1. 集成学习
  2. Boosting

AdaBoost

PreviousBoostingNextGradientBoosting

Last updated 5 years ago

Was this helpful?

AdaBoost

AdaBoost概述

由于Boosting算法在解决实际问题时有一个重大的缺陷,即他们都要求事先知道弱分类算法分类正确率的下限,这在实际问题中很难做到,后来Freund和Schapire提出了AdaBoost 算法,该算法的效率与Freund方法的效率几乎一样,却不需要知道弱分类算法分类正确率的下限,可以非常容易地应用到实际问题中。

AdaBoost是Boosting算法家族中代表算法,AdaBoost主要是在整个训练集上维护一个分布权值向量Dm,用赋予权重的训练集通过弱分类算法产生分类假设Gm,即基分类器,然后计算他的错误率,用得到的错误率去更新分布权值向量Dm,对错误分类的样本分配更大的权值,正确分类的样本赋予更小的权值。每次更新后用相同的弱分类算法产生新的分类假设,这些分类假设的序列构成多分类器。对这些多分类器用加权的方法进行联合,最后得到决策结果。

这种方法不要求产生的单个分类器有高的识别率,即不要求寻找识别率很高的基分类算法,只要产生的基分类器的识别率大于0.5,就可作为该多分类器序列中的一员。

AdaBoost算法

算法流程如下图所示,AdaBoost重复调用弱学习算法(多轮调用产生多个分类器),首轮调用弱学习算法时,按均匀分布从样本集中选取子集作为该次训练集,以后每轮对前一轮训练失败的样本,赋予较大的分布权值(Dm为第m轮各个样本在样本集中参与训练的权值),使其在这一轮训练出现的权值增加,即在后面的训练学习中集中对比较难训练的样本进行学习,从而得到M个弱的基分类器,G1, G2, ... , Gm,其中Gm有相应的权值wm,并且其权值大小根据该分类器的效果而定。最后的分类器由生成的多个分类器加权联合产生。

现在叙述AdaBoost算法,

输入:训练数据集

T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{ (x_1,y_1), (x_2,y_2), ... , (x_N,y_N) \}T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)}

其中,每个样本点由实例与标记组成。实例xi∈X=R^n,yi∈Y={+1,-1};弱学习算法;

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

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

D1=(w11,...,w1i,,...,w1N),w1i=1N,i=1,2,...,ND_1=(w_{11}, ... , w_{1i}, , ... ,w_{1N}),\quad w_{1i}=\frac{1}{N},\quad i=1,2,...,ND1​=(w11​,...,w1i​,,...,w1N​),w1i​=N1​,i=1,2,...,N

(2)对m=1,2,...,M

(a)使用具有权值分布Dm的训练数据学习,得到基本分类器

Gm(x): X→{−1,+1}G_m(x):\ X\rightarrow \{ -1, +1 \}Gm​(x): X→{−1,+1}

(b)计算Gm(x)在训练数据集上的分类误差率

em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i)em​=P(Gm​(xi​)=yi​)=i=1∑N​wmi​I(Gm​(xi​)=yi​)

(c)计算Gm(x)的系数

αm=12log1−emem\alpha_m=\frac{1}{2}\text{log}\frac{1-e_m}{e_m}αm​=21​logem​1−em​​

这里的对数是自然对数

(d)更新训练数据集的权值分布

Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N\begin{aligned} D_{m+1}&=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N})\\ w_{m+1,i}&=\frac{w_{mi}}{Z_m}\text{exp}(-\alpha_my_iG_m(x_i)),\quad i=1,2,...,N\\ \end{aligned}Dm+1​wm+1,i​​=(wm+1,1​,...,wm+1,i​,...,wm+1,N​)=Zm​wmi​​exp(−αm​yi​Gm​(xi​)),i=1,2,...,N​

这里,Zm是规范化因子

Zm=∑i=1Nwmiexp(−αmyiGm(xi))Z_m=\sum_{i=1}^Nw_{mi}\text{exp}(-\alpha_my_iG_m(x_i))Zm​=i=1∑N​wmi​exp(−αm​yi​Gm​(xi​))

它使D(m+1)成为一个概率分布。

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

f(x)=∑m=1MαmGm(x)f(x)=\sum_{m=1}^M\alpha_mG_m(x)f(x)=m=1∑M​αm​Gm​(x)

得到最终分类器

G(x)=sign(f(x))=sign(∑m=1MαmGm(x))G(x)=\text{sign}(f(x))=\text{sign}\left( \sum_{m=1}^M\alpha_mG_m(x) \right)G(x)=sign(f(x))=sign(m=1∑M​αm​Gm​(x))

对AdaBoost算法做如下说明:

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

步骤(2)AdaBoost反复学习基本分类器,在每一轮m=1,2,...,M顺次地执行下列操作:

(a)使用当前分布Dm加权的训练数据集,学习基本分类器Gm(x)。

(b)计算基本分类器Gm(x)在加权训练数据集上的分类误差率:

em=P(Gm(xi)≠yi)=∑Gm(xi)≠yiwmie_m=P(G_m(x_i)\neq y_i)=\sum_{G_m(x_i)\neq y_i}w_{mi}em​=P(Gm​(xi​)=yi​)=Gm​(xi​)=yi​∑​wmi​

这里,w(mi)表示第m轮中第i个实例的权值,

∑i=1Nwmi=1\sum_{i=1}^Nw_{mi}=1i=1∑N​wmi​=1

。这表明,Gm(x)在加权的训练数据集上的分类误差率是被Gm(x)误分类样本的权值之和,由此可以看出数据权值分布Dm与基本分类器Gm(x)的分类误差率的关系。

(c)计算基本分类器Gm(x)的系数αm。αm表示Gm(x)在最终分类器中的重要性。由前面的αm的计算公式(位于算法第c步)可知,当em≤1/2时,αm≥0,并且αm随着em的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。

(d)更新训练数据的权值分布为下一轮作准备,前面算法第d步的w(m+1,i)可以写成

wm+1,i={wmiZmexp(−αm),Gm(xi)=yiwmiZmexp(αm),Gm(xi)≠yi\begin{aligned} w_{m+1,i}= \left\{\begin{matrix} &\frac{w_{mi}}{Z_m}\text{exp}(-\alpha_m), &\quad G_m(x_i)=y_i\\ &\frac{w_{mi}}{Z_m}\text{exp}(\alpha_m), &\quad G_m(x_i)\neq y_i\\ \end{matrix}\right. \end{aligned}wm+1,i​={​Zm​wmi​​exp(−αm​),Zm​wmi​​exp(αm​),​Gm​(xi​)=yi​Gm​(xi​)=yi​​​

由此可知,被基本分类器Gm(x)误分类的样本的权值得以扩大,而被正确分类的样本的权值却得以缩小。两相比较,误分类的样本的权值被放大了

e2αm=1−ememe^{2\alpha_m}=\frac{1-e_m}{e_m}e2αm​=em​1−em​​

倍。因此,误分类样本在下一轮学习中起到更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这是AdaBoost的一个特点。

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

下图是对AdaBoost分类过程中样本权值的变化及最终的f(x)的形象表示:

AdaBoost算法的训练误差分析

AdaBoost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据及上分类误差率。关于这个问题有下面的定理:

AdaBoost的训练误差界

AdaBoost算法最终分类器的训练误差界为

1N∑i=1NI(G(xi)≠yi)⩽1N∑iexp(−yif(xi))=∏mZm\frac{1}{N}\sum_{i=1}^NI(G(x_i)\neq y_i)\leqslant\frac{1}{N}\sum_i\text{exp}(-y_if(x_i))=\prod_mZ_mN1​i=1∑N​I(G(xi​)=yi​)⩽N1​i∑​exp(−yi​f(xi​))=m∏​Zm​

这里,G(x),f(x)和Zm分别由上面已经给出。

证明:当G(x)≠yi时,yif(xi)<0,因而exp(-yif(xi))≥1。由此直接推导出前半部分。

后半部分的推导要用到Zm的定义式及其上式的变形:

wmiexp(−αmyiGm(xi))=Zmwm+1,iw_{mi}\text{exp}(-\alpha_my_iG_m(x_i))=Z_mw_{m+1,i}wmi​exp(−αm​yi​Gm​(xi​))=Zm​wm+1,i​

现推导如下:

1N∑iexp(−yif(xi))=1N∑iexp(−∑m=1MαmyiGm(xi))=∑iw1i∏m=1Mexp(−αmyiGm(xi))=Z1∑iw2i∏m=2Mexp(−αmyiGm(xi))=Z1Z2∑iw3i∏m=3Mexp(−αmyiGm(xi))=...=Z1Z2...ZM−1∑iwMiexp(−αMyiGM(xi))=∏m=1MZm\begin{aligned} &\frac{1}{N}\sum_i\text{exp}(-y_if(x_i))\\ =&\frac{1}{N}\sum_i\text{exp}\left(-\sum_{m=1}^M\alpha_my_iG_m(x_i)\right)\\ =&\sum_iw_{1i}\prod_{m=1}^M\text{exp}\left(-\alpha_my_iG_m(x_i)\right)\\ =&Z_1\sum_iw_{2i}\prod_{m=2}^M\text{exp}\left(-\alpha_my_iG_m(x_i)\right)\\ =&Z_1Z_2\sum_iw_{3i}\prod_{m=3}^M\text{exp}\left(-\alpha_my_iG_m(x_i)\right)\\ =&...\\ =&Z_1Z_2...Z_{M-1}\sum_iw_{Mi}\text{exp}\left(-\alpha_My_iG_M(x_i)\right)\\ =&\prod_{m=1}^MZ_m\\ \end{aligned}=======​N1​i∑​exp(−yi​f(xi​))N1​i∑​exp(−m=1∑M​αm​yi​Gm​(xi​))i∑​w1i​m=1∏M​exp(−αm​yi​Gm​(xi​))Z1​i∑​w2i​m=2∏M​exp(−αm​yi​Gm​(xi​))Z1​Z2​i∑​w3i​m=3∏M​exp(−αm​yi​Gm​(xi​))...Z1​Z2​...ZM−1​i∑​wMi​exp(−αM​yi​GM​(xi​))m=1∏M​Zm​​

这一定理说明,可以在每一轮选取适当的Gm使得Zm最小,从而使训练误差下降最快。

这里就有疑惑了,分类器Gm的选取原则不是应该是分类误差率最小吗?这里成了让Zm最小了?

即分类器Gm的选取原则到底是:

  • 分类误差率最小?

  • Zm最小?

哪一个才对啊?其实,这两个本质是一样滴,不冲突。为啥?来看下面的解释:

由下面的定理中对Zm的计算可知,

Zm=1−4γm2Z_m=\sqrt{1-4\gamma_m^2}Zm​=1−4γm2​​

要使Zm最小,其实就是使γm最大。而γm又是什么呢?

γm=12−em\gamma_m=\frac{1}{2}-e_mγm​=21​−em​

所以,要使γm最大,就要使em最小。而em是什么呢?大哥,em就是分类器Gm的分类误差率呀。所以,让Zm最小,就是要让em(分类误差率)最小,这两个是等价的,不冲突的,一致的。

对二分类问题,有如下结果:

定理:二分类问题AdaBoost的训练误差界

∏m=1MZm=∏m=1M[2em(1−em)]=∏m=1M(1−4γm2)⩽exp(−2∑m=1Mγm2)\prod_{m=1}^MZ_m=\prod_{m=1}^M[2\sqrt{e_m(1-e_m)}]=\prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leqslant\text{exp}\left( -2\sum_{m=1}^M\gamma_m^2 \right)m=1∏M​Zm​=m=1∏M​[2em​(1−em​)​]=m=1∏M​(1−4γm2​)​⩽exp(−2m=1∑M​γm2​)

这里,

γm=12−em\gamma_m=\frac{1}{2}-e_mγm​=21​−em​

证明:由Zm的定义及em的定义得

Zm=∑i=1Nwmiexp(−αmyiGm(xi))=∑yi=Gm(xi)wmie−αm+∑yi≠Gm(xi)wmieαm=(1−em)e−αm+emeαm=2em(1−em)=1−4γm2\begin{aligned} Z_m&=\sum_{i=1}^Nw_{mi}\text{exp}\left(-\alpha_my_iG_m(x_i)\right)\\ &=\sum_{y_i=G_m(x_i)}w_{mi}e^{-\alpha_m}+\sum_{y_i\neq G_m(x_i)}w_{mi}e^{\alpha_m}\\ &=(1-e_m)e^{-\alpha_m}+e_me^{\alpha_m}\\ &=2\sqrt{e_m(1-e_m)}\\ &=\sqrt{1-4\gamma^2_m}\\ \end{aligned}Zm​​=i=1∑N​wmi​exp(−αm​yi​Gm​(xi​))=yi​=Gm​(xi​)∑​wmi​e−αm​+yi​=Gm​(xi​)∑​wmi​eαm​=(1−em​)e−αm​+em​eαm​=2em​(1−em​)​=1−4γm2​​​

至于不等式

∏m=1M(1−4γm2)⩽exp(−2∑m=1Mγm2)\prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leqslant\text{exp}\left( -2\sum_{m=1}^M\gamma_m^2 \right)m=1∏M​(1−4γm2​)​⩽exp(−2m=1∑M​γm2​)

则可先由exp(x)和sqrt(1-x)在点x=0的泰勒展开式推出不等式

(1−4γm2)⩽exp(−2γm2)\sqrt{(1-4\gamma_m^2)}\leqslant\text{exp}(-2\gamma_m^2)(1−4γm2​)​⩽exp(−2γm2​)

进而得到该不等式。

推论:如果存在γ>0,对所有m有γm≥γ,则

1N∑i=1NI(G(xi)≠yi)⩽exp(−2Mγ2)\frac{1}{N}\sum_{i=1}^NI(G(x_i)\neq y_i)\leqslant\text{exp}(-2M\gamma^2)N1​i=1∑N​I(G(xi​)=yi​)⩽exp(−2Mγ2)

这表明在此条件下AdaBoost的训练误差是以指数速率下降的。这一性质当然是很有吸引力的。

注意,AdaBoost算法不需要知道下界γ。这正是Freund与Schapire设计AdaBoost时所考虑到的。与一些早期的提升方法不同,Adaboost具有适应性,即它能适应若分类器各自的训练误差率。这也是它名称(自适应提升)的由来,Ada是Adaptive的简写。

AdaBoost算法的解释

AdaBoost算法还有另一个解释,即可以认为AdaBosst算法是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二分类学习方法。

前向分布算法

考虑加法模型

f(x)=∑m=1Mβmb(x;γm)f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m)f(x)=m=1∑M​βm​b(x;γm​)

其中,b(x;γm)为基函数,γm为基函数的参数,βm为基函数的系数。

显然,上面构建的基本分类器的线性组合

f(x)=∑m=1MαmGm(x)f(x)=\sum_{m=1}^M\alpha_mG_m(x)f(x)=m=1∑M​αm​Gm​(x)

是一个加法模型。

在给定训练数据及损失函数L(y,f(x))的条件下,学习加法模型f(x)成为经验风险极小化即损失函数极小化问题:

minβm,γm∑i=1NL(yi,∑m=1Mβmb(xi;γm))\mathop{\text{min}}_{\beta_m,\gamma_m}\sum_{i=1}^NL\left( y_i, \sum_{m=1}^M\beta_mb(x_i;\gamma_m) \right)minβm​,γm​​i=1∑N​L(yi​,m=1∑M​βm​b(xi​;γm​))

通常这是一个复杂的优化问题,前向分布算法求解这一优化问题的想法是:廻学习的是加法模型,如果能够从前到后,每一步只需吸一个基函数及其系数,逐步逼近优化目标函数式,那么就可以建华优化的复杂度。具体地,每步只需优化如下损失函数:

minβ,γ∑i=1NL(yi,βb(xi;γ))\mathop{\text{min}}_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma))minβ,γ​i=1∑N​L(yi​,βb(xi​;γ))

给定训练数据集T={ (x1,y1), (x2,y2), ... , (xN,yN) },xi∈X=R^n,yi∈Y={+1,-1}。损失函数L(y,f(x))和基函数的结合{ b(x;γ) },学习加法模型f(x)的前项分布算法如下:

前向分步算法:

输入:训练数据集集T={ (x1,y1), (x2,y2), ... , (xN,yN) };损失函数L(y,f(x));基函数集{ b(x;γ) };

输出:加法模型f(x)。

(1)初始化f0(x)=0

(2)对m=1,2,...,M

(a)极小化损失函数

(βm,γm)=arg minβ,γ∑i=1NL(yi,fm−1(xi)+βb(xi;γ))(\beta_m,\gamma_m)=\text{arg }\mathop{\text{min}}_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i; \gamma))(βm​,γm​)=arg minβ,γ​i=1∑N​L(yi​,fm−1​(xi​)+βb(xi​;γ))

得到参数βm,γm

(b)更新

fm(x)=fm−1(x)+βmb(x;γm)f_m(x)=f_{m-1}(x)+\beta_mb(x; \gamma_m)fm​(x)=fm−1​(x)+βm​b(x;γm​)

(3)得到加法模型

f(x)=fM(x)=∑m=1Mβmb(x;γm)f(x)=f_M(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m)f(x)=fM​(x)=m=1∑M​βm​b(x;γm​)

这样,前向分步算法将同时求解m=1到M所有参数βm,γm的优化问题简化为主次求解各个βm,γm的优化问题。

前向分步算法与AdaBoost

由前项分布算法可以推导出AdaBoost,用定理叙述这一关系。

定理:AdaBoost算法是前向分布加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。

证明:前向分布算法学习的是加法模型,当基函数为基本分类器时,该加法模型等价于AdaBoost的最终分类器。

f(x)=∑m=1MαmGm(x)f(x)=\sum_{m=1}^M\alpha_mG_m(x)f(x)=m=1∑M​αm​Gm​(x)

由基本分类器Gm(x)及其系数αm组成,m=1,2,...,M。前向分布算法逐一学习基函数,这一过程与AdaBoos算法逐一学习基本分类器的过程一致。下面证明前向分步算法的损失函数是指数损失函数。

L(y,f(x))=exp[−y f(x)]L(y,f(x))=exp[-y\ f(x)]L(y,f(x))=exp[−y f(x)]

时,其学习的具体操作等价于AdaBoost算法学习的具体操作。

假设经过m-1轮迭代,前向分布算法已经得到

fm−1(x)=fm−2(x)+αm−1Gm−1(x)=α1G1(x)+...+αm−1Gm−1(x)\begin{aligned} f_{m-1}(x)&=f_{m-2}(x)+\alpha_{m-1}G_{m-1}(x)\\ &=\alpha_1G_1(x)+...+\alpha_{m-1}G_{m-1}(x) \end{aligned}fm−1​(x)​=fm−2​(x)+αm−1​Gm−1​(x)=α1​G1​(x)+...+αm−1​Gm−1​(x)​

在第m轮迭代中,得到αm,Gm(x)和fm(x)。

fm(x)=fm−1(x)+αmGm(x)f_m(x)=f_{m-1}(x)+\alpha_mG_m(x)fm​(x)=fm−1​(x)+αm​Gm​(x)

目标是使前向分布算法得到的αm和Gm(x)使fm(x)在训练数据集T上的指数损失最小,即

(αm,Gm(x))=arg minα,G∑i=1Nexp[−yi(fm−1(xi)+αG(xi))](\alpha_m,G_m(x))=\text{arg }\mathop{\text{min}}_{\alpha,G}\sum_{i=1}^N\text{exp}[-y_i(f_{m-1}(x_i)+\alpha G(x_i))](αm​,Gm​(x))=arg minα,G​i=1∑N​exp[−yi​(fm−1​(xi​)+αG(xi​))]

上式可以表示为

(αm,Gm(x))=arg minα,G∑i=1Nw‾miexp[−yiαG(xi)](\alpha_m,G_m(x))=\text{arg }\mathop{\text{min}}_{\alpha,G}\sum_{i=1}^N\overline{w}_{mi}\text{exp}[-y_i\alpha G(x_i)](αm​,Gm​(x))=arg minα,G​i=1∑N​wmi​exp[−yi​αG(xi​)]

其中,

w‾mi=exp[−yifm−1(xi)]\overline{w}_{mi}=\text{exp}[-y_if_{m-1}(x_i)]wmi​=exp[−yi​fm−1​(xi​)]

。因为

w‾mi\overline{w}_{mi}wmi​

既不依赖α也不依赖于G,所以与最小化无关。但其依赖于$f_{m-1}(x)$,随着每一轮迭代而发生改变。

现证使上上式达到最小的α*m和G*m(x)就是AdaBoost算法所得到的αm和Gm(x)。求解上上式可分两步:

首先,求G*m(x)。对任意α>0,使上上式最小的G(x)由下式得到:

Gm∗(x)=arg minG∑i=1Nw‾miI(yi≠G(xi))G_m^*(x)=\text{arg }\mathop{\text{min}}_{G}\sum_{i=1}^N\overline{w}_{mi}I(y_i\neq G(x_i))Gm∗​(x)=arg minG​i=1∑N​wmi​I(yi​=G(xi​))

注:这里为什么能和上上式是等效的?有待研究。

有个启发(数学上不严谨,有待证明)就是,注意Zm的定义

Zm=∑i=1Nwmiexp(−αmyiGm(xi))Z_m=\sum_{i=1}^Nw_{mi}\text{exp}(-\alpha_my_iG_m(x_i))Zm​=i=1∑N​wmi​exp(−αm​yi​Gm​(xi​))

和

(αm,Gm(x))=arg minα,G∑i=1Nw‾miexp[−yiαG(xi)](\alpha_m,G_m(x))=\text{arg }\mathop{\text{min}}_{\alpha,G}\sum_{i=1}^N\overline{w}_{mi}\text{exp}[-y_i\alpha G(x_i)](αm​,Gm​(x))=arg minα,G​i=1∑N​wmi​exp[−yi​αG(xi​)]

是很类似的。也就是说

(αm,Gm(x))=arg minα,G∑i=1Nw‾miexp[−yiαG(xi)]≈arg minα,G Zm\begin{aligned} &(\alpha_m,G_m(x))\\ =&\text{arg }\mathop{\text{min}}_{\alpha,G}\sum_{i=1}^N\overline{w}_{mi}\text{exp}[-y_i\alpha G(x_i)]\\ \approx &\text{arg }\mathop{\text{min}}_{\alpha,G}\ Z_m\\ \end{aligned}=≈​(αm​,Gm​(x))arg minα,G​i=1∑N​wmi​exp[−yi​αG(xi​)]arg minα,G​ Zm​​

而前面已经说过了,Zm就是Gm的分类误差率。所以当然能由分类误差率得到啊,因为这两者本来就是等价的嘛。

此分类器G*m(x)即为AdaBoost算法的基本分类器Gm(x),因为它是使第m轮甲醛训练数据分类误差率最小的基本分类器。

之后,求α*m,上上上式中,

∑i=1Nw‾miexp[−yiαG(xi)]=∑yi=Gm(xi)w‾miexp(−α)+∑yi≠Gm(xi)w‾miexp(α)=(eα−e−α)∑i=1Nw‾miI(yi≠G(xi))+e−α∑i=1Nw‾mi\begin{aligned} &\sum_{i=1}^N\overline{w}_{mi}\text{exp}[-y_i\alpha G(x_i)]\\ =&\sum_{y_i=G_m(x_i)}\overline{w}_{mi}\text{exp}(-\alpha)+\sum_{y_i\neq G_m(x_i)}\overline{w}_{mi}\text{exp}(\alpha)\\ =&(e^{\alpha}-e^{-\alpha})\sum_{i=1}^N\overline{w}_{mi}I(y_i\neq G(x_i))+e^{-\alpha}\sum_{i=1}^N\overline{w}_{mi} \end{aligned}==​i=1∑N​wmi​exp[−yi​αG(xi​)]yi​=Gm​(xi​)∑​wmi​exp(−α)+yi​=Gm​(xi​)∑​wmi​exp(α)(eα−e−α)i=1∑N​wmi​I(yi​=G(xi​))+e−αi=1∑N​wmi​​

将已求得的G*m(x)带入上式,对α求导并使倒数为0,即得到使上上式最小的α。

αm∗=12log1−emem\alpha_m^*=\frac{1}{2}\text{log}\frac{1-e_m}{e_m}αm∗​=21​logem​1−em​​

其中,em是分类误差率:

em=∑i=1NN‾miI(yi≠Gm(xi))∑i=1NN‾mi=∑i=1NwmiI(yi≠Gm(xi))e_m=\frac {\sum_{i=1}^N\overline{N}_{mi}I(y_i\neq G_m(x_i))} {\sum_{i=1}^N\overline{N}_{mi}} = \sum_{i=1}^Nw_{mi}I(y_i\neq G_m(x_i))em​=∑i=1N​Nmi​∑i=1N​Nmi​I(yi​=Gm​(xi​))​=i=1∑N​wmi​I(yi​=Gm​(xi​))

这里的α*m与AdaBoost算法第2(c)步的αm完全一致。

最后来看每一轮样本权值的更新。由

fm(x)=fm−1(x)+αmGm(x)f_m(x)=f_{m-1}(x)+\alpha_mG_m(x)fm​(x)=fm−1​(x)+αm​Gm​(x)

以及

w‾mi=exp[−yifm−1(xi)]\overline{w}_{mi}=\text{exp}[-y_if_{m-1}(x_i)]wmi​=exp[−yi​fm−1​(xi​)]

,可得

w‾m+1,i=w‾m,iexp[−yiαmGm(x)]\overline{w}_{m+1,i}=\overline{w}_{m,i}\text{exp}[-y_i\alpha_mG_m(x)]wm+1,i​=wm,i​exp[−yi​αm​Gm​(x)]

这与AdaBoost算法第2(d)步的样本权重的更新,只相差规范化因子,因而等价。

AdaBoost算法的优点

  • AdaBoost是一种有很高精度的分类器

  • AdaBoost可以支持各种方式构建的弱分类器,如最简单的x<v这样的分类器,AdaBoost提供的是框架

  • 构造弱分类器简单,不用进行特征筛选

  • 不用担心过拟合

参考资料

  • 《统计学习方法》李航

本文主要参考这本书的对应章节。

返回顶层目录
返回上层目录
AdaBoost概述
AdaBoost算法
AdaBoost算法的训练误差分析
AdaBoost算法的解释
前向分布算法
前向分步算法与AdaBoost
AdaBoost算法的优点
AdaBoost-algorithm-flowchart
Boosting-algorithm