您的位置:首页 > 其它

机器学习入门之《统计学习方法》笔记整理——提升方法

2018-03-08 21:26 441 查看
  提升方法的思路是综合多个分类器,得到更准确的分类结果。 说白了就是“三个臭皮匠顶个诸葛亮”。

目录

提升方法
提升方法AdaBoost算法
算法 (AdaBoost)

AdaBoost算法的解释
前向分步算法

算法 (前向分步算法)

前向分步算法与AdaBoost

提升树
提升树模型

提升树算法

算法 (回归问题的提升树算法)

算法 (梯度提升算法)

参考文章

提升方法

提升方法AdaBoost算法

  提升方法思路比较简单,它意在通过改变训练样本之间相对的权重,从而学习出多个分类器,并将这些分类器进行线性组合,从而提高分类的性能。

  从以上思路可以看出,提升方法将一个复杂的任务分配给多个专家进行判断,并且对判断的结果进行综合,这样做要比只让一个专家来判断要好,毕竟大家说好才是真的好。

  AdaBoost是提升算法的代表,所谓提升算法,指的是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提髙分类的性能。

算法 (AdaBoost)

输入:训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)}T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xi∈X=Rnxi∈X=Rn ,yi∈Y={−1,+1}yi∈Y={−1,+1} ,弱学习算法;

输出:最终分类器G(x)G(x) 。

(1) 初始化训练数据的权值分布

D1=(w11,...,w1i,...,w1N),w1i=1N,i=1,2...,ND1=(w11,...,w1i,...,w1N),w1i=1N,i=1,2...,N

(2) 对m=1,2,...,Mm=1,2,...,M

  (a) 使用具有权值分布DmDm 的训练数据集学习,得到基本分类器

Gm(x):X→{−1,+1}Gm(x):X→{−1,+1}

  (b) 计算Gm(x)Gm(x) 在训练数据集上的分类误差率

em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)

  (c) 计算Gm(x)Gm(x) 的系数

αm=12log1−ememαm=12log⁡1−emem

这里的对数是自然对数。

  (d) 更新训练数据集的权值分布

Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)

wm+1,i=wmiZmexp(−αmyiGm(xi))i=1,2,...,Nwm+1,i=wmiZmexp⁡(−αmyiGm(xi))i=1,2,...,N

也可以写成

wm+1,i={wmiZme−αm,wmiZme−αm,Gm(xi)=yiGm(xi)≠yiwm+1,i={wmiZme−αm,Gm(xi)=yiwmiZme−αm,Gm(xi)≠yi

这里,ZmZm 是规范化因子

Zm=∑i=1Nwmiexp(−αmyiGm(xi))Zm=∑i=1Nwmiexp⁡(−αmyiGm(xi))

它使Dm+1Dm+1 成为一个概率分布。

(3) 构建基本分类器的线性组合

f(x)=∑m=1MαmGm(x)f(x)=∑m=1MαmGm(x)

得到最终分类器

G(x)=sign(f(x))=sign(∑m=1MαmGm(x))G(x)=sign(f(x))=sign(∑m=1MαmGm(x))

  从以上算法可以看到:最开始步骤1,我们假设了样本具有均匀的权重分布,它将产生一个基本分类器G1(x)G1(x) 。步骤2是一个m从1到M的循环过程,每一次循环都可以产生一个弱分类器。

分类误差率实际上就是被误分类点的权值之和。

在计算当前弱分类器在线性组合中的系数时,当e≥0.5e≥0.5 时,α≥0α≥0,并且随着e的减小而增大,正好印证了需要使误差率小的弱分类器的权值更大这个事实。

每一个样本的权值ww ,都与它原来的标签yiyi 以及预测的标签Gm(xi)Gm(xi) 有关,当预测正确即它们同号时,exp指数是一个负值,这样就会减小原来样本点的权重;当预测不正确即它们异号时,exp指数是一个正值,它会增加当前样本点的权重。这正印证了我们需要使被误分类样本的权值更大这个事实。

AdaBoost算法的解释

  AdaBoost算法还有另一个解释,即可以认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类学习方法。

前向分步算法

  考虑加法模型(additive model)

f(x)=∑m=1Mβmb(x;γm)f(x)=∑m=1Mβmb(x;γm)

  其中,b(x;γm)b(x;γm) 为基函数,γmγm 为基函数的参数,βmβm 为基函数的系数。显然,f(x)=∑m=1Mβmb(x;γm)f(x)=∑m=1Mβmb(x;γm) 是一个加法模型。

  在给定训练数据及损失函数的条件下,学习加法模型f(x)f(x) 成为经验风险极小化即损失函数极小化问题:

minβm,γm∑i=1NL(yi,∑m=1Mβmb(xi;γm))minβm,γm∑i=1NL(yi,∑m=1Mβmb(xi;γm))

  通常这是一个复杂的优化问题。前向分步算法(forward stage wise algorithm)求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:

minβ,γ∑i=1NL(yi,βb(xi;γ))minβ,γ∑i=1NL(yi,βb(xi;γ))

算法 (前向分步算法)

输入:训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)}T={(x1,y1),(x2,y2),...,(xN,yN)} ,损失函数L(y,f(x))L(y,f(x)) 和基函数的集合{b(x;γ)}{b(x;γ)} ;

输出:加法模型f(x)f(x) .

(1) 初始化f0(x)=0f0(x)=0

(2) 对m=1,2,...,Mm=1,2,...,M

  (a) 极小化损失函数

(βm,γm)=argminβ,γ∑i=1NL(yi,fm−1(xi)+βb(xi;γ))(βm,γm)=arg⁡minβ,γ∑i=1NL(yi,fm−1(xi)+βb(xi;γ))

得到参数βm,γmβm,γm

  (b) 更新

fm(x)=fm−1(x)+βmb(x;γm)fm(x)=fm−1(x)+βmb(x;γm)

(3) 得到加法模型

f(x)=fM(x)=∑m=1Mβmb(x;γm)f(x)=fM(x)=∑m=1Mβmb(x;γm)

  这样,前向分步算法将同时求解从m=1m=1 到MM 所有参数βm,γmβm,γm 的优化问题简化为逐次求解各个βm,γmβm,γm 的优化问题。

前向分步算法与AdaBoost

  由前向分步算法可以推导出AdaBoost,AdaBoost算法是前向分歩加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。

提升树

  提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

提升树模型

  提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。在原著例题中看到的基本分类器,可以看作是由一个根结点直接连接两个叶结点的简单决策树,即所谓的决策树桩(decision stump)。提升树模型可以表示为决策树的加法模型:

fM(x)=∑m=1MT(x;Θm)fM(x)=∑m=1MT(x;Θm)

其中,T(x;Θm)T(x;Θm) 表示决策树;ΘmΘm 为决策树的参数;MM 为树的个数。

提升树算法

  提升树算法采用前向分步算法。首先确定初始提升树fm(x)=0fm(x)=0 ,第mm 歩的模型是

fm(x)=fm−1(x)+T(x;Θm)fm(x)=fm−1(x)+T(x;Θm)

其中,fm−1(x)fm−1(x) 为当前模型,通过经验风险极小化确定下一棵决策树的参数ΘmΘm

Θ^m=argminΘm∑i=1NL(yi,fm−1(xi)+T(xi;Θm))Θ^m=arg⁡minΘm∑i=1NL(yi,fm−1(xi)+T(xi;Θm))

  由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个髙功能的学习算法。

  不同问题有大同小异的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。

  对于二类分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二类分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况。

算法 (回归问题的提升树算法)

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)}T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xi∈X⊆Rnxi∈X⊆Rn ,yi∈Y⊆Ryi∈Y⊆R ;

输出:提升树fM(x)fM(x) .

(1) 初始化f0(x)=0f0(x)=0

(2) 对m=1,2,...,Mm=1,2,...,M

  (a) 计算残差

rmi=yi−fm−1(xi),i=1,2,...,Nrmi=yi−fm−1(xi),i=1,2,...,N

  (b) 拟合残差rmirmi 学习一个回归树,得到T(x;Θm)T(x;Θm)

  (c) 更新fm(x)=fm−1(x)+T(x;Θm)fm(x)=fm−1(x)+T(x;Θm)

(3) 得到回归问题提升树

fM(x)=∑m=1MT(x;Θm)fM(x)=∑m=1MT(x;Θm)

算法 (梯度提升算法)

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)}T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中,xi∈X⊆Rnxi∈X⊆Rn ,yi∈Y⊆Ryi∈Y⊆R ,损失函数L(y,f(x))L(y,f(x)) ;

输出:回归树f^(x)f^(x) .

(1) 初始化

f0(x)=argminc∑i=1NL(yi,c)f0(x)=arg⁡minc∑i=1NL(yi,c)

(2) 对m=1,2,...,Mm=1,2,...,M

  (a) 对i=1,2,...,Ni=1,2,...,N ,计算

rmi=−[∂L(yi,f(xi))∂f(xi)]f(x)=fm−1(x)rmi=−[∂L(yi,f(xi))∂f(xi)]f(x)=fm−1(x)

  (b) 对rmirmi 拟合一个回归树,得到第mm 棵树的叶节点区域Rmj,j=1,2,...,JRmj,j=1,2,...,J

  (c) 对j=1,2,...,Jj=1,2,...,J ,计算

cmj=argminc∑xi∈RmjL(yi,fm−1(xi)+c)cmj=arg⁡minc∑xi∈RmjL(yi,fm−1(xi)+c)

  (d) 更新fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)

(3) 得到回归树

f^(x)=fM(x)=∑m=1M∑j=1JcmjI(x∈Rmj)f^(x)=fM(x)=∑m=1M∑j=1JcmjI(x∈Rmj)

参考文章

提升方法

《统计学习方法(李航)》讲义 第08章 提升方法

提升方法及AdaBoost
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  boosting 机器学习
相关文章推荐