学习这一章,除了学习书中的adaboost之外,还应该了解集成方法的分类,随机森林,xgboost等其他方法。因为书中所讲到的内容有限,因此我会在最后对这一章做一定的扩展补充。
在分类问题中,提升方法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
提升方法Adaboost
提升方法的基本思路
对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习方法学习一系列弱分类器。
每一轮如何改变训练数据的权值或概率分布:adaboost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值;
如何将弱分类器组合成一个强分类器:adaboost采取加权多数表决的方法,加大分类误差小的弱分类器的权值,减小分类误差率大的弱分类器的权值。
adaboost算法
输入:训练数据集,弱分类器
Gm(x)
G
m
(
x
)
输出:最终分类器
1):初始化训练数据的权值分布;
2):对一轮的权值分布给出一个分类误差最小的弱分类器,计算出该弱分类器在训练数据集上的分类误差率
em=∑Ni=1wiI(Gm(xi)≠yi)
e
m
=
∑
i
=
1
N
w
i
I
(
G
m
(
x
i
)
≠
y
i
)
;再通过分类误差率得到该弱分类器的系数
αm=12log1−emem
α
m
=
1
2
log
1
−
e
m
e
m
;接着更新训练数据集的权值分布,将上一轮分类错误的数据权值增大,分类正确的数据权值减小;
3):得到M个弱分类器之后将他们做加权线性组合。
当组合的分类器不再分类错误时或弱分类器的个数达到设定时停止步骤2.
adaboost算法的训练误差分析
Adboost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类误差率。
adaboost算法的解释
adaboost的另外一个解释认为:adaboost算法是模型为加法模型,损失函数为指数函数,学习算法为前向分布算法时的二类分类学习方法。
模型:加法模型
学习策略:损失函数最小化(经验风险最小化):
学习算法:前向分布算法。因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。
*证明损失函数为指数损失函数时前向分步算法等价于adboost这一证明还没仔细看。
提升树
提升树是以分类树或回归树为基本分类器的提升方法。
提升树模型
提升方法实际采用加法模型与前向分步算法。提升树模型可以表示为决策树的加法模型:
提升树算法
前向分步算法。第m步的模型是:
针对不同问题的提升树算法,其主要区别在于使用的损失函数不同。包括使用平方损失函数的回归问题,使用指数函数的分类问题,以及用一般损失函数的一般决策问题。二类分类问题时采用的决策树与弱分类器表现形式相同,因此此时的提升树算法是adaboost算法的特殊情况。
回归树是将输入空间划分为J个互不相交的区域,并在每个区域上确定输出的常量 cj c j .每一次选取划分标准和输出常量的标准是平方损失误差最小。
回归问题时的提升树采用平方误差损失函数,
梯度提升gbdt
当损失函数为平方损失函数或指数损失函数的时候,每一步的优化是很简单的(前者采用简单的拟合残差,后者是adaboost中基本分类器为二类分类树的情况)。但对一般损失函数而言,往往每一步优化并不那么容易,针对这一问题,提出了梯度提升算法。这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
对于平方损失函数,损失函数的负梯度在当前模型的值就是通常所说的残差,对于一般损失函数,它就是残差的近似值。
扩展
ensemble集成学习分为两类:bagging和boosting(也就是提升方法):
boosting串行生成,分类器权重不等,加权求和结果;bagging并行生成,分类器权重相等,多数表决。
最后简单介绍一下xgboost.xgboost是从理论结构上做提升树,对任意的损失函数求解出新增加的基分类器(树)的结构。