参考了统计学习方法,西瓜书,Machine Learnig with python做的总结,还包含自己用sklearn做的一些对比实验,原文是写在jupyter上的,这里是直接转为.md导过来的,所以格式有些问题,有些东西还待完善…
参考的博客https://www.cnblogs.com/pinard/p/6140514.html,
https://blog.csdn.net/qq_22238533/article/details/79185969
集成学习(ensemble learning)
集成学习是通过构建并结合多个学习器来完成学习任务.一般结构:先产生一组“个体学习器”,在以某种策略将他们结合起来.同质个体学习器,也称为基学习器(base learner),相应的算法称为基学习算法.当然也可以是异质的,此时个体学器称为“组件学习器”.
基学习器有时也被称为弱学习器,集成学习通过多个学习器的结合,常常可以获得比单一学习器显著优越的泛化性能,这对弱学习器尤为明显.
误差率
考虑二分类问题
y
∈
{
−
1
,
+
1
}
y\in\{-1,+1\}
y∈{−1,+1},假定基分类器的分类误差率为
ϵ
\epsilon
ϵ,即对每一个基分类器
G
i
G_i
Gi有:
P
(
G
i
(
x
)
≠
y
)
=
ϵ
P(G_i(x)\neq y)=\epsilon
P(Gi(x)̸=y)=ϵ
假定集成通过简单投票法来结合
T
T
T个基分类器,若有超过半数的基分类器正确,则集成分类就正确,这里使用符号函数
s
i
g
n
sign
sign来表示投票过程:
G
(
x
)
=
s
i
g
n
(
∑
i
=
1
T
G
i
(
x
)
)
G(x)=sign(\sum_{i=1}^TG_i(x))
G(x)=sign(i=1∑TGi(x))
集成学习预测错误的条件是:k个基分类器预测正确,其中
k
≤
⌊
T
2
⌋
k\leq \left \lfloor \frac{T}{2} \right \rfloor
k≤⌊2T⌋,
T
−
k
T-k
T−k个基分类器预测错误.
假设基分类器的错误率相互独立,则集成学习器分类误差率为: p ( H ( x ) ≠ y ) = ∑ k = 0 ⌊ T 2 ⌋ C T k ( 1 − ϵ ) k ϵ ( T − k ) ( 1 ) p(H(x)\neq y)=\sum_{k=0}^{\left \lfloor \frac{T}{2} \right \rfloor}C_T^k(1-\epsilon)^k\epsilon^{(T-k)} (1) p(H(x)̸=y)=k=0∑⌊2T⌋CTk(1−ϵ)kϵ(T−k)(1)这里对上式的理解是,每个基分类器误分概率是 ϵ \epsilon ϵ,所以正确分类的概率为 ( 1 − ϵ ) (1-\epsilon) (1−ϵ),那么要想求整体误分概率,由于是投票方式集成,因此只需要误分的基分类器数量大于正确分类的基分类器数量就可以,所以是个组合问题.
根据Hoeffding不等式有: p ( H ( x ) ≠ y ) = ∑ k = 0 ⌊ T 2 ⌋ C T k ( 1 − ϵ ) k ϵ ( T − k ) ≤ e x p ( − 1 2 T ( 1 − 2 ϵ ) 2 ) ( 2 ) p(H(x)\neq y)=\sum_{k=0}^{\left \lfloor \frac{T}{2} \right \rfloor}C_T^k(1-\epsilon)^k\epsilon^{(T-k)}\leq exp(-\frac{1}{2}T(1-2\epsilon)^2) (2) p(H(x)̸=y)=k=0∑⌊2T⌋CTk(1−ϵ)kϵ(T−k)≤exp(−21T(1−2ϵ)2)(2)
解释:对于服从伯努利分布(1或0)抛硬币游戏,如果过设置单次抛掷硬币A面向上的概率是
p
p
p,则B面向上为
1
−
p
1-p
1−p。那么抛掷
n
n
n次,A面朝上的次数不超过
k
k
k次的概率为:
P
(
H
(
n
)
≤
k
)
=
∑
i
=
0
k
C
n
i
p
i
(
1
−
p
)
n
−
i
P(H(n)\leq k)=\sum_{i=0}^kC_n^ip^i(1-p)^{n-i}
P(H(n)≤k)=i=0∑kCnipi(1−p)n−i,这里
H
(
n
)
H(n)
H(n)表示n次抛硬币A面向上次数.
对于
k
k
k,存在某一
γ
\gamma
γ,当
k
=
(
p
−
γ
)
n
k=(p-\gamma)n
k=(p−γ)n时,有:
P
(
H
(
n
)
≤
k
)
=
P
(
H
(
n
)
≤
(
p
−
γ
)
n
)
≤
e
x
p
(
−
2
γ
2
n
)
P(H(n)\leq k)=P(H(n)\leq (p-\gamma)n)\leq exp(-2\gamma^2n)
P(H(n)≤k)=P(H(n)≤(p−γ)n)≤exp(−2γ2n)这就是伯努利分布的Hoeffding不等式。
对应(1)式中,把T个分类器的判断看为T次抛硬币,A面向上的次数小于等于
T
2
\frac{T}{2}
2T,所以存在有
T
2
=
(
ϵ
−
γ
)
T
\frac{T}{2}=(\epsilon-\gamma)T
2T=(ϵ−γ)T,解出:
γ
=
ϵ
−
1
2
\gamma=\epsilon-\frac{1}{2}
γ=ϵ−21
所以可以改写为
P
(
H
(
T
)
≤
T
2
)
≤
e
x
p
(
−
2
(
ϵ
−
1
2
)
2
T
)
P(H(T)\leq \frac{T}{2})\leq exp(-2(\epsilon-\frac{1}{2})^2T)
P(H(T)≤2T)≤exp(−2(ϵ−21)2T),所以有(2)式成立.(2)式显示出,随着集成中个体分类器数目
T
T
T的增大,集成的误差率将指数级下降(因为误差率的上界是指数函数),最终趋于0,但是这建立在关键性假设上:基学习器的误差相互独立.
集成学习大体可以分为两类:
1.个体学习器之间不存在强依赖关系,可以同时生成的并行化方法,代表是Bagging和随机森林(RandomForests)(并行生成)
2.个体学习器之间存在强依赖关系,必须串行生成的序列化方法,每一轮迭代产生一个个体学习器,代表方法是Boosting(串行生成)
一 随机森林(Random Forests)
Why
树模型一般来说是高方差,低偏差的,也就是容易过拟合.而且分类树模型的另一个缺点是它们是不稳定的,也是就是当数据发生微小变化时,会导致另外一个完全不同的树模型.而随机森林是可以解决不稳定性和过拟合的最有效方法之一.
随机森林基于两个基本概念,称为bagging和subspace sampling
Bagging
给定包含 m m m个样本的数据集,我们先随机选取一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时,该样本仍有可能被选中,这样经过 m m m次随机采样,我们得到含有 m m m个样本的采样集.这样有的样本会多次出现.我们可以采集 T T T个含有 m m m个样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合.Bagging对于分类通常也是采取简单投票方式来集成基学习器,而对于回归则采取平均来集成基学习器.
随机森林
随机森林是Bagging的一个扩展变体.RF以决策树作为基学习器然后构建Bagging集成。最重要的是在构建决策树过程中,引入随机属性选择,也即是传统决策树选择划分属性时,是在当前节点的属性集合中选择一个最优属性(设总共有 d d d个属性),而在RF中,对于决策树的每个节点,先从该节点的属性集合中随机选择一个包含 k k k个属性的子集,然后再从这个子集中选择一个最优属性用于划分.这里参数 k k k控制随机性程度,当 k = d k=d k=d时,与传统构建一样,当 k = 1 k=1 k=1时,则是随机选择一个属性划分.一般选取 k = l o g 2 ( d ) k=log_2(d) k=log2(d)
极致随机森林
在极随机化的树中(参见ExtraTreesClassifier和ExtraTreesRegressor类),随机性在计算分割的方式上更进了一步。 与在随机森林中一样,使用候选特征的随机子集,但是不是寻找最具辨别力的阈值,而是针对每个候选特征随机绘制阈值,并且挑选这些随机生成的阈值中的最佳阈值作为分裂规则。这通常允许更多地减少模型的方差,代价是偏差略微增加(参考Sklearn documentation)
优点
简单,易实现,计算开销小
二 提升方法(Boosting)-AdaBoosting
提升方法就是从弱学习算法出发,反复学习,得到一系弱分类器(基分类器),然后组合这些弱分类器,构成强分类器。大多数提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器
提升方法要解决的两个问题:
1.在每一轮如何改变训练数据的权值或概率分布
2.如何将弱分类器组合成强分类器
AdaBoosting的解决方式:
1.提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值,这样可以加大后一轮的弱分类器对错误分类样本的关注
2.AdaBoosting采用加权多数表决的方法.具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大作用,减小分类误差率大的弱分类器权值,使其在表决中起较小作用.
(一) AdaBoosting算法
AdaBoost二类二分类问题算法
假设给定一个二分类的训练数据集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
T={(x1,y1),(x2,y2),...,(xn,yn)}其中
y
∈
{
+
1
,
−
1
}
y\in\{+1,-1\}
y∈{+1,−1}
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
T={(x1,y1),(x2,y2),...,(xn,yn)};弱学习算法;
输出:最终分类器
G
(
x
)
G(x)
G(x)
1.初始化训练数据的权值分布
D
1
=
w
11
,
.
.
.
,
w
1
i
,
.
.
.
,
w
1
n
,
w
1
i
=
1
N
,
i
=
1
,
2
,
.
.
,
N
D_1={w_{11},...,w_{1i},...,w_{1n}},w_{1i}=\frac{1}{N},i=1,2,..,N
D1=w11,...,w1i,...,w1n,w1i=N1,i=1,2,..,N
2.对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M:
\quad\quad
(a).使用具有权值分布
D
m
D_m
Dm的训练数据学习,得到基分类器:
G
m
(
x
)
:
X
→
+
1
,
−
1
G_m(x):X\rightarrow{+1,-1}
Gm(x):X→+1,−1
\quad\quad
(b).计算
G
m
(
x
)
G_m(x)
Gm(x)在训练数据集上的分类误差率:
e
m
=
P
(
G
m
(
x
)
≠
y
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
(
也
就
是
误
分
类
样
本
的
权
值
之
和
)
(
1
)
e_m=P(G_m(x)\neq y)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i)(也就是误分类样本的权值之和) (1)
em=P(Gm(x)̸=y)=i=1∑NwmiI(Gm(xi)̸=yi)(也就是误分类样本的权值之和)(1)
\quad\quad
©.计算
G
m
(
x
)
G_m(x)
Gm(x)的系数:
α
m
=
1
2
l
o
g
1
−
e
m
e
m
(
2
)
\alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m} (2)
αm=21logem1−em(2)
\quad\quad
(d).更新训练数据集的权值分布:
D
1
=
w
m
+
1
,
1
,
.
.
.
,
w
m
+
1
,
i
,
.
.
.
,
w
m
+
1
,
n
D_1={w_{m+1,1},...,w_{m+1,i},...,w_{m+1,n}}
D1=wm+1,1,...,wm+1,i,...,wm+1,n
w
m
+
1
,
i
=
w
m
i
Z
m
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
,
i
=
1
,
2..
,
N
(
4
)
w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)),i=1,2..,N (4)
wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2..,N(4)
即
:
w
m
+
1
,
i
=
{
w
m
i
Z
m
e
−
α
m
,
G
m
(
x
i
)
=
y
i
w
m
i
Z
m
e
α
m
,
G
m
(
x
i
)
≠
y
i
即 :w_{m+1,i}=\left\{\begin{matrix} \frac{w_{mi}}{Z_m}e^{-\alpha_m},G_m(x_i)=y_i\\ \frac{w_{mi}}{Z_m}e^{\alpha_m},G_m(x_i)\neq y_i \end{matrix}\right.
即:wm+1,i={Zmwmie−αm,Gm(xi)=yiZmwmieαm,Gm(xi)̸=yi
\quad\quad
相对正确分类样本,误分类样本权值被放大
e
2
α
m
e^{2\alpha_m}
e2αm倍,这里
Z
m
Z_m
Zm是规范化因子(目的是使权值在
0
−
1
0-1
0−1之间且和为
1
1
1)
Z
m
=
∑
i
=
1
N
w
m
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
(
5
)
Z_m=\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i)) (5)
Zm=i=1∑Nwmiexp(−αmyiGm(xi))(5)
3.构建基本分类器的线性组合:
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
(
6
)
f(x)=\sum_{m=1}^M\alpha_mG_m(x) (6)
f(x)=m=1∑MαmGm(x)(6)注意线性组合实现
M
M
M个基本分类器的加权表决,其符号表示实例
x
x
x的类别,
f
(
x
)
f(x)
f(x)的值表示分类的确信度,
α
m
\alpha_m
αm之和并不为1
得到最终分类器:
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
(
7
)
G(x)=sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x)) (7)
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))(7)
对于AdaBoost多元分类算法,原理与二元分类似,主要区别在弱分类器系数上.比如AdaBoost SAMME算法,其弱分类器系数:
α
m
=
1
2
l
o
g
(
1
−
e
m
e
m
)
+
l
o
g
(
K
−
1
)
\alpha_m=\frac{1}{2}log(\frac{1-e_m}{e_m})+log(K-1)
αm=21log(em1−em)+log(K−1)其中
K
K
K表示类别数,当为二分类时
K
=
2
K=2
K=2,此时系数
α
\alpha
α就和原算法一样了.论文http://web.stanford.edu/~hastie/Papers/samme.pdf
AdaBoost回归问题算法
这里使用AdaBoost R2回归
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}
T={(x1,y1),(x2,y2),...,(xn,yn)};弱学习算法;
输出:最终强学习器G(x)
1.初始化训练数据的权值分布
D
1
=
w
11
,
.
.
.
,
w
1
i
,
.
.
.
,
w
1
n
,
w
1
i
=
1
N
,
i
=
1
,
2
,
.
.
,
N
D_1={w_{11},...,w_{1i},...,w_{1n}},w_{1i}=\frac{1}{N},i=1,2,..,N
D1=w11,...,w1i,...,w1n,w1i=N1,i=1,2,..,N
2.对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M:
\quad\quad
(a).使用具有权值分布
D
m
D_m
Dm的训练数据学习,得到弱分类器
G
m
(
x
)
G_m(x)
Gm(x)
\quad\quad
(b).计算
G
m
(
x
)
G_m(x)
Gm(x)在训练数据集上每个样本的相对误差:
\quad\quad\quad
线性误差
e
m
i
=
y
i
−
G
m
(
x
i
)
E
m
,
i
=
1
,
2
,
.
.
.
,
N
e_{mi}=\frac{y_i-G_m(x_i)}{E_m},i=1,2,...,N
emi=Emyi−Gm(xi),i=1,2,...,N
\quad\quad\quad
平方误差
e
m
i
=
(
y
i
−
G
m
(
x
i
)
)
2
E
m
2
,
i
=
1
,
2
,
.
.
.
,
N
e_{mi}=\frac{(y_i-G_m(x_i))^2}{E_m^2},i=1,2,...,N
emi=Em2(yi−Gm(xi))2,i=1,2,...,N
\quad\quad\quad
指数误差
e
m
i
=
1
−
e
x
p
(
−
(
y
i
−
G
m
(
x
i
)
)
E
m
)
,
i
=
1
,
2
,
.
.
.
,
N
e_{mi}=1-exp(\frac{-(y_i-G_m(x_i))}{E_m}),i=1,2,...,N
emi=1−exp(Em−(yi−Gm(xi))),i=1,2,...,N
\quad\quad\quad
其中
E
m
E_m
Em是训练集上最大误差
E
m
=
m
a
x
∣
y
i
−
G
m
(
x
i
)
∣
,
i
=
1
,
2
,
.
.
.
,
N
E_m=max|y_i-G_m(x_i)|,i=1,2,...,N
Em=max∣yi−Gm(xi)∣,i=1,2,...,N
\quad\quad
©.计算
G
m
(
x
)
G_m(x)
Gm(x)在训练数据集上回归误差率:
e
m
=
∑
i
=
1
N
w
m
i
e
m
i
e_m=\sum_{i=1}^Nw_{mi}e_{mi}
em=i=1∑Nwmiemi
\quad\quad
(d).计算弱学习器权重系数
α
m
=
e
m
1
−
e
m
\alpha_m=\frac{e_m}{1-e_m}
αm=1−emem
\quad\quad
(e).更新样本集权重分布
w
m
+
1
,
i
=
w
m
,
i
Z
m
α
m
1
−
e
m
i
,
i
=
1
,
2
,
.
.
.
,
N
w_{m+1,i}=\frac{w_{m,i}}{Z_m}\alpha_{m}^{1-e_{mi}},i=1,2,...,N
wm+1,i=Zmwm,iαm1−emi,i=1,2,...,N
Z
m
=
∑
i
=
1
N
w
m
,
i
α
m
1
−
e
m
i
,
i
=
1
,
2
,
.
.
.
,
N
Z_m=\sum_{i=1}^Nw_{m,i}\alpha_{m}^{1-e_{mi}},i=1,2,...,N
Zm=i=1∑Nwm,iαm1−emi,i=1,2,...,N
3.构建最终强学习器
G
(
x
)
=
∑
m
=
1
M
(
l
n
1
α
m
)
G
m
(
x
)
G(x)=\sum_{m=1}^M(ln\frac{1}{\alpha_m})G_m(x)
G(x)=m=1∑M(lnαm1)Gm(x)
import sklearn.ensemble
import numpy as np
import matplotlib.pyplot as pl
import math
e=np.arange(0.1,1,0.01)
α m = 1 2 l o g 1 − e m e m \alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1−em的图像, e m ≤ 1 2 e_m\leq\frac{1}{2} em≤21时, α ≥ 0 \alpha\geq0 α≥0,而且 α \alpha α随着 e m e_m em的减小而增大
a=0.5*np.log((1-e)/(e))
pl.plot(e,a)
pl.show()
AdaBoost误差分析
定理1
\quad \quad
AdaBoost算法最终分类器的训练误差界为:
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
1
N
∑
i
=
1
N
e
x
p
(
−
y
i
f
(
x
i
)
)
=
∏
m
Z
m
\frac{1}{N}\sum_{i=1}^NI(G(x_i)\neq y_i)\leq\frac{1}{N}\sum_{i=1}^N exp(-y_if(x_i))=\prod_mZ_m
N1i=1∑NI(G(xi)̸=yi)≤N1i=1∑Nexp(−yif(xi))=m∏Zm这里
G
(
x
)
G(x)
G(x)来自式(7),
f
(
x
)
f(x)
f(x)来自式(6),
Z
m
Z_m
Zm来自(5).这一定理说明可以在每一轮选取适当
G
m
G_m
Gm使得
Z
m
Z_m
Zm最小,从而使训练误差下降最快
证明:
当
G
(
x
i
)
≠
y
i
G(x_i)\neq y_i
G(xi)̸=yi时
I
=
1
I=1
I=1,
y
i
f
(
x
i
)
<
0
y_if(x_i)<0
yif(xi)<0,此时
e
x
p
(
−
y
i
f
(
x
i
)
)
≥
1
exp(-y_if(x_i))\geq1
exp(−yif(xi))≥1,当
G
(
x
i
)
≠
y
i
G(x_i)\neq y_i
G(xi)̸=yi时
I
=
0
I=0
I=0,
y
i
f
(
x
i
)
>
0
y_if(x_i)>0
yif(xi)>0,此时
e
x
p
(
−
y
i
f
(
x
i
)
)
≤
1
exp(-y_if(x_i))\leq1
exp(−yif(xi))≤1.
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
1
\frac{1}{N}\sum_{i=1}^NI(G(x_i)\neq y_i)\leq 1
N1i=1∑NI(G(xi)̸=yi)≤1由此直接推出前一部分.
后一部分:
根据(4)式我们有
w
m
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
=
Z
m
w
m
+
1
,
i
(
8
)
w_{mi}exp(-\alpha_my_iG_m(x_i))=Z_mw_{m+1,i}(8)
wmiexp(−αmyiGm(xi))=Zmwm+1,i(8)
推导:
1
N
∑
i
N
e
x
p
(
−
y
i
f
(
x
i
)
)
=
1
N
∑
i
N
e
x
p
(
−
∑
m
=
1
M
α
m
y
i
G
m
(
x
i
)
)
\frac{1}{N}\sum_i^Nexp(-y_if(x_i))=\frac{1}{N}\sum_i^Nexp(-\sum_{m=1}^M\alpha_my_iG_m(x_i))
N1i∑Nexp(−yif(xi))=N1i∑Nexp(−m=1∑MαmyiGm(xi))
=
1
N
∑
i
N
∏
m
=
1
M
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
=\frac{1}{N}\sum_i^N\prod_{m=1}^Mexp(-\alpha_my_iG_m(x_i))
=N1i∑Nm=1∏Mexp(−αmyiGm(xi))由于
w
1
,
i
=
1
N
w_{1,i}=\frac{1}{N}
w1,i=N1所以有
=
∑
i
N
w
1
i
∏
m
=
1
M
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
=\sum_i^Nw_{1i}\prod_{m=1}^Mexp(-\alpha_my_iG_m(x_i))
=i∑Nw1im=1∏Mexp(−αmyiGm(xi))再是使用(8)式则有
=
Z
1
∑
i
N
w
2
i
∏
m
=
2
M
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
=Z_1\sum_i^Nw_{2i}\prod_{m=2}^Mexp(-\alpha_my_iG_m(x_i))
=Z1i∑Nw2im=2∏Mexp(−αmyiGm(xi))
=
Z
1
Z
2
∑
i
N
w
3
i
∏
m
=
3
M
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
=Z_1Z_2\sum_i^Nw_{3i}\prod_{m=3}^Mexp(-\alpha_my_iG_m(x_i))
=Z1Z2i∑Nw3im=3∏Mexp(−αmyiGm(xi))
=
.
.
.
=...
=...
=
∏
m
=
1
M
Z
m
=\prod_{m=1}^MZ_m
=m=1∏MZm
定理2 \quad\quad 对于二分类问题的AdaBoost训练误差界有:
∏ m = 1 M Z m = ∏ m = 1 M [ 2 e m ( 1 − e m ) ] = ∏ m = 1 M ( 1 − 4 γ m 2 ) ≤ e x p ( − 2 ∑ m = 1 M γ m 2 ) \prod_{m=1}^MZ_m=\prod_{m=1}^{M}[2\sqrt {e_m(1-e_m)}]=\prod_{m=1}^{M}\sqrt(1-4\gamma_m^2)\leq exp(-2\sum_{m=1}^M\gamma_m^2) m=1∏MZm=m=1∏M[2em(1−em)]=m=1∏M(1−4γm2)≤exp(−2m=1∑Mγm2)
这里 γ m = 1 2 − e m \gamma_m=\frac{1}{2}-e_m γm=21−em
证明:由(5)式有: Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=i=1∑Nwmiexp(−αmyiGm(xi)) = ∑ G ( x i ) = y i w m i e − α m + ∑ G ( x i ) ≠ y i w m i e α m =\sum_{G(x_i)=y_i}w_{mi}e^{-\alpha_m}+\sum_{G(x_i)\neq y_i}w_{mi}e^{\alpha_m} =G(xi)=yi∑wmie−αm+G(xi)̸=yi∑wmieαm = ( 1 − e m ) e − α m + e m e α m =(1-e_m)e^{-\alpha_m}+e_me^{\alpha_m} =(1−em)e−αm+emeαm = 2 e m ( 1 − e m ) = 1 − 4 γ m 2 =2\sqrt{e_m(1-e_m)}=\sqrt{1-4\gamma_m^2} =2em(1−em)=1−4γm2
根据
e
x
和
1
−
x
e^x和\sqrt{1-x}
ex和1−x在x=0处的泰勒展开式推出不等式
(
1
−
4
γ
m
2
)
≤
e
x
p
(
−
2
γ
m
2
)
\sqrt{(1-4\gamma_m^2)}\leq exp(-2\gamma_m^2)
(1−4γm2)≤exp(−2γm2)
推论
\quad\quad
如果存在
γ
>
0
\gamma>0
γ>0对所有
γ
<
γ
m
\gamma<\gamma_m
γ<γm则:
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
e
x
p
(
−
2
M
γ
2
)
\frac{1}{N}\sum_{i=1}^NI(G(x_i)\neq y_i)\leq exp(-2M\gamma^2)
N1i=1∑NI(G(xi)̸=yi)≤exp(−2Mγ2)
这表明此条件(二分类)下AdaBoost的训练误差是以指数速率下降的,这是训练误差上界是指数函数.
AdaBoost算法的解释
AdaBoost算法另一个解释:AdaBoost是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法的二分类学习方法.
前向分步算法
考虑加法模型: f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) f(x)=m=1∑Mβmb(x;γm)
其中, b ( x ; γ m ) b(x;\gamma_m) b(x;γm)为基函数, γ m \gamma_m γm为基函数参数, β m \beta_m βm为基函数系数.显然(6)式:$f(x)=\sum_{m=1}^M\alpha_mG_m(x) $也是一个加法模型
在给定训练数据及损失函数 L ( y , f ( y ) ) L(y,f(y)) L(y,f(y))的条件下,学习加法模型 f ( x ) f(x) f(x)的问题,成为经验风险极小化即损失函数极小化问题: m i n β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x ; γ m ) ) ( 14 ) min_{\beta_m,\gamma_m}\sum_{i=1}^NL(y_i,\sum_{m=1}^M\beta_mb(x;\gamma_m)) (14) minβm,γmi=1∑NL(yi,m=1∑Mβmb(x;γm))(14)
前向分布算法求解这个问题思路:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(14),那么就可以简化优化的复杂度.具体的,每一步只需要优化如下损失函数: m i n β , γ ∑ i = 1 N L ( y i , β b ( x i , γ ) ) ( 15 ) min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i,\gamma)) (15) minβ,γi=1∑NL(yi,βb(xi,γ))(15)
具体的前向分布算法:
输入:训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
T={(x_1,y_1),(x_2,y_2),...,(x_n,y_n)}
T=(x1,y1),(x2,y2),...,(xn,yn);损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x));基本函数集
b
(
x
;
γ
)
{b(x;\gamma)}
b(x;γ);
输出:加法模型
f
(
x
)
f(x)
f(x).
(1)初始化
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0
(2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M:
\quad\quad
a.极小化损失函数
a
r
g
m
i
n
β
,
γ
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
β
b
(
x
i
;
γ
)
)
(
16
)
argmin_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (16)
argminβ,γi=1∑NL(yi,fm−1(xi)+βb(xi;γ))(16)
\quad\quad
得到参数
β
m
\beta_m
βm,
γ
m
\gamma_m
γm
\quad\quad
b.更新
f
m
(
x
)
=
f
m
−
1
(
x
)
+
β
m
b
(
x
;
γ
m
)
(
17
)
f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) (17)
fm(x)=fm−1(x)+βmb(x;γm)(17)
(3).得到加法模型
f
(
x
)
=
f
M
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
(
18
)
f(x)=f_M(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) (18)
f(x)=fM(x)=m=1∑Mβmb(x;γm)(18)
AdaBoost与前向分步算法
定理3 \quad\quad AdaBoost是前向分步算法的特例.AdaBoost模型是基分类器组成的加法模型,损失函数是指数函数
证明:
由于AdaBoost的最终分类器是 f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) f(x)=∑m=1MαmGm(x),本身就是一个加法模型,因此我们只需要证明其损失函数是指数函数 L ( y , f ( x ) ) = e x p ( − y f ( x ) ) L(y,f(x))=exp(-yf(x)) L(y,f(x))=exp(−yf(x))时,其学习的具体操作等价于AdaBoost算法学习的具体操作.
假设经过
m
−
1
m-1
m−1轮迭代前向分布算法已经得到
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x):
f
m
−
1
(
x
)
=
f
m
−
2
(
x
)
+
α
m
−
1
G
m
−
1
(
x
)
=
α
1
G
1
(
x
)
+
.
.
.
+
α
m
−
1
G
m
−
1
(
x
)
f_{m-1}(x)=f_{m-2}(x)+\alpha_{m-1}G_{m-1}(x)=\alpha_1G_1(x)+...+\alpha_{m-1}G_{m-1}(x)
fm−1(x)=fm−2(x)+αm−1Gm−1(x)=α1G1(x)+...+αm−1Gm−1(x)
第m轮迭代可以得到
α
m
\alpha_m
αm,
G
m
(
x
)
G_m(x)
Gm(x)和
f
m
(
x
)
f_m(x)
fm(x):
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
f_m(x)=f_{m-1}(x)+\alpha_mG_m(x)
fm(x)=fm−1(x)+αmGm(x)目标是使前向分步算法得到的
α
m
\alpha_m
αm和
G
m
(
x
)
G_m(x)
Gm(x)使
f
m
(
x
)
f_m(x)
fm(x)在训练数据集
T
T
T上的指数损失函数最小,即
(
α
m
,
G
m
(
x
)
)
=
a
r
g
m
i
n
α
,
G
∑
i
=
1
N
e
x
p
(
−
y
i
(
f
m
−
1
(
x
i
)
+
α
G
(
x
i
)
)
)
(
20
)
(\alpha_m,G_m(x))=argmin_{\alpha,G}\sum_{i=1}^Nexp(-y_i(f_{m-1}(x_i)+\alpha G(x_i))) (20)
(αm,Gm(x))=argminα,Gi=1∑Nexp(−yi(fm−1(xi)+αG(xi)))(20)
上式可以表示为: ( α m , G m ( x ) ) = a r g m i n α , G ∑ i = 1 N w ˉ m i e x p [ − y i α G ( x i ) ] ( 21 ) (\alpha_m,G_m(x))=argmin_{\alpha,G}\sum_{i=1}^N\bar{w}_{mi}exp[-y_i\alpha G(x_i)] (21) (αm,Gm(x))=argminα,Gi=1∑Nwˉmiexp[−yiαG(xi)](21)
其中 w ˉ m i = e x p [ − y i f m − 1 ( x i ) ] \bar{w}_{mi}=exp[-y_if_{m-1}(x_i)] wˉmi=exp[−yifm−1(xi)],因为 w ˉ m i \bar{w}_{mi} wˉmi既不依赖于 α \alpha α也不依赖于 G G G,所以与最小化无关.但是 w ˉ m i \bar{w}_{mi} wˉmi依赖于 f m − 1 ( x ) f_{m-1}(x) fm−1(x),随着每一轮迭代而发生变化
下面证明,使得式(21)式达到最小的 α m ∗ \alpha^*_m αm∗,$G_m^\ast(x) 就 是 A d a B o o s t 算 法 所 得 到 的 就是AdaBoost算法所得到的 就是AdaBoost算法所得到的\alpha_m 和 和 和G_m(x)$,求解(21)式分两步:
首先,求 G m ∗ ( x ) G_m^\ast(x) Gm∗(x),对任意 α > 0 \alpha>0 α>0,使式(21)最小的 G ( x ) G(x) G(x)由下式得到: G m ∗ ( x ) = a r g m i n G ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) ( 22 ) G_m^\ast(x)=argmin_G\sum_{i=1}^N\bar{w}_{mi}I(y_i\neq G(x_i))(22) Gm∗(x)=argminGi=1∑NwˉmiI(yi̸=G(xi))(22)
其中 w ˉ m i = e x p [ − y i f m − 1 ( x i ) ] \bar{w}_{mi}=exp[-y_if_{m-1}(x_i)] wˉmi=exp[−yifm−1(xi)],这里(22)和(21)式实际上是等价的,因为对 ∑ i = 1 N w ˉ m i e x p [ − y i α G ( x i ) ] \sum_{i=1}^N\bar{w}_{mi}exp[-y_i\alpha G(x_i)] ∑i=1Nwˉmiexp[−yiαG(xi)]求最小值, α > 0 \alpha>0 α>0, w ˉ m i \bar{w}_{mi} wˉmi可看为常量,所以只用每个 y i G ( x i ) y_iG(x_i) yiG(xi)最大,那么也就是尽量让 I ( y i ≠ G ( x i ) ) I(y_i \neq G(x_i)) I(yi̸=G(xi))的在整个数据集上的数量最小.也就是下面这句话
此分类器 G m ∗ ( x ) G_m^\ast(x) Gm∗(x)即为AdaBoost算法的基分类器 G m ( x ) G_m(x) Gm(x),因为他是使得第 m m m轮加权训练数据分类误差率最下的基本分类器. w ˉ m i \bar{w}_{mi} wˉmi就是数据权值
然后求解
α
m
∗
\alpha_m^\ast
αm∗,式(21)可写成如下:
∑
i
=
1
N
w
ˉ
m
i
e
x
p
[
−
y
i
α
G
(
x
i
)
]
\sum_{i=1}^N\bar{w}_{mi}exp[-y_i\alpha G(x_i)]
i=1∑Nwˉmiexp[−yiαG(xi)]
=
∑
G
m
(
x
i
)
=
y
i
w
ˉ
m
i
e
−
α
+
∑
G
m
(
x
i
)
≠
y
i
w
ˉ
m
i
e
α
=\sum_{G_m(x_i)=y_i}\bar{w}_{mi}e^{-\alpha}+\sum_{G_m(x_i)\neq y_i}\bar{w}_{mi}e^{\alpha}
=Gm(xi)=yi∑wˉmie−α+Gm(xi)̸=yi∑wˉmieα
=
(
e
α
−
e
−
α
)
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
(
x
i
)
)
+
e
−
α
∑
i
=
1
N
w
ˉ
m
i
=(e^\alpha-e^{-\alpha})\sum_{i=1}^N\bar{w}_{mi}I(y_i\neq G(x_i))+e^{-\alpha}\sum_{i=1}^N\bar{w}_{mi}
=(eα−e−α)i=1∑NwˉmiI(yi̸=G(xi))+e−αi=1∑Nwˉmi
将上式对 α \alpha α求导:简化为 ( ( e α − e − α ) h 1 + e − α h 2 ) ′ ((e^\alpha-e^{-\alpha})h_1+e^{-\alpha}h_2)' ((eα−e−α)h1+e−αh2)′令 e α = x e^\alpha=x eα=x求导并使导数为 0 0 0可以得 x 2 = h 2 − h 1 h 1 x^2=\frac{h_2-h_1}{h_1} x2=h1h2−h1,然后解出 α m ∗ = 1 2 l o g h 2 − h 1 h 1 \alpha_m^\ast=\frac{1}{2}log\frac{h_2-h_1}{h_1} αm∗=21logh1h2−h1,最后 α m ∗ = 1 2 l o g 1 − e m e m \alpha_m^\ast=\frac{1}{2}log\frac{1-e_m}{e_m} αm∗=21logem1−em
其中 e m = ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) ∑ i = 1 N w ˉ m i = ∑ i = 1 N w m i I ( y i ≠ G m ( x i ) ) e_m=\frac{\sum_{i=1}^N\bar{w}_{mi}I(y_i\neq G(x_i))}{\sum_{i=1}^N\bar{w}_{mi}}=\sum_{i=1}^Nw_{mi}I(y_i\neq G_m(x_i)) em=∑i=1Nwˉmi∑i=1NwˉmiI(yi̸=G(xi))=∑i=1NwmiI(yi̸=Gm(xi))表示分类误差率,这与AdaBoot的 α m \alpha_m αm完全一样
在看样本权值更新是否与AdaBoost一样
由 f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m(x)=f_{m-1}(x)+\alpha_mG_m(x) fm(x)=fm−1(x)+αmGm(x)和 w ˉ m i = e x p [ − y i f m − 1 ( x i ) ] \bar{w}_{mi}=exp[-y_if_{m-1}(x_i)] wˉmi=exp[−yifm−1(xi)],那么有 w ˉ m + 1 , i = e x p [ − y i f m ( x i ) ] = e x p [ − y i ( f m − 1 ( x ) + α m G m ( x ) ) ] = e x p [ − y i f m − 1 ( x ) ] e x p [ − y i α m G m ( x ) ] \bar{w}_{m+1,i}=exp[-y_if_{m}(x_i)]=exp[-y_i(f_{m-1}(x)+\alpha_mG_m(x))]=exp[-y_if_{m-1}(x)]exp[-y_i\alpha_mG_m(x)] wˉm+1,i=exp[−yifm(xi)]=exp[−yi(fm−1(x)+αmGm(x))]=exp[−yifm−1(x)]exp[−yiαmGm(x)] w ˉ m + 1 , i = w ˉ m , i e x p [ − y i α m G m ( x ) ] \bar{w}_{m+1,i}=\bar{w}_{m,i}exp[-y_i\alpha_mG_m(x)] wˉm+1,i=wˉm,iexp[−yiαmGm(x)]
这也与AdaBoost算法权值更新只差了规范化因子,所以等价.
至此证毕
AdaBoost算法的正则化
为了防止AdaBoost过拟合,通常会加入正则化项,通常是加入一个步长 v v v,即 f m ( x ) = f m − 1 ( x ) + v α m G m ( x ) f_m(x)=f_{m-1}(x)+v\alpha_mG_m(x) fm(x)=fm−1(x)+vαmGm(x) v v v的取值范围 ( 0 , 1 ) (0,1) (0,1),较小的 v v v意味需要更多弱学习器的迭代次数,通常用步长和最大迭代次数一起决定算法拟合效果
(二)提升树(Boosting Tree)
提升树模型被认为是统计学习中性能最好的方法之一.
提升树模型
以决策树(回归树)为基分类器的提升方法称为提升树(Boosting Tree).决策树或回归树都是二叉树.提升树模型可以表示为决策树的加法模型: f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1∑MT(x;Θm)其中 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)表示决策树; Θ \Theta Θ表示决策树参数;M为决策树个数
提升树算法
第 m m m步模型是: f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm−1(x)+T(x;Θm)
经验风险极小化: Θ ^ m = a r g m i n Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x ; Θ m ) ) \hat{\Theta}_m=argmin_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x;\Theta_m)) Θ^m=argminΘmi=1∑NL(yi,fm−1(xi)+T(x;Θm))
提升回归树使用平方误差作为损失函数,提升分类树使用指数损失函数( L ( y , f ( x ) ) = e x p ( − y f ( x ) ) L(y,f(x))=exp(-yf(x)) L(y,f(x))=exp(−yf(x)),P145),以及一般损失函数的一般问题
对于二分类问题,提升树算法只需要将AdaBoost算法中基本分类器限制为二分类决策树就可以.虽然损失函数是指数函数,事实上是不用直接计算这个损失函数的
提升回归树
已知训练数据 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)} T=(x1,y1),(x2,y2),...,(xN,yN).
回归问题提升树使用以前向分布算法: f 0 ( x ) = 0 f_0(x)=0 f0(x)=0 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) , m = 1 , 2 , . . . , M f_m(x)=f_{m-1}(x)+T(x;\Theta_m),m=1,2,...,M fm(x)=fm−1(x)+T(x;Θm),m=1,2,...,M f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1∑MT(x;Θm)
在前向分布算法第m步,给定当前模型 f m − 1 ( x ) f_{m-1}(x) fm−1(x)需求解: Θ ^ m = a r g m i n Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x ; Θ m ) ) \hat{\Theta}_m=argmin_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x;\Theta_m)) Θ^m=argminΘmi=1∑NL(yi,fm−1(xi)+T(x;Θm))
其中采用平方误差损失函数时, L ( y , f ( x ) ) = ( y − f ( y ) ) 2 L(y,f(x))=(y-f(y))^2 L(y,f(x))=(y−f(y))2
即 L ( y , f m − 1 ( x ) + T ( x ; Θ m ) ) L(y,f_{m-1}(x)+T(x;\Theta_m)) L(y,fm−1(x)+T(x;Θm)) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 =[y-f_{m-1}(x)-T(x;\Theta_m)]^2 =[y−fm−1(x)−T(x;Θm)]2 = [ ( r − T ( x ; Θ ) ) ] 2 =[(r-T(x;\Theta))]^2 =[(r−T(x;Θ))]2
这里, r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=y−fm−1(x)
表示当前模型拟合数据的残差,所以对于回归算法来说,只需要简单拟合当前模型的残差.
提升回归树算法
输入:训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}
T=(x1,y1),(x2,y2),...,(xN,yN)
输出:提升树
f
M
(
x
)
f_M(x)
fM(x)
(1)初始化
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0
(2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M:
\quad\quad
a.计算残差
r
m
i
=
y
i
−
f
m
−
1
(
x
i
)
,
i
=
1
,
2
,
.
.
.
,
N
r_{mi}=y_i-f_{m-1}(x_i),i=1,2,...,N
rmi=yi−fm−1(xi),i=1,2,...,N
\quad\quad
b.拟合残差
r
m
i
r_{mi}
rmi学习一个回归树,得到
T
(
x
;
Θ
m
)
T(x;\Theta_m)
T(x;Θm)
\quad\quad
c.更新
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
Θ
m
)
f_m(x)=f_{m-1}(x)+T(x;\Theta_m)
fm(x)=fm−1(x)+T(x;Θm)
(3)得到提升回归树
f
M
(
x
)
=
∑
m
=
1
M
T
(
x
;
Θ
m
)
f_M(x)=\sum_{m=1}^MT(x;\Theta_m)
fM(x)=m=1∑MT(x;Θm)