一、Boosting
1.1 Boosting学习思路
对于一个学习问题来说(以分类问题为例),给定训练数据集,求一个弱学习算法要比求一个强学习算法要容易的多。Boosting方法就是从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合弱分类器,得到一个强分类器。Boosting方法在学习过程中通过改变训练数据的权值分布(梯度提升树不会),针对不同的数据分布调用弱学习算法得到一系列弱分类器。
在每一轮学习之前,如何改变训练数据的权值分布?
Adaboost算法的做法是Adaboost算法的做法是提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。
如何将一组弱分类器组合成一个强分类器?
Adaboost算法的做法是加大 分类误差率小 的弱分类器的权值,使其在表决中起较大的作用;减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
1.2 Boosting四大家族
Boosting并非是一个方法,而是一类方法。这里按照损失函数的不同,将其细分为若干类算法,下表给出了4种不同损失函数对应的Boosting方法:

二、AdaBoost
2.1 学习目标
学习目标是通过调整样本权重分布使得下一个分类器误差率越小越好;而误分类的样本权重相当于放大了 ( e 2 ∗ 分 类 器 权 重 ) (e^{2*分类器权重}) (e2∗分类器权重)倍,并且证明得到训练误差率呈指数速率下降。
AdaBoost算法最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类误差率。
2.2 学习算法
Adaboost算法在分类问题中的主要特点:通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。 AdaBoost-算法描述(伪代码)如下:

2.3 AdaBoost算法描述说明
-
步骤(1)假设训练数据集具有均匀(相同)的权值分布,即每个训练样本在基本分类器的学习中作用相同。
-
步骤(2)AdaBoost反复学习基本分类器,在每一轮 k = 1 , 2 , ⋯ , K k=1,2,⋯,K k=1,2,⋯,K顺序地执行下列操作:
- (a) 学习基本分类器:使用当前训练集的权值分布 D k D_k Dk 加权的训练数据集,学习基本分类器 G k ( x ) G_k(x) Gk(x)
- (b) 误差率:计算基本分类器 G k ( x ) G_k(x) Gk(x)在加权训练数据集上的分类误差率 e k e_k ek
- (c )分类器权重:根据分类误差率 e k e_k ek可以计算基本分类器 G k ( x ) G_k(x) Gk(x)的系数 α k α_k αk, α k α_k αk表示 G k ( x ) G_k(x) Gk(x)在最终分类器中的重要性
- (d) 更新训练数据的权值分布,为下一轮做准备
-
步骤(3)线性组合 f ( x ) f(x) f(x)实现 K K K个基本分类器的加权表决。系数 α k α_k αk表示了基本分类器 G k ( x ) G_k(x) Gk(x)的重要性。但所有 α k α_k αk之和并不为1。 f ( x ) f(x) f(x)的符号决定实例 x x x的类别, f ( x ) f(x) f(x)的绝对值表示分类的精确度。
2.4 算法的特点
- 不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器中起不同的作用
- 利用基本分类器的线性组合构建最终分类器
2.5 正则化
为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为
ν
\nu
ν,对于前面的弱学习器的迭代
f
k
(
x
)
=
f
k
−
1
(
x
)
+
α
k
G
k
(
x
)
f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x)
fk(x)=fk−1(x)+αkGk(x)
如果我们加上了正则化项,则有
f
k
(
x
)
=
f
k
−
1
(
x
)
+
ν
α
k
G
k
(
x
)
f_{k}(x) = f_{k-1}(x) + \nu\alpha_kG_k(x)
fk(x)=fk−1(x)+ναkGk(x)
ν
\nu
ν的取值范围为
0
<
ν
≤
1
0\lt\nu \le 1
0<ν≤1。对于同样的训练集学习效果,较小的𝜈意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
2.6 算法的优缺点
- 对异常点敏感。指数损失存在的一个问题是不断增加误分类样本的权重(指数上升,样本权重放大 ( e 2 ∗ 分 类 器 权 重 ) (e^{2*分类器权重}) (e2∗分类器权重))。如果数据样本是异常点(outlier),会极大的干扰后面基本分类器学习效果;
- 模型无法用于概率估计
- Adaboost作为分类器时,分类精度很高
- 不容易发生过拟合
三、提升树(Boosted Decision Tree)与梯度提升树(GBDT)
3.1 提升树
提升树指以分类与回归树(CART)为基本分类器的提升方法,不同问题的提升树学习算法,其主要区别在于损失函数不同:平方损失函数常用于回归问题,用指数损失函数用于分类问题,以及绝对损失函数用于决策问题。
3.1.1 分类
对于二分类问题,提升树算法只需要将AdaBoost算法例子中的基本分类器限制为二叉分类树即可,可以说此时的决策树算法时AdaBoost算法的特殊情况。
3.1.2 回归
对回归问题的提升树算法来说,只需要简单地拟合当前模型的残差。

3.2 GBDT
GBDT的主要思想就是用负梯度来代替残差。当损失函数为平方损失函数时,负梯度就是残差: L ( y , f ( x ) ) = 1 2 ( y − f ( x ) ) 2 L(y,f(x))=\frac{1}{2}(y-f(x))^2 L(y,f(x))=21(y−f(x))2,其负梯度就是 y − f ( x ) y-f(x) y−f(x),即为残差;当损失函数不为平方损失时,损失函数的负梯度可以代替残差,称为伪残差。
3.2.1 算法

对于GBDT分类算法,GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别与拟合类别输出的误差。
为了解决这个问题,主要有两个方法:一个是用指数损失函数,此时GBDT退化为Adaboost算法。另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。
3.2.2 正则化
和Adaboost一样,我们也需要对GBDT进行正则化,防止过拟合。GBDT的正则化主要有三种方式。
第一种是和Adaboost类似的正则化项,即步长(learning rate)。
第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。
第三种是对于弱学习器即CART回归树进行正则化剪枝。
3.2.3 优缺点
GBDT主要的优点有:
1) 可以灵活处理各种类型的数据,包括连续值和离散值。
2) 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
参考:
1万+



被折叠的 条评论
为什么被折叠?



