声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢~
背景:
AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊~,以下是自己看了A Short Introduction to Boosting和PRML的一些笔记. 摔~
正文:
AdaBoost算法,是一种组合算法(通过多个弱分类器,组合成一个强分类器):
关于AdaBoost算法的流程,简单的描述,我们以A Short Introduction to Boosting中提到的用AdaBoosting进行二分类来描述一下AdaBoost算法的具体流程:
1, 不放假设给定要训练的数据包含下面三个信息data{weight,value,values[num]}; 注意:num表示的分类的数目,这里num=2;
然后data也是一个大小N的数组,我们这里假定有T个弱分类器(T的大小需要自定义,原则上越大越好,但是T了会有性能问题,需要主观把握一下),其中value,values中的值取值范围在{-1,+1}之间取舍.
2, 初始化data数组中的weight=1/N;
3, for t = 1,...,T;
3.1使用第t个弱分类器对数据data进行分类,然后得到分类的数组ht:X -> {-1,+1};
3.2 统计分类错误率: E=表示错误率,errorNum表示样本分类错误的个数,totalNum表示总样本数.
3.3 计算a的值,并保存在数组中,计算公式: Et为上面计算所得的错误率,一般要求错误率不要低于1/2
3.4 更新数据data中的权重weight
for i=1 , ...., N ;
if ht(xi) == data[i].value:
else
注:Zt代码
3.5 data中的权重weight更新完成之后,t=t+1,重新将新的权重的data交给下一个弱分类器进行分类,重复3~3.5;
最后将得到的at , ht(x),进行累成,
4 for i=1 , ..... , N ;
5.1计算accuray:
以上就是整个Adaboost原理的详细流程,更加形象的流程图,出自依据PRML;
如果理解了上面流程之后,建议移步去这个地方学习一下,因为总结的比较到位,所以就直接给出地址,去哪儿看吧~;