adaboost属于一种提升方法,提升方法基于这样的一种想法:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家的判断要好。提升方法就是将弱学习算法提升为强学习方法的一种手段,其中比较著名的算法是adaboost算法。
adaboost算法描述如下:
输入:训练数据集T = {(x1, y1), (x2, y2), ..., (xn, yn)},其中 xi∈X⊆Rn,yi∈ Y = {-1, +1},弱学习算法;
输出:最终分类器G(x).
(1) 初始化训练数据的权值分布
D1 = (w11, ..., w1i,w1n), w1i = 1/n, i = 1, 2, ..., n
(2) 对 m = 1,2,3,...,M有
for m in [1,2,...,M]:
a) 使用具有权值的分布的Di的训练数据集学习,得到基本分类器
Gm(x):X -> {-1, +1}
b) 计算Gi(x)在训练数据集上的分类误差率
em = P(Gm(xi) != yi) = ∑wmi*I(Gm(xi) != yi)
c) 计算Gm(x)的系数
am = 1/2log((1 - em)/em)),这里的对数是自然对数
d) 更新训练数据集的权值分布
Dm+1= (wm+1,1,wm+1,2, ...,wm+1,n)
wm+1,i = wm,i/Zm exp(-amyiGm(xi)), i = 1,2,...,N
这里Zi是规范化因子
Zm = ∑wmi exp(-am*yi*Gm(xi)) , 它使得Dm+1成为一个概率分布
(3)构建基本分类器的线性组合
f(x) = ∑amGm(x)
得到最终的分类器
G(x) = sign(f(x)) = sign(∑amGm(x))
步骤(1)假设训练数据集初始的权值分布相同,即w1 = w2 = ... = wn = 1/n,权值相同代表的含义就是每个训练样本在基本分类器的学习中作用相同,这一假设能够保证第一步能够在原始数据集上学习基本分类器G1(x).
比如我们的基本分类器是决策树,如果知道权值,我们就能够正常的执行步骤(2)了
步骤(2)Adaboost学习了m轮分类器,每一轮生成一个基本分类器,生成分类器的过程如下:
(a) 使用当前分布Dm的数据集学习基本分类器Gm(x)
(b) 计算基本分类器的误差率,这个误差率是带有加权的数据的
em = P(Gm(xi) != yi) = ∑ I(Gm(x) != yi) * wmi
(c) 计算基本分类器Gm(x)的系数am,am直观上来看,是代表这个分类器在整个分类过程中的重要性
(d) 更新训练数据集的权值分布,为下一轮做准备
wm+1,i 可以写成
wmi/Zm * e^-am 当Gm(xi) = yi时;
wmi/Zm * e^am 当Gm(xi) != yi时
从这里可以知道,当G != yi时,指数项 e^am > 1 所以wm+1,i 增大,下一个分类器权值就变大,这样就导致如果下一次分类还分类错了,该项就比较影响em的值,进而导致am+1降低,最终导致该项的重要性就降低
步骤(3)实现了对M个基本分类器的加权表决,从这里可以看出来am代表了基本分类器Gm(x)的重要性
adaboost 算法训练误差分析
这部分内容个比较简单,我直接贴一下就好了
其中,Zm = ∑wmi*e^(-am*yi*Gm(xi))。这一定理说明,在每一轮要选择适当的Gm(xi),使得训练误差下降的最快。
对于二分类问题,有下面的结果:
证明如下:
Adaboost 算法不需要知道下界,而且能够适应弱分类器各自的误差率。
Adaboost 算法解释
adaboost算法还有另外一种解释,可以认为adaboost算法是模型为加法模型,损失函数是指数函数,学习算法是向前分布算法时的二类分类学习方法.
那什么时向前分布算法呢,先说说向前分布算法的基本思想:因为学习是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近目标函数式,那么可以简化目标函数的复杂度。
直接说这个会有点儿搞不清情况,用公式解释会更清楚些:
首先,加法模型是:f(x)=∑βm*b(x;γm)
其中b(x;γm)是基函数,γm是基函数的参数,βm是是基函数的系数,显然,可以看出来式 f(x) = ∑aiGi(x)是一个加法模型
下一步,如果我们给定了损失函数L(y, f(x)),那么学习加法模型就能够变成经验最小模型,解决问题的方法就是求损失函数的极小值:
min ∑L(yi, ∑βm*b(x;γm))
这样,我们每次只需要最优化每一项的加法模型函数,即做对每一项的函数(∑L(yi,β*b(x;γ)))求极值,这样子我们就能够求出所有的极致了,毕竟 min a + min b + min c == min (a + b + c)
以下是向前分布算法的具体内容:
adaboost 算法本质上是向前分布算法的一种特例