数据挖掘十大经典算法学习之Adaboost自适应增强学习算法

http://blog.csdn.net/vshadow/article/details/8227775

定义

The strong and weak learnability are equivalent.

--Kearns and Valiant(1989)

强分类器和弱分类器是相同的,多个弱分类器组合可以达到强分类器的效果。通过迭代生成一列分类器,每个分类器都依赖于之前的一个,之前分类器错分的样本被赋予更高的权重。

训练数据集D {(x1,y1,w1),( x2,y2,w2),…,( xn,yn,wn)}xi是输入向量,yi是它的类别并且yiY(类别集合),wi是样例的权重并且∑Iwi=1

算法构造kBaseLearner。每个训练样例的权重均被初始化为1/m。每次迭代中,数据集DtD相同,仅权重不同。每次迭代构造一个新的分类器ht

算法

AdaBoost算法的具体步骤如下:

1. 初始化样本权重为1/m,即为训练样本的初始权重分布;

3. 第一次迭代:

(1)训练样本的概率分布相当,训练弱分类器;

(2)计算弱分类器的错误率;

(3)选取合适阈值,使得误差最小;

(4)更新样本权重:减小弱分类器分类效果较好的数据的权重,增大弱分类器分类效果较差的数据的权重。

4. T次循环后,得到T个弱分类器,按更新的权重叠加,最终得到的强分类器。

[plain]  view plain copy
  1. AdaBoost(D,Y,BaseLearner,k)  
  2. Initialize Di(wi)=1/m;           //每个训练样例的权重被初始化为1/m  
  3. for t=1,.., k do              //k个分类器  
  4. ht=BaseLearner(Dt);          //构造新的分类器  
  5. et=∑Dt(wt)[ ht≠y];          //计算ht的错误率  
  6. if et>0.5 then              //如果错误率大于抛硬币错误率  
  7. k=k-1;                   //移除该次迭代并且  
  8. exit-loop                 //退出该循环  
  9. else  
  10.   αt= 1/2ln(et/(1-et))        //放大,提高ht的权重  
  11.   Dt+1(wi)= Dt(wi)/Zt×exp(-αt)  if ft(Dt(wi))=yi or   //正确分类,放大该样本权重  
  12.   Dt+1(wi)= Dt(wi)/Zt×exp(αt)   if ft(Dt(wi))≠yi     //错误分类,缩小该样本权重  
  13.   //即 Dt(wi) exp(-αtyiht(xi))/ Zt ,ht(xi)只有1与-1两个取值  
  14. endif  
  15. endfor  
  16. Output: H(x)=sign(∑t=1Tαtht(x))    

note: exp(t)=et

sign(t)大于0,取1;小于0,取-1

注意:计算et的时候要加上训练样本的权重。ZtDt(wi)之和。Dt(wi)/Zt即是对权重进行归一化处理。

示例

例如,图-1所示二维空间数据点的数据集,包含4个实例。zn是二维空间的坐标,yn是类标(label)。

-1

该数据集在二维空间如图-2所示。

-2

构建8个弱分类器如图-3所示。

-3

D1(i)=1/m=1/4

t=1,使用h1分类器进行分类。z1分类正确,其它3个分类错误。e1=0.75>0.5break

Z1= D1(1)+ D1(2)+ D1(3)+ D1(4)=1/4+1/4+1/4+1/4=1

D2(i)= D1(i) =1/4

Z2= Z1= D1(1)+ D1(2)+ D1(3)+ D1(4)=1/4+1/4+1/4+1/4=1

t=2,使用h2分类器进行分类。仅z1分类错误。e2=0.25<0.5,α2= 1/2ln(e2/(1-e2))=1/2ln30.55

//exp(-αt)= exp(-1/2ln(et/(1-et))=1/((et/(1-et))0.5

// exp(αt) = exp(1/2ln(et/(1-et))=((et/(1-et))0.5

// z1被错误分类,权重增加

D3(1)= D2(1)/Z2×exp(-α2)=1/4*3          //3是根号3啊,真不好打出来

// z2~z4被正确分类,权重降低

D3(2)= D2(2)/Z2×exp(α2)=1/12*3

D3(3)= D2(3)/Z2×exp(α2)=1/12*3

D3(4)= D2(4)/Z2×exp(α2)=1/12*3

Z3= D3(1)+ D3(2)+ D3(3)+ D3(4)=1/4*3+1/12*3+1/12*3+1/12*3=1/2*3

t=3,使用h3分类器进行分类。仅zz分类错误。e3=1/12*3 / (1/4*3+1/12*3+1/12*3+1/12*3)=1/6 < e2

以此类推。

最终分类器H(x)=sign(t=1Tαtht(x))。

Acknowledgements&References

部分材料采自于实验室杨T师兄的讲座,谢谢杨T师兄提供资料。

本文示例来自于周志华的《Ensemble Methods, Foundations and Algorithms》第二章Boostingp28~30

刘冰《Web数据挖掘》第三章监督学习,p84~85

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值