理解boosting
boosting假定模型为加性模型:Fm(x)=∑m=1Mβmfm(x;γm)
优化目标:minβm,γm∑i=1NL(yi,∑m=1Mβmfm(xi;γm))
boosting过程:
1. initialise f0(x)=0
2. for m=1 to M
compute (βm,γm)=argmin∑i=1NL(yi,Fm−1(xi)+βmfm(xi;γm))
set Fm(x)=∑m=1Mβmfm(x;γm)
AdaBoost
算法过程见《统计学习方法》p138,这里备注下细节。
分类错误:迭代到m时,算分类误差,算的仅仅是当前这步分类器分类错误的,而不是前m步加权累加的分类错误。
迭代终止条件:仅仅人为指定M(分类器数量)。(倘若第n步(n<M)时,分类准确率已经很高了。。。)
AdaBoost解释
优化目标函数 E=∑n=1Nexp(−ynFm(Xn)),n是样本数。
这个分类错误为什么不是0-1损失,而是指数形式?
这个指数损失是0-1的凸上界。会有一些良好的性质,比如优化快。
但是,对异常值敏感,鲁棒性差。可能一个噪音点能将分界面拉动很远。(所以后来有了 LogitBoost)
序列最小化指数函数Fm(x)=∑m=1Mβmfm(x),
所以
E=n=1∑Nexp(−ynFm(Xn))=n=1∑Nexp(−ynFm−1(Xn)−ynβmfm(Xn))=n=1∑Nwnmexp(−ynβmfm(Xn))=e−βmn∈Tm∑wnm+eβmn∈Mm∑wnm=e−βmn∈Tm∑wnm+e−βmn∈Mm∑wnm−e−βmn∈Mm∑wnm+eβmn∈Mm∑wnm=e−βmn=1∑Nwnm+(eβm−e−βm)n=1∑NwnmI(fm(Xn)=yn)=e−βmn=1∑Nwnm+(eβm−e−βm)n=1∑NwnmI(fm(Xn)=yn) 其中
w_n^m = \exp(-y_n F_{m-1}(X_n) ) \\
y_n f_m(X_n) = 1 -2I(f_m(X_n) \neq y_n) \quad \mbox{就是分对了为1,分错了为-1}
然后通过∂βm∂E=0来求解E最小值。
∂βm∂E=0⇒βm=21ln(em1−em)这就是错误加权率em=∑n=1Nwnm∑n=1NwnmI(fm(Xn)=yn)样本权重更新公式=∑n=1Nwnm∑n=1Nexp(−ynFm−1(Xn))I(fm(Xn)=yn)=∑n=1Nwnm∏n=1Nexp(−ynβmfm(Xn))I(fm(Xn)=yn)对照前面的权重更新公式,就是一直累乘起来 AdaBoost变种
LogitBoost
既然是logit损失,那么优化的就是负对数似然:l(yn,p(xn))=−log(1+e−2ynFm(xn)) 。迭代时也用的是牛顿步。
误差分析
Bagging:样本分布的相似性E[n∑nxi]=E[xi],所以boostrap模型的bias与单个模型的bias差不多。各个boostrap模型之间有一定的相关性,但不完全相同,所以Aggregating之后降低了一定程度的variance。
Boosting : 有序的最小化损失函数,所以bias逐步下降
参考佳文