本文共 2062 字,大约阅读时间需要 6 分钟。
开春,复课。
一句无关的话...今天打开Google Reader看到7月份要关的提示,无限悲伤。看着落园若干RSS源里面累计800+的读者,只能说句bless...2008年开始使用,到现在,伴我度过了多少读书时光呀。不过确实也衰落了,高峰的时候一个RSS源就有600+读者,现在也只剩一半了。写博客,越来越像一件出力不讨好的事情了。
--------正文开始---------
提升与梯度树
这里讲的AdaBoost是仅针对二类分类器的提升。大致的思想就是,给我一个弱分类器,还你一个强分类器。听起来蛮神奇的对不对?
先说算法实现。
第一步:初始化。 f0(x)=0
,权重初始值 wi=1N,∀i∈{ 1,...,n}。
第二步:迭代。
for m = 1 to M
也就是说,我们不断的生成新的权重,当分类器分错的时候更改权重。
第三步:输出。最终的分类器为前面的加权。
G(x)=sign(∑Mm=1αmGm(x))
这样就实现了从一个弱分类器改善到一个强分类器。这里弱分类器是指误差比随机猜的1/2少一点。
另注:在修改权重那一步的时候,也可以定义 βm=αm2
,然后 wi=wi⋅{ eβme−βmifrightifwrong ,这样在最后的时候也可以改成 G(x)=sign(∑Mm=1βmGm(x))。总之这里的直觉是,如果分对了,那么权重下降;反之,分错的时候这些样本的权重上升。最后take average就可以了。
之所以上面又引入 βm
,便是为了更好地理解这一类模型:自适应基函数模型。
1. 我们称 f(x)=∑Mm=1βmb(x,γm)
为基函数模型,其中 { b(x,γ),γ∈Γ} 成为基函数基。注意这里和GLM有很大的不同,广义线性模型后面的 γm为确定的。
2. 前向分步算法。
数据集记作 { (xi,yi),1≤i≤N}
。定义一个损失函数,比如常见的 L2均方误差,
(y−f(x))2
,或者0-1准则。
然后步骤为:
这样我们就把这个最优化问题转变成了M步,每步只做一个参数的最优化(近似方法)。
有了这么一个一般性的框架,我们就可以套用具体的形式。
1. 定义指数损失函数: L(y,f(x))=exp(−yf(x))
。
2. 两类分类、指数损失函数的自适应基函数模型。
前向分布算法:
(i)
====∑i=1NL(yi,fm−1(xi)+βb(xi,γ))∑i=1Nexp[−yi(fm−1(xi)+βb(xi,γ))]∑i=1Nw(m)i⋅exp(−βyib(xi,γ)),w(m)i=exp(−yifm−1(xi))eβ(∑y≠b(xi,γ)w(m)i)+e−β(∑y=b(xi,γ)w(m)i)∑i=1Nw(m)i⎡⎣eβ∑y≠b(xi,γ)w(m)i∑Ni=1w(m)i+e−β∑y=b(xi,γ)w(m)i∑Ni=1w(m)i⎤⎦
定义
err(γ)m=∑y≠b(xi,γ)w(m)i∑Ni=1w(m)i
这样上式就可以化作
==∑i=1Nw(m)i[eβerr(γ)m+e−β(1−err(γ)m)]∑i=1Nw(m)i[(eβ−e−β)err(γ)m)+e−β]
(ii) 固定 β>0
,优化 γ.
∑y≠b(xi,γ)w(m)i=∑Ni=1w(m)iI(y≠b(xi,γ))
然后最小化,则 γ=argmin∑Ni=1w(m)iI(y≠b(xi,γ))
。假定 γ已被优化,然后继续。
(iii)优化 β
。 βm=argmin∑Ni=1w(m)i[(eβ−e−β)err(γ)m)+e−β]取一阶条件FOC,则有
(eβ−e−β)err(γ)m)−e−β=0
这样最后
β=[log1−errmerrm]/2
这样就看出来上面那个AdaBoost里面的 β
是怎么来的了吧?
(iv) 回到AdaBoost
fm(x)w(m)i=====fm−1(x)+βmb(xi,γ)exp(−yifm−1(x))exp(−yi[fm−1(xi)+βmb(xi,γ)])w(m)iexp(−yiβmb(xi,γ))w(m)iexpβm[−yib(xi,γ)]
看出来最后的AdaBoost雏形了吧?
转载地址:http://kcvqj.baihongyu.com/