提升方法的思路是综合多个分类器,得到更准确的分类结果。 说白了就是“三个臭皮匠顶个诸葛亮”。
目录
提升方法
提升方法AdaBoost算法
提升方法思路比较简单,它意在通过改变训练样本之间相对的权重,从而学习出多个分类器,并将这些分类器进行线性组合,从而提高分类的性能。
从以上思路可以看出,提升方法将一个复杂的任务分配给多个专家进行判断,并且对判断的结果进行综合,这样做要比只让一个专家来判断要好,毕竟大家说好才是真的好。
AdaBoost是提升算法的代表,所谓提升算法,指的是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提髙分类的性能。
算法 (AdaBoost)
输入:训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中, xi∈X=Rn x i ∈ X = R n , yi∈Y={−1,+1} y i ∈ Y = { − 1 , + 1 } ,弱学习算法;
输出:最终分类器 G(x) G ( x ) 。
(1) 初始化训练数据的权值分布
(2) 对 m=1,2,...,M m = 1 , 2 , . . . , M
(a) 使用具有权值分布 Dm D m 的训练数据集学习,得到基本分类器
(b) 计算 Gm(x) G m ( x ) 在训练数据集上的分类误差率
(c) 计算 Gm(x) G m ( x ) 的系数
这里的对数是自然对数。
(d) 更新训练数据集的权值分布
也可以写成
这里, Zm Z m 是规范化因子
它使 Dm+1 D m + 1 成为一个概率分布。
(3) 构建基本分类器的线性组合
得到最终分类器
从以上算法可以看到:最开始步骤1,我们假设了样本具有均匀的权重分布,它将产生一个基本分类器 G1(x) G 1 ( x ) 。步骤2是一个m从1到M的循环过程,每一次循环都可以产生一个弱分类器。
- 分类误差率实际上就是被误分类点的权值之和。
- 在计算当前弱分类器在线性组合中的系数时,当 e≥0.5 e ≥ 0.5 时, α≥0 α ≥ 0 ,并且随着e的减小而增大,正好印证了需要使误差率小的弱分类器的权值更大这个事实。
- 每一个样本的权值
w
w
,都与它原来的标签以及预测的标签 Gm(xi) G m ( x i ) 有关,当预测正确即它们同号时,exp指数是一个负值,这样就会减小原来样本点的权重;当预测不正确即它们异号时,exp指数是一个正值,它会增加当前样本点的权重。这正印证了我们需要使被误分类样本的权值更大这个事实。
AdaBoost算法的解释
AdaBoost算法还有另一个解释,即可以认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类学习方法。
前向分步算法
考虑加法模型(additive model)
其中, b(x;γm) b ( x ; γ m ) 为基函数, γm γ m 为基函数的参数, βm β m 为基函数的系数。显然, f(x)=∑m=1Mβmb(x;γm) f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) 是一个加法模型。
在给定训练数据及损失函数的条件下,学习加法模型 f(x) f ( x ) 成为经验风险极小化即损失函数极小化问题:
通常这是一个复杂的优化问题。前向分步算法(forward stage wise algorithm)求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:
算法 (前向分步算法)
输入:训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,损失函数 L(y,f(x)) L ( y , f ( x ) ) 和基函数的集合 {b(x;γ)} { b ( x ; γ ) } ;
输出:加法模型 f(x) f ( x ) .
(1) 初始化 f0(x)=0 f 0 ( x ) = 0
(2) 对 m=1,2,...,M m = 1 , 2 , . . . , M
(a) 极小化损失函数
得到参数 βm,γm β m , γ m
(b) 更新
(3) 得到加法模型
这样,前向分步算法将同时求解从 m=1 m = 1 到 M M 所有参数 的优化问题简化为逐次求解各个 βm,γm β m , γ m 的优化问题。
前向分步算法与AdaBoost
由前向分步算法可以推导出AdaBoost,AdaBoost算法是前向分歩加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。
提升树
提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。
提升树模型
提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。在原著例题中看到的基本分类器,可以看作是由一个根结点直接连接两个叶结点的简单决策树,即所谓的决策树桩(decision stump)。提升树模型可以表示为决策树的加法模型:
其中, T(x;Θm) T ( x ; Θ m ) 表示决策树; Θm Θ m 为决策树的参数; M M 为树的个数。
提升树算法
提升树算法采用前向分步算法。首先确定初始提升树 ,第 m m 歩的模型是
其中, fm−1(x) f m − 1 ( x ) 为当前模型,通过经验风险极小化确定下一棵决策树的参数 Θm Θ m
由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个髙功能的学习算法。
不同问题有大同小异的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。
对于二类分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二类分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况。
算法 (回归问题的提升树算法)
输入:线性可分训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中, xi∈X⊆Rn x i ∈ X ⊆ R n , yi∈Y⊆R y i ∈ Y ⊆ R ;
输出:提升树 fM(x) f M ( x ) .
(1) 初始化 f0(x)=0 f 0 ( x ) = 0
(2) 对 m=1,2,...,M m = 1 , 2 , . . . , M
(a) 计算残差
(b) 拟合残差 rmi r m i 学习一个回归树,得到 T(x;Θm) T ( x ; Θ m )
(c) 更新 fm(x)=fm−1(x)+T(x;Θm) f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m )
(3) 得到回归问题提升树
算法 (梯度提升算法)
输入:线性可分训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中, xi∈X⊆Rn x i ∈ X ⊆ R n , yi∈Y⊆R y i ∈ Y ⊆ R ,损失函数 L(y,f(x)) L ( y , f ( x ) ) ;
输出:回归树 f^(x) f ^ ( x ) .
(1) 初始化
(2) 对 m=1,2,...,M m = 1 , 2 , . . . , M
(a) 对 i=1,2,...,N i = 1 , 2 , . . . , N ,计算
(b) 对 rmi r m i 拟合一个回归树,得到第 m m 棵树的叶节点区域
(c) 对 j=1,2,...,J j = 1 , 2 , . . . , J ,计算
(d) 更新 fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj) f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j )
(3) 得到回归树