【机器学习详解】AdaBoost算法原理

版权声明:转载请注明出处! PS:欢迎大家提出疑问或指正文章的错误! https://blog.csdn.net/luoshixian099/article/details/51714346

转载请注明出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51714346

1.概念

AdaBoost是一种级联算法模型,即把几个弱分类器级联到一起去处理同一个分类问题。也就是“三个臭皮匠顶一个诸葛亮”的道理。例如一个专家作出的判定往往没有几个专家一起作出的判定更准确。一种情况:如果每个专家都仅有一票的权利,采用投票机制的方法属于uniform形式;另一种情况是分配给每个专家的票数不一致则属于linear形式。AdaBoost即属于第二种的行式,同时尽量使得每个专家考虑的则重点不同,最终给出投票结果更可信。

2.原理描述

给定一个数据集D(x,y),x表述特征,y对应标签值。在某种分类器上训练出模型 G1(x) ,下标1表示第一轮。第二轮上考虑上一轮 G1(x) 上被误分类的那一部分数据即 y(i)sign(G1(x(i))) ,然后提高被误分类点的训练权重,降低被正确分类点的权重 ,被误分类的的数据由于权重的增大会受到下一轮分类器更大的关注,继续学习训练出模型 G2(x) ;依此类推。最终级联上这M个分类器: G(x)=sign(Mm=1αmGm(x)) ,其中 αm 表示 Gm(x) 分类器所占的比重,直观上可以想到 αm 一定与分类器 Gm(x) 的性能有关,即分类误差率 ϵm 有直接关系。 Gm(x) 的分类误差率 ϵm 越低, αm 越大。

下图中 w(1)n 表示第一轮训练样本的权重向量, y1(x) 表示第一轮训练出的模型,然后根据 y1(x) 对样本数据分类情况,调整 w(2)n ,继续训练出 y2(x) ….

这里写图片描述

数学语言描述

  1. 训练数据集 D(x,y),xiRn 表示数据特征, yi{1,1} 表示对应的标签值,共N个样本点。分类器 Gm 分类误差率定义为 ϵm=Ni=1wmiI(Gm(xi)yi)Ni=1wmi
  2. 第一轮训练数据的权值: w1i=1N ,i=1,…N,即同等对待每个样本点。学习出弱分类器 G1(x) 。计算出 G1(x) 的分类误差率 ϵ1=Ni=1w1iI(G1(xi)yi)Ni=1w1i ;提高被 G1(x) 误分类样本点的权值,降低被正确分类样本点的权值。

现在讨论一下具体提高多少权值或者降低多少权值。AdaBoost的想法是让分类器 G1(x) 在调整权重后的 w2i 上表现出乱猜的效果。即 Ni=1w2iI(G1(xi)yi)Ni=1w2i=12 。由于每一轮训练的目标函数都是最小化误差函数,所以第二轮训练出的分类器与上一轮会不同。
具体的调整权值方法:
被错误分类的样本点: w2i=w1i1ϵ1ϵ1 ;被正确分类的点: w2i=w1i÷1ϵ1ϵ1
两种情况写在一起为 w2i=w1iexp(yiG1(xi)log1ϵ1ϵ1)
由于 ϵ112 ,则 1ϵ1ϵ11 ,所以被错分的样本点权值会升高,相反,被正确分类的样本点权值会降低。

3.得到第二轮的训练样本权值 w2i ,i=1,2,…N;继续训练样本分类器得到 G2(x) 。重复上述步骤2,得到M个分类器。
4.组合上述M个分类器: G(x)=sign(Mm=1αmGm(x)) ,其中 αm 表示每个分类器的权重, αm=log1ϵmϵm ;关于 αm 的定义,如果分类器的误差率 ϵm=12 (误差率达到 12 就相当于乱猜),则 αm=0 。如果分类器的误差率 ϵm=0 ,则 αm= ;

3.算法步骤

  1. 初始化权重 w1i=1N ,i=1,2,…,N
  2. For m=1,…,M:
    (a)训练分类器 Gm(x) 以最小化加权误差函数作为目标函数
    ϵm=Ni=1wmiI(Gm(xi)yi)Ni=1wmi

    (b)根据分类器误差 ϵm ,计算此分类器的权重 αm=log1ϵmϵm
    (c)更新下一轮样本权重 wm+1,i=wmiexp(yiGm(xi)log1ϵ1ϵ1) ;由于 αm=log1ϵmϵm ,所以可以记为:
    wm+1,i=wmiexp(αmyiGm(xi))
  3. 联合上述M个分类器得:
    G(x)=sign(m=1MαmGm(x))

4.Adaboost与前向分布算法

加法模型 f(x)=Mm=1βmb(x,γm) ,其中 b(x,βm) 为基函数, βm 为基函数系数。在给定训练数据及损失函数 L(y,f(x)) 情况下,目标函数为

minβm,γmi=1NL(yi,m=1Mβmb(xi;γm))

上述位置参数有2M个,可以采用前向分布算法,从前向后每一步只学习一个基函数及其系数逐步逼近上述目标函数。每一个只需优化下述损失函数:
minβ,γi=1NL(yi,βb(xi;γ))

前向分步算法

  1. 初始化 f0(x)=0
  2. 对m=1,2…M
    (a)极小化损失:

    (βm,γm)=minβ,γi=1Nexp(yi(fm1(xi)+βb(xi,γ)))

    (b)更新: fm(x)=fm1(x)+βmb(x;γm)

  3. 得到加法模型 f(x)=Mm=1βmb(x,γm)


下面证明Adaboost是前向分布算法的一个特例,基函数为分类器,误差函数为指数误差函数
指数误差函数定义: L(x,f(x))=Ni=1exp(yif(xi))
假设经过m-1轮迭代前向分布算法已经得到 fm1(x) ,下一步即的优化函数为:

(βm,γm)=minβ,γi=1Nexp(yi(fm1(xi)+βb(xi,γ)))
替换成Adaboost的表示方法为:
(αm,Gm)=minα,Gi=1Nexp(yi(fm1(xi)+αG(xi)))

定义 wmi=exp(yifm1(xi)) ,上式转变
=Ni=1wmiexp(yiαG(xi))
=yi=G(xi)wmieα+yiG(xi)wmieα
=Ni=1wmi(yi=G(xi)wmiNi=1wmieα+yiG(xi)wmiNi=1wmieα)
=Ni=1wmi((1ϵm)eα+ϵmeα) ;其中 ϵm=yiG(xi)wmiNi=1wmi
=Ni=1wmi(ϵm(eαeα)+eα))
固定 α>0 ,这样以指数函数作为损失函数的前向分布算法的每一步即最小化 ϵm .
ϵm=yiG(xi)wmiNi=1wmiAdaBoost
现在考虑参数 α 的优化,对 Ni=1wmi(ϵm(eαeα)+eα)) 求导,令为0得:
ϵm(eα+eα)eα=0
α=log1ϵmϵm
对应到AdaBoost的每个分类器的权重 αm 的计算方法。从而可知,AdaBoost算法优化方法实际上相当于前向分步算法。

考虑Adaboost最后的指数误差损失函数: E(z)=ez,z=yf(x) ;如下图绿色曲线,实际也是在对0-1损失函数(黑色)上限逼近;蓝色曲线对应SVM的合页损失;红色对应逻辑回归损失函数。
这里写图片描述


Reference:
统计学习方法-李航
PRML-M.BISHOP
http://www.loyhome.com/≪统计学习精要the-elements-of-statistical-learning≫课堂笔记(十四)/

猜你喜欢

转载自blog.csdn.net/luoshixian099/article/details/51714346
今日推荐