Adaboost算法流程和证明
1、Adaboost算法简介
Adaboost算法是Freund和Schapire依照在线分配算法提出的,他们详细分析了Adaboost算法错误率的上界,以及为了使强分类器达到错误率,算法所需要的最多迭代次数等相关咨询题。与Boosting算法不同的是,Adaboost算法不需要预先明白弱学习算法学习正确率的下限即弱分类器的误差,同时最后得到的强分类器的分类精度依靠于所有弱分类器的分类精度,如此能够深入挖掘弱分类器算法的能力。
2、Adaboost 算法差不多原理
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它依照每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用Adaboost分类器能够排除一些不必要的训练数据特点,并将关键放在关键的训练数据上面。
Adaboost算法中不同的训练集是通过调整每个样本对应的权重来实现的。开始时,每个样本对应的权重是相同的,即其中 n为样本个数,在此样本分布下训练出一弱分类器。关于分类错误的样本,加大其对应的权重;而关于分类正确的样本,降低其权重,如此分错的样
本就被突出出来,从而得到一个新的样本分布。在新的样本分布下,再次对弱分类器进行训练,得到弱分类器。依次类推,通过T次循环,得到T个弱分类器,把那个T弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。
Adaboost算法的具体步骤如下:
{(x1,y1),(x2,y2),设输入的n个训练样本为:,(xn,yn)},其中xi是输入的训练样本,yi{0,1}分不表示正样本和负样本,其中正样本数为l,负样本数m。nlm,具体步骤如下:
⑴初始化每个样本的权重wi,iD(i); ⑵对每个t1,,T(T为弱分类器的个数):
①把权重归一化为一个概率分布
wt,iwt,iwj1n
t,j②对每个特点f,训练一个弱分类器hj运算对应所有特点的弱分类器的加权错误率
jwt(xi)hj(xi)yi
i1n③选取最佳的弱分类器ht(拥有最小错误率):t ④按照那个最佳弱分类器,调整权重
wt1,iwt,it1i
其中i0表示被正确地分类,i1,表示被错误地分类
t
t 1t
⑶最后的强分类器为:
1h(x)01Ttht(x)t1log,2t1t1ttotherwiseT
3、Adaboost算法应用
随着Adaboost算法的进展,目前Adaboost算法广泛的应用于人脸检测、目标识不等领域,其中有在人脸识不、汽车识不、驾驶员瞬间识不的方面的应用和研究。
Discete-Adaboost算法
1、给定训练集:x1,y1,,xN,yN,其中yi1,1,表示xi的正确的类不标签,i1,,N ,gj(xi)表示第i副图像的第
j个特点值
2、训练集上样本的初始分布:D1i3、查找弱分类器ht(t1,,T)
1 m⑴关于每个样本中的第j个特点,能够得到一个弱分类器hj,即可得到阈值j和方向pj,使得jDt(xi)hj(xi)yi达到最小,而弱分类器
i1Nhj为:
1pjgj(x)pjjhj(x)other1
其中pj决定不等式的方向, 只有1两种情形。
4、将所有特点(j)中选择出一个具有最小误差t的弱分类器ht。 5、对所有的样本权重进行更新
Dt1iNDtiexptyihtxiZt
其中Zt是使Dt1(xi)1得归一化因子。
i16、通过T轮训练得到T个最优的弱分类器,现在组成一个强分类器;
HfinalTxsignthtt1x
在Adaboost算法的弱学习中,将产生错误率为1,2T的弱分类器。假如每个错误率t,则强分类器的总错误率e2 (t1-t)一切都从强分类器的错误率开始 第一权值更新
Dt1iDtiexptyihtxiZtexpttyiht(xi)mtZt12expyf(x)
iimtZt其中f(xi)ttht(x) 然后强分类器的错误率
training error(H)1if yiH(xi)1Ni0else1if yif(xi)01Ni0else1exp(yif(xi))Niit
Dt1(i)Zt使那个错误率快速下降?
ZtDt(i)exp(tyiht(xi))
iZt为归一化因子。
转化为求Zt的最小值了!
ZtDt(xi)exp(tyiht(xi))ii:yiH(xi)Dt(xi)exp(t)i:yiH(xi)Dt(xi)exp(t)
(1t)exp(t)texp(t)现在我们用贪心算法求出Zt的一个局部最小值 对Zt中的t求导[现在将t固定]
dZt(1t)exp(t)texp(t) dt令导数为零
dZt0解出 dttln(121tt)
现在
Zt2t(1t) 绘制Zt关于t的曲线图
从这幅图上我们能够看出,当错误率越小或者越大(只要不在中点处徘徊)的时候Zt快速收敛到0。
越小:讲明错误越小的分类器能快速识不出正例。 越大: 讲明错误越大的分类器也能快速识不出正例。
jDt(xi)hj(xi)yi
i1N既然最大,只要我把弱分类器取反,如此错误率确实是最小,如此依旧收敛到0。
从以上的证明,我们明白只要是弱分类器的错误率都取最小,因此我们就能组合得到一个强分类器。
接下来我们就找出一个弱分类器h1(x)错误率1专门小。找T个联合起来就得到了强分类器Hfinalx!
如何找弱分类器?
决策树ID3,C4.5,C5.0
ID3 生成树用(CIG类不属性增益法) C4.5 生成树用(Gain Ratio增益比率法) 修剪树用(Rule post-pruning规则修剪) C5.0 生成树用(Gini index 基尼指数) 修剪树用(CRAT回来树修剪)
然后给出Yoav Freund 论文中给出的查找方法
gj(x1),gj(x2)gj(xN)
排序
gj(x1),gj(x2)gj(xN)
令阈值
jigj(xi)gj(xi1)2
N1pjgj(x)pjjhj(x),jDt(xi)hj(xi)yii10other
因篇幅问题不能全部显示,请点此查看更多更全内容