8.提升方法
8.1几个概念
- 集成学习:
使用一系列学习器进行学习,使用某种规则将基本分类器组和,得到比单个学习器效果更好的模型。
- 序列方法,当前模型进行学习时,依赖上一个模型的训练结果
- 强可学习:
一个概念/类,如果存在多项式的学习算法,能正确率很高进行学习,这个概念/类是强可学习的。
- 弱可学习:
一个概念/类,如果存在多项式的学习算法,学习的正确率仅比随即猜测略好,这个概念是弱可学习的。
- PAC学习框架(probably approximately correct,很可能接近正确的)
- 等价于训练误差上界定理,用训练误差和
ϵ项以一定的概率控制泛化误差
- 泛化误差上界:对于函数f,至少以概率
1−δ,以下不等式成立
R(f)⩽R^(f)+ϵ(d,N,δ)
ϵ(d,N,δ)=2N1(logd+logδ1)
- 在PAC的学习框架下,一个概念是强可学习的充要条件是弱可学习的
8.2加法模型的向前分步算法
8.2.1加法模型
- 模型:加法模型,表示为
f(x)=m=1∑Mβmb(x;γm)
其中
b(x;γm)是基函数,
γm是参数,
βm是系数 (同一个基函数,只是参数不同)
- 损失函数(极小化):
βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))
- 算法:向前分步算法
学习加法模型时,从前向后,每一步只学习一个基函数及其系数,逐步优化损失函数,即可以简化优化的复杂度。即每步只优化
minβ,γ∑i=1NL(yi,βb(xi;γ))
8.2.2具体算法
输入:训练数据集
T={(x1,y1),(x2,y2),⋯,(xN,yN),};损失函数
L(y,f(x));基函数集
{b(x,r)}
输出:加法模型f(x)
- (1)初始化
f0(x)=0
- (2)每轮训练一个基本学习器
βmb(x;rm),m=1,2,⋯,M,且到当前轮时
fm(x)=fm−1(x)+βmb(x;rm)
- (a) 极小化损失函数
(βm,γm)=argβ,γmini=1∑NL(yi,fm(x))=argβ,γmini=1∑NL(yi,fm−1(x)+βmb(x;rm))
得到参数
βm,γm
- (b) 更新
fm(x)=fm−1(x)+βmb(x;rm)
- (3) 得到加法模型
f(x)=fM(x)=∑m=1Mβmb(x;γm)
8.3 提升方法
- 主要思想:
- 如果发现了“弱学习算法”,将其提升为“强学习算法”。
- 即从一个弱学习算法出发,通过反复学习不同的参数,得到一系列基本分类器,通过组和这些弱分类器,构成一个强分类器。
- 大多数的提升方法:在每轮学习中改变训练数据的概率分布(即训练数据的权值分布);在下轮学习中通过有新的概率分布的训练数据,用相同的基本学习方法学习到不同的参数,构成另一个基本分类器;将这些基本分类器组和为强分类器。
- 问题一:如何改变训练数据的概率分布
- 问题二:如何将弱分类器(基本分类器)组和成一个强分类器
8.3.1 AdaBoost算法
- 用于解决二分类问题
- 每轮训练中,提高被前一轮弱分类器错误分类的样本的权值,降低被正确分类的样本的权值
- 通过加权多数表决的方法组和弱分类器:加大分类误差率小的弱分类器的权值,使其有更多的决定权;减少分类误差率大的弱分类器的权值,使其有更小的决定作用。
- 在学习过程中不断减少训练误差,即分类误差率
算法
输入:训练数据集
T={(x1,y1),(x2,y2),⋯,(xN,yN),},其中
xi∈X⊆Rn,yi∈Y={−1,+1};及弱学习算法
输出:最终分类器G(x)
- (1) 初始化训练数据的权值分布,
D1=(w11,⋯,w1i,⋯,w1N),w1i=N1
- (2) 反复学习分类器,共要学习M个弱分类器,对于第m次学习,
m=1,2,⋯,M
- (a) 使用具有权值分布
Dm的训练数据集学习,得到基本分类器
Gm(x):X→{+1,−1}
- (b) 计算
Gm(x)在训练数据集上的分类误差率(
em<0.5永远成立,可以把正负的标记反过来)
em=P(Gm(xi)̸=yi)=i=1∑NwmiI(Gm(xi)̸=yi)
- (c )计算
Gm(x)的系数(分类误差率
em越小,
αm越大,且
αm>0,在最终分类器中作用越大)
αm=21logem1−em
- (d) 更新训练数据集的权值分布(当样本
(xi,yi)在上一个分类器中误分类时,即
yiGm(xi)<0,
wm+1会被放大)
Dm+1=(wm+1,1,⋯,wm+1,i,⋯,wm+1,N)
wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,N
Zm=i=1∑Nwmiexp(−αmyiGm(xi))
其中
Zm是一个规范化因子,使
Dm+1称为一个概率分布,因为
∑wmi=1
- (3) 构建基本分类器的线性组和
f(x)=m=1∑MαmGm(x)
。得到最终的分类器
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
AdaBoost的训练误差分析
-
1.AdaBoost的训练误差有上界
N1i=1∑NI(G(xi)̸=yi)⩽N1i=1∑Nexp(−yif(xi))=m=1∏MZm
其中:
G(x)=sign(∑m=1MαmGm(x)),
f(x)=∑m=1MαmGm(x),
Zm=∑i=1Nwmiexp(−αmyiGm(xi))。
此定理说明:
- 使
Zm最小,从而使训练误差下降最快
- 在每轮训练中,
Zm=∑i=1Nwmiexp(−αmyiGm(xi));
wmi在上一轮训练中确定,
Gm(xi)在本轮训练中确定;
- 通过
minZm求
αm,使训练误差上界下降最快
∂αm∂Zm=i=1∑N−wmiyiGm(xi)exp(−αmyiGm(xi))=0
算法中
αm=21logem1−em就是上式的一个解
-
2.二分类问题AdaBoost的训练误差界
m=1∏MZm=m=1∏M[2em(1−em)
]=m=1∏M1−4γm2
⩽exp(−2m=1∏Mγm2)
其中
em=∑yi̸=Gm(xi)wmi=∑i=1NwmiI(yi̸=Gm(xi)),
γm=21−em,
此定理说明:
-
em代表每轮的分类误差率,
em越小分类效果越好,
rm越大
-
rm代表当前基本分类器对随机猜测结果的提升程度
- 不等式
∏m=1MZm⩽exp(−2∏m=1Mγm2) 代表,随着训练轮数m的增加,训练误差减少,且降低的速度很快(指数)
AdaBoost算法的解释
- 模型:二分类加法模型,
f(x)=∑m=1MαmGm(x)
- 损失函数:指数函数,
L=∑exp(−yf(x))
- 学习算法:向前分步算法
在第m轮学习时,使损失函数最小,得到
αm,Gm(x)
(αm,Gm(x))=argα,Gmini=1∑Nexp(−yifm(xi))=argα,Gmini=1∑Nexp[−yi(fm−1(xi)+αmGm(xi))]
8.3.2 提升树
- 提升树是以树做基本分类器的提升方法
- 回归树,解决回归问题;当采用的损失函数不同时,可用算法不同
- 向前分布算法:采用平方误差损失函数
- 梯度提升算法:其他损失函数
- 分类树,解决分类问题(二分类树的情况与AdaBoost以分类树做基本分类器的情况类似)
- 新一轮的训练模型根据损失函数最小化求取
- 基本分类器的组和方式: 相加
fM(x)=∑m=1MT(X;Θm)
T(X;Θm)表示决策树
CART生成二叉回归树算法
- 模型表示:将输入空间X划分为两个单元R1,R2;对应不同的固定输出c1,c2。将模型表示为
f(x)=∑m=12cmI(x∈Rm)。
- 损失函数:平方误差
∑xi∈Rm(yi−f(xi))2=∑xi∈R1(c1−yi)2+∑xi∈R2(c2−yi)2
损失函数最小化可得,对于每个确定区域,
f(x)=cm=n1∑xi∈Rmyi
- 算法:
- (1)对于每个样本,
i=1,2,⋯,N
- (a)选择该样本
x值,将输入空间切分为
X⩽x,X>x两部分;对样本集切分为两个子集
- (b)分别计算两个子集的
y值平均值
nm1∑x∈Rmy,做二叉树模型的参数
cm
- © 计算损失函数
L=∑xi∈R1(yi−c1)2+∑xj∈R2(yj−c2)2
- (2)比较所有的损失函数,损失函数最小时的样本
x值为最优切分点。
- 算法总结:
j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxj∈R2(j,s)∑(yj−c2)2]
即找到使损失函数最小的第j个样本的x取值s,和使损失函数最小的c1,c2(取平均值即可)
提升树算法
-
模型:将输入空间划分为J个互不相交的区域
R1,R2,⋯,RJ,并在每个区域上确定输出的常量
cj,树可以表示为
T(x;Θ)=j=1∑JcjI(x∈Rj)
其中参数
Θ={(R1,c1),(R2,c2),⋯,(RJ,cJ)}表示树的区域划分和各区域上的常数,J是回归树的复杂度即叶节点个数
-
损失函数:平方误差损失函数,每轮训练的损失函数为
L(y,f(x))L(y,fm−1(x)+T(x;Θ))=(y−f(x))2=[y−fm−1(x)−T(x;Θ)]2=[r−T(x;Θ)]2
其中
r=y−fm−1(x)是当前模型拟合数据的残差。因此训练本轮回归树的数据源为上一轮训练结果(
fm−1(x)=∑i=1m−1T(x,Θi))的残差。
-
算法
输入:训练数据集
T={(x1,y1),(x2,y2),⋯,(xN,yN)}
输出:提升树
fM(x)
- (1)初始化
f0(x)=0
- (2)对m=1,2,…,M
- (a) 按照
r=yi−fm−1(xi),i=1,2,⋯,N计算残差
- (b)拟合残差
r学习一个回归树,得到
T(x;Θm)
- (c )更新
fm=fm−1+T(x;Θm)
- (3)得到回归问题提升树
fM(x)=∑m=1MT(x;Θm)
梯度提升算法
- 利用损失函数的负梯度作为残差的近似值,拟合一个回归树
- 算法:
输入:训练数据集
T={(x1,y1),(x2,y2),⋯,(xN,yN),},其中
xi∈X⊆Rn,yi∈Y⊆R;损失函数
L(y,f(x))
输出:提升树
f^(x)
- (1)初始化(估计使损失函数极小化的常数值c,是只有根节点的树)
f0(x)=argcmini=1∑NL(yi,c)
- (2)对m=1,2,…,M
- (a)对i=1,2,…,N计算损失函数的负梯度在当前模型的值
rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
(对于一般的损失函数,此值为残差的估计。假设
L=[y−f(x)]2,∂L/∂f=−2(y−f(x)) ; 残差前有系数,因此需要根据(c )步计算
cm)
- (b) 对
rmi拟合一个回归树,得到第m棵树的叶节点区域
Rmj,j=1,2,⋯,J;
- (c ) 对
j=1,2,⋯,J,使损失函数最小化求得该区域回归树参数c。计算
cmj=argcminxi∈Rmj∑L(yi,fm−1(xi)+c)
利用线性搜索估计叶节点区域的值,使损失函数极小化(c是待求的最优值
cmj)
- (d)更新
fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)
- 得到回归树
f^(x)=fM(x)=m=1∑Mj=1∑JcmjI(x∈Rmj)
对于对于每个待预测值,在每棵基本树上只有1个区域内
I函数不为0,此函数最终只有M项
8.4 AdaBoost训练误差证明
8.4.1 训练误差上界
N1i=1∑NI(G(xi)̸=yi)⩽N1i=1∑Nexp(−yif(xi))=m=1∏MZm
证:
-
(1)证
I(G(xi)̸=yi)⩽exp(−yif(xi))
当
G(xi)̸=yi,此时
−yif(xi)>0,因此
exp(−yif(xi))>I(G(xi)̸=yi)=1;
当
G(xi)=yi,此时
−yif(xi)<0,因此
exp(−yif(xi))>I(G(xi)̸=yi)=0;
-
(2)证
N1∑i=1Nexp(−yif(xi))=∏mZm
N1i=1∑Nexp(−yif(xi))=N1i=1∑Nexp(−yim=1∑MαmGm(xi))=i=1∑Nw1iexp(−yim=1∑MαmGm(xi))=i=1∑Nw1im=1∏Mexp(−yiαmGm(xi))=i=1∑Nw1iexp(−yiα1G1(xi))m=2∏Mexp(−yiαmGm(xi))=Z1i=1∑Nw2im=2∏Mexp(−yiαmGm(xi))=j=1∏M−1Zji=1∑NwMiexp(−yiαMGM(xi))=m=1∏MZm
8.4.2二分类问题AdaBoost的训练误差界
m=1∏MZm=m=1∏M[2em(1−em)
]=m=1∏M1−4γm2
⩽exp(−2m=1∏Mγm2)
证:
- 前半部分
Zm=i=1∑Nwmiexp(−αmyiGm(xi))=yi=Gm(xi)∑wmie−αm+yi̸=Gm(xi)∑wmieαm=(1−em)e−αm+emeαm=2em(1−em)
=1−4γm2
- 后半部分:
∏m=1M1−4γm2
⩽exp(−2∏m=1Mγm2)
- 对
f(x)=(1−x)1/2,泰勒展开
-
求导,
f′(x)=−21(1−x)−21,f′′(x)=−41(1−x)−23
-
展开,
f(x)f(4r2)=f(0)+xf′(0)+21x2f′′(0)+....≈1−21x−81x2≈1−2r2−2r4
- 对
g(x)=ex,泰勒展开
- 求导,
g′(x)=ex,g′′(x)=ex
- 展开,
g(x)g(−2r2)=g(0)+xg′(0)+21x2g′′(0)+....≈1+x+21x2≈1−2r2+2r4
-
f(4r2)<g(−2r2)