开春,复课。
一句无关的话...今天打开Google Reader看到7月份要关的提示,无限悲伤。看着落园若干RSS源里面累计800+的读者,只能说句bless...2008年开始使用,到现在,伴我度过了多少读书时光呀。不过确实也衰落了,高峰的时候一个RSS源就有600+读者,现在也只剩一半了。写博客,越来越像一件出力不讨好的事情了。
--------正文开始---------
提升与梯度树
1. Boost(AdaBoost)
这里讲的AdaBoost是仅针对二类分类器的提升。大致的思想就是,给我一个弱分类器,还你一个强分类器。听起来蛮神奇的对不对?
先说算法实现。
第一步:初始化。 f0(x)=0
,权重初始值 wi=1N,∀i∈{1,...,n}。
第二步:迭代。
for m = 1 to M
- 根据已有算法(即弱分类器)和{ wi
- .
- 计算误差: errm=∑N1I(yi≠Gm(xi))⋅wi∑Ni=1wi
- ,这里我们把权重进行归一化。
- 计算 Gm 权重: αm=log1−errmerrm
- 修改样本权重
wi
:
wi=wi⋅exp(αm⋅I(yi≠Gm(xi))
也就是说,我们不断的生成新的权重,当分类器分错的时候更改权重。
第三步:输出。最终的分类器为前面的加权。
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就可以了。
2. 自适应基函数模型、前向分布算法
之所以上面又引入 β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准则。
然后步骤为:
- 初始化: f0(x)=0
- 迭代:For m=1 to M, (βm,γm)=argmin∑Ni=1L(yi,fm−1(xi)+βb(xi,γ))
- 令 fm(x)=fm−1(x)+βmb(xi,γ)
- 。
- 输出
fm(x)
- 。
这样我们就把这个最优化问题转变成了M步,每步只做一个参数的最优化(近似方法)。
3. 指数损失函数与AdaBoost
有了这么一个一般性的框架,我们就可以套用具体的形式。
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雏形了吧?