集成学习 Ensemble Learning
1. 机器学习中的集成学习
顾名思义,集成学习(ensemble learning)指的是将多个学习器进行有效地结合,组建一个“学习器委员会”,其中每个学习器担任委员会成员并行使投票表决权,使得委员会最后的决定更科学,即其泛化性能要能优于其中任何一个学习器。
1.1 概述
1.1.1 个体与集成
在上图的集成模型中,若个体学习器都属于同一类别,例如都是决策树或都是神经网络,则称该集成为同质的(homogeneous);若个体学习器包含多种类型的学习算法,例如既有决策树又有神经网络,则称该集成为异质的(heterogenous)。
-
同质集成:个体学习器称为“基学习器”(base learner),对应的学习算法为“基学习算法”(base learning algorithm)。
-
异质集成:个体学习器称为“组件学习器”(component learner)或直称为“个体学习器”。
集成学习的两个重要概念:准确性和多样性(diversity)。准确性指的是个体学习器不能太差,要有一定的准确度;多样性则是个体学习器之间的输出要具有差异性。通过下面的这三个例子可以很容易看出这一点,准确度较高,差异度也较高,可以较好地提升集成性能。
1.1.2 Boosting
Boosting是一族可将弱学习器提升为强学习器的方法。工作机制:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
1.2 Bagging与Random Forest
相比之下,Bagging与随机森林算法就简洁了许多,上面已经提到产生“好而不同”的个体学习器是集成学习研究的核心,即在保证基学习器准确性的同时增加基学习器之间的多样性。而这两种算法的基本思(tao)想(lu)都是通过“自助采样”的方法来增加多样性。
1.2.1 Bagging
Bagging是一种并行式的集成学习方法,即基学习器的训练之间没有前后顺序可以同时进行,Bagging使用“有放回”采样的方式选取训练集,对于包含m个样本的训练集,进行m次有放回的随机采样操作,从而得到m个样本的采样集,这样训练集中有接近36.8%的样本没有被采到。按照相同的方式重复进行,我们就可以采集到T个包含m个样本的数据集,从而训练出T个基学习器,最终对这T个基学习器的输出进行结合。
lim
m
→
∞
(
1
−
1
m
)
m
→
1
e
≈
0.368
\displaystyle\lim_{m \rightarrow \infty}(1- {1\over m})^m \rightarrow {1\over e} \approx 0.368
m→∞lim(1−m1)m→e1≈0.368
可以看出Bagging主要通过样本的扰动来增加基学习器之间的多样性,因此Bagging的基学习器应为那些对训练集十分敏感的不稳定学习算法,例如:神经网络与决策树等。从偏差-方差分解来看,Bagging算法主要关注于降低方差,即通过多次重复训练提高稳定性。不同于AdaBoost的是,Bagging可以十分简单地移植到多分类、回归等问题。总的说起来则是:AdaBoost关注于降低偏差,而Bagging关注于降低方差。
1.2.2 随机森林
RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树训练过程中引入了随机属性选择。
具体来说,传统决策树在选择划分属性时是在当前节点的属性集合(假定有d个属性)中选择一个最优属性;而在RF中,对基决策树的每个节点,先从该节点的属性中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。
1.3 结合策略
1.3.1 平均法(回归问题)
对于数值型输出,最常用的结合策略是平均法(averaging)
- 简单平均法
H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x) = {1\over T} \displaystyle\sum_{i=1}^Th_i(x) H(x)=T1i=1∑Thi(x)
- 加权平均法
H
(
x
)
=
∑
i
=
1
T
w
i
h
i
(
x
)
H(x) = \displaystyle\sum_{i=1}^T w_ih_i(x)
H(x)=i=1∑Twihi(x)
其中
w
i
w_i
wi是个体学习器
h
i
h_i
hi的权重,通常要求
w
i
≥
0
w_i\geq0
wi≥0,
∑
i
=
1
T
w
i
=
1
\displaystyle\sum_{i=1}^T w_i = 1
i=1∑Twi=1
一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。
1.3.2 投票法(分类问题)
1.3.3 学习法
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。典型代表:Stacking。
把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或者y元学习器meta-learner。
基本思想:Stacking先从初始数据集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。
1.4多样性(diversity)
1.4.1 误差-分歧分解
1.4.2 多样性度量
1.4.3 多样性增强
1.5 Boosting模型
1.5.1 数学准备
-
1.泰勒公式
- 定义:泰勒公式是一个用函数在某点的信息描述其附近取值的公式。局部有效性
基本形式:
f ( x ) = ∑ n = 0 ∞ f ( n ) ( x 0 ) n ! ( x − x 0 ) n f(x)=\sum_{n=0}^\infty {f^{(n)}(x_0) \over n!}(x-x_0)^n f(x)=n=0∑∞n!f(n)(x0)(x−x0)n
- 定义:泰勒公式是一个用函数在某点的信息描述其附近取值的公式。局部有效性
-
一阶泰勒展开: f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x) \approx f(x_0)+f '(x_0)(x-x_0) f(x)≈f(x0)+f′(x0)(x−x0)
-
二阶泰勒展开: f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) ( x − x 0 ) 2 2 f(x) \approx f(x_0)+f '(x_0)(x-x_0) + f''(x_0) {(x-x_0)^2 \over 2} f(x)≈f(x0)+f′(x0)(x−x0)+f′′(x0)2(x−x0)2
-
迭代形式:假设 x t = x t − 1 + Δ x x^t=x^{t-1}+\Delta x xt=xt−1+Δx,将 f ( x t ) f(x^t) f(xt)在 x t − 1 x^{t-1} xt−1处进行泰勒展开
f ( x t ) = f ( x t − 1 + Δ x ) ≈ f ( x t − 1 ) + f ′ ( x t − 1 ) Δ x + f ′ ′ ( x t − 1 ) Δ x 2 2 f(x^t) = f(x^{t-1}+\Delta x) \approx f(x^{t-1})+f '(x^{t-1})\Delta x + f''(x^{t-1}) {\Delta x^2 \over 2} f(xt)=f(xt−1+Δx)≈f(xt−1)+f′(xt−1)Δx+f′′(xt−1)2Δx2
- 2.梯度下降
在机器学习任务中,需要最小化损失函数
L
(
θ
)
L(\theta)
L(θ),其中
θ
\theta
θ是要求解的模型参数。梯度下降法常用来求解这种无约束最优化问题,是一种迭代方法:选取初值
θ
0
\theta^0
θ0
,不断迭代,更新
θ
\theta
θ的值,进行损失函数的极小化。
迭代公式:
θ
t
=
θ
t
−
1
+
Δ
θ
\theta^t = \theta^{t-1}+\Delta \theta
θt=θt−1+Δθ
将
L
(
θ
t
)
L(\theta^t)
L(θt)在
θ
t
−
1
\theta^{t-1}
θt−1进行一阶泰勒展开:
L
(
θ
t
)
=
L
(
θ
t
−
1
+
Δ
θ
)
≈
L
(
θ
t
−
1
)
+
L
(
θ
t
−
1
)
Δ
x
L(\theta^t) = L(\theta^{t-1}+\Delta \theta) \approx L(\theta^{t-1})+L(\theta^{t-1})\Delta x
L(θt)=L(θt−1+Δθ)≈L(θt−1)+L(θt−1)Δx
要使得
L
(
θ
t
)
<
L
(
θ
t
−
1
)
L(\theta^t) < L(\theta^{t-1})
L(θt)<L(θt−1),可取:
Δ
θ
=
−
α
L
(
θ
t
−
1
)
\Delta \theta = - \alpha L(\theta^{t-1})
Δθ=−αL(θt−1),则:
θ
t
=
θ
t
−
1
−
α
L
(
θ
t
−
1
)
\theta^t = \theta ^{t-1}- \alpha L(\theta^{t-1})
θt=θt−1−αL(θt−1)
- 3.牛顿法 Newton’s Method
将 L ( θ t ) L(\theta^t) L(θt)在 θ t − 1 \theta^{t-1} θt−1处进行二阶泰勒展开:
L
(
θ
t
)
≈
L
(
θ
t
−
1
)
+
L
′
(
θ
t
−
1
)
Δ
θ
+
L
′
′
(
θ
t
−
1
)
Δ
θ
2
2
L(\theta^t) \approx L(\theta^{t-1})+L'(\theta^{t-1})\Delta \theta + L''(\theta^{t-1}) {\Delta \theta^2 \over 2}
L(θt)≈L(θt−1)+L′(θt−1)Δθ+L′′(θt−1)2Δθ2
简化一下:
L
(
θ
t
)
≈
L
(
θ
t
−
1
)
+
g
Δ
θ
+
h
Δ
θ
2
2
L(\theta^t) \approx L(\theta^{t-1})+g\Delta \theta + h {\Delta \theta^2 \over 2}
L(θt)≈L(θt−1)+gΔθ+h2Δθ2
对
Δ
θ
\Delta \theta
Δθ求偏导,求得
Δ
θ
=
−
g
h
\Delta \theta = -{g \over h}
Δθ=−hg,故
θ
t
=
θ
t
−
1
+
Δ
θ
=
θ
t
−
1
−
g
h
\theta^t = \theta^{t-1}+\Delta \theta=\theta^{t-1} -{g \over h}
θt=θt−1+Δθ=θt−1−hg
推广到向量形式,迭代公式: θ t = θ t − 1 − H − 1 g \theta^t=\theta^{t-1} -H^{-1}g θt=θt−1−H−1g,H是海森矩阵
- 从参数空间到函数空间
- GBDT在函数空间中利用梯度下降法进行优化
- XGboost在函数空间中用牛顿法进行优化
实际上GBDT泛指所有梯度提升树算法,包括XGboost。
小结:
- Boosting算法是一种加法模型(additive training)
F ( x ) = ∑ t = 0 T f t ( x ) F(x)=\sum_{t=0}^T f_t(x) F(x)=t=0∑Tft(x) - 基分类器 常采用回归树和逻辑回归,树模型有以下优缺点:
- 可解释性强
- 可处理混合类型特征
- 具体伸缩不变性(不用归一化特征)
- 有特征组合的作用
- 可自然地处理缺失值
- 对异常点鲁棒
-有特征选择作用
-可扩展性强,容易并行 - 缺乏平滑性(回归预测时输出值只能 输出有限的若干种数值)
- 不适合处理高维稀疏数据
1.5.2 Gradient Boosting Tree
1.5.3 XGboost
1.5.4 高效的工具包 LightGBM
对于GBDT、XGboost下两篇文章再总结!