树相关模型与集成学习
决策树
决策树基本概念
决策树是一种基本的分类与回归方法,它可以看作if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布
决策树学习本质上是从训练数据集中归纳出一组分类规则,从所有可能的决策树中选取最优决策树是NP完全问题,所以通常采用启发式方法,近似求解这一最优化问题
决策树学习基本算法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gf4TXxtj-1619061741452)(imgs/decisiontree.png)]
显然决策树的生成是一个递归过程。在决策树基本算法中,有三种情形会导致递归返回:
- 当前结点包含的样本全属于同一类别,无需划分
- 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
- 当前结点包含的样本集合为空,不能划分
在第2种情形下,我们把当前结点标记为叶结点,井将其类别设定为该结点所含样本最多的类别,在第3种情形下,同样把当前结点标记为叶结点且将其类别设定为其父结点所含样本最多的类别
注意这两种情形的处理实质不同:情形2是在利用当前结点的后验分布,而情形3则是把父结点的样本分布
作为当前结点的先验分布
划分选择
由决策树学习基本算法可看出决策树学习的关键在于如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的"纯度" (purity) 越来越高
信息增益
“信息熵” (information entropy)是度量样本集合纯度最常用的一种指标
假定当前样本集合
D
D
D中第
k
k
k类样本所占的比例为
p
k
(
k
=
1
,
2
,
.
.
.
,
∣
Y
∣
)
p_k(k = 1, 2,. . . , |\mathcal{Y}|)
pk(k=1,2,...,∣Y∣),则
D
D
D的信息熵定义为
Ent
(
D
)
=
−
∑
k
=
1
∣
Y
∣
p
k
log
2
p
k
\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k}
Ent(D)=−k=1∑∣Y∣pklog2pk
Ent
(
D
)
\operatorname{Ent}(D)
Ent(D)的值越小,则
D
D
D的纯度越高
假定离散属性
a
a
a有
V
V
V个可能的取值
{
a
1
,
a
2
,
⋯
,
a
V
}
\{a^1, a^2, \cdots, a^V\}
{a1,a2,⋯,aV}, 若使用
a
a
a来对样本集
D
D
D进行划分,则会产生
V
V
V个分支结点,其中第
v
v
v个分支结点包含了
D
D
D中所有在属性
a
a
a上取值为
a
V
a^V
aV的样本,记为
D
v
D^v
Dv,则属性
a
a
a对样本集
D
D
D进行划分所获得的"信息增益" (information gain)定义为
Gain
(
D
,
a
)
=
Ent
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Ent
(
D
v
)
≥
0
(
Jensen’s inequality
)
\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)\ge 0\ (\text{Jensen's inequality})
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)≥0 (Jensen’s inequality)
一般而言,信息增益越大,则意味着使用属性
a
a
a来进行划分所获得的"纯度提升"越大。因此,我们可用信息增益来进行决策树的划分属性选择,即选择如下的
a
∗
a_{*}
a∗作为最优划分属性
a
∗
=
arg
max
a
∈
A
Gain
(
D
,
a
)
a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a)
a∗=a∈AargmaxGain(D,a)
著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性的
增益率
实际上,信息增益准则对可取值数目较多的属性有所偏好(极端情况:每个样本自己的ID,假设均唯一,则此时ID属性的信息增益总是最大的,但这样的模型显然不具有好的泛化能力),为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用"增益率" (gain ratio) 来选择最优划分属性,增益率定义为
KaTeX parse error: Expected '}', got '_' at position 14: \text { Gain_̲ratio }(D, a)=\…
其中
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
log
2
∣
D
v
∣
∣
D
∣
\mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
称为属性
a
a
a的"固有值" (intrinsic value),属性
a
a
a的可能取值数目越多(即
V
V
V越大),则
I
V
(
a
)
\mathrm{IV}(a)
IV(a)的值通常会越大
需注意的是,增益率准则对可取值数目较少的属性有所偏好。因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的
基尼指数
数据集
D
D
D的纯度除了用信息熵来度量以外,还可用如下的基尼值来度量:
Gini
(
D
)
=
∑
k
=
1
∣
Y
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
Y
∣
p
k
2
\begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned}
Gini(D)=k=1∑∣Y∣k′=k∑pkpk′=1−k=1∑∣Y∣pk2
直观来说,
Gini
(
D
)
\operatorname{Gini}(D)
Gini(D)反映了从数据集
D
D
D中随机抽取两个样本,其类别标记不一致的概率。因此,
Gini
(
D
)
\operatorname{Gini}(D)
Gini(D)越小,则数据集
D
D
D的纯度越高
CART决策树使用"基尼指数" (Gini index)来选择划分属性,属性
a
a
a的基尼指数定义为
KaTeX parse error: Expected '}', got '_' at position 14: \text { Gini_̲index }(D, a)=\…
于是我们选取那个使得划分后基尼指数最小的属性作为最优划分属性,即
KaTeX parse error: Expected '}', got '_' at position 51: … } \text { Gini_̲index }(D, a)
CART全名是分类与回归树,既可以用于分类,也可以用于回归,用于分类时使用"基尼指数" (Gini index)来选择划分属性,用于回归时,一般采用MSE来选择划分属性(选择使得划分后MSE最小的,划分后每一类以该类样本标签值的平均值作为预测值计算MSE),CART和ID3, C4.5决策树还有一个区别就是CART是一刻二叉树,而ID3, C4.5决策树可以是多叉树,CART在对离散属性分类时,只是分为属于第 k k k类和不属于第 k k k类的,而ID3, C4.5决策树则是根据该离散属性有多少类就分多少类
剪枝处理
剪枝(pruning)是决策树学习算法对付"过拟合"的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得"太好"了,以致于把训练集自身
的一些特点当作所有数据都具有的一般性质而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险
决策树剪枝的基本策略有"预剪枝" (pre-pruning)和"后剪枝"(post-pruning)。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点
如何判断决策树泛化性能是否提升呢?这可使用之前介绍的性能评估方法,比如留出法、交叉验证法、自助法等,例如采用留出法,即我们预留一部分数据用作"验证集"以进行性能评估
预剪枝的优缺点:
- 优点:降低过拟合的风险、减少决策树的训练时间
- 缺点:有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高,预剪枝基于"贪心"的思想来禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险
后剪枝的优缺点:
- 优点:一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树
- 缺点:后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多
连续与缺失值
连续值处理
由于连续属性的可取值数目不再有限,因此不能直接根据连续属性的可取值来对结点进行划分。此时连续属性离散化技术可派上用场。最简单的策略是采用二分法(bi-partition)对连续属性进行处理,这正是C4.5决策树算法中采用的机制
给定样本集
D
D
D和连续属性
a
a
a,假定
a
a
a在
D
D
D上出现了
n
n
n个不同的取值,将这些值从小到大进行排序,记为
{
a
1
,
a
2
,
a
n
}
.
\{a^1, a^2,a_n\}.
{a1,a2,an}.基于划分点
t
t
t可将
D
D
D分为于集
D
t
+
D_t^+
Dt+和
D
t
−
D_t^-
Dt−,其中
D
t
−
D_t^-
Dt−包含那些在属性
a
a
a上取值不大于
t
t
t的样本,
D
t
+
D_t^+
Dt+则包含那些属性
a
a
a上取值大于
t
t
t的样本。显然对相邻的属性取值
a
i
a^i
ai与
a
i
+
1
a^{i+1}
ai+1来说,
t
t
t在区间
[
a
i
,
a
i
+
1
)
[a^i,a^{i+1})
[ai,ai+1)中取任意值所产生的划分结果相同。因此,对连续属性
a
a
a,我们可考察包含
n
−
1
n-1
n−1个元素的候选划分点集合
T
a
=
{
a
i
+
a
i
+
1
2
∣
1
⩽
i
⩽
n
−
1
}
T_{a}=\left\{\frac{a^{i}+a^{i+1}}{2} \mid 1 \leqslant i \leqslant n-1\right\}
Ta={2ai+ai+1∣1⩽i⩽n−1}
即把区间
[
a
i
,
a
i
+
1
)
[a^i,a^{i+1})
[ai,ai+1)的中点作为候选划分点,然后我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分,此时可以定义该连续属性对应的信息增益为
Gain
(
D
,
a
)
=
max
t
∈
T
a
Gain
(
D
,
a
,
t
)
=
max
t
∈
T
a
Ent
(
D
)
−
∑
λ
∈
{
−
,
+
}
∣
D
t
λ
∣
∣
D
∣
Ent
(
D
t
λ
)
\begin{aligned} \operatorname{Gain}(D, a) &=\max _{t \in T_{a}} \operatorname{Gain}(D, a, t) \\ &=\max _{t \in T_{a}} \operatorname{Ent}(D)-\sum_{\lambda \in\{-,+\}} \frac{\left|D_{t}^{\lambda}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{\lambda}\right) \end{aligned}
Gain(D,a)=t∈TamaxGain(D,a,t)=t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣∣Dtλ∣∣Ent(Dtλ)
其中
Gain
(
D
,
a
,
t
)
\operatorname{Gain}(D, a, t)
Gain(D,a,t)是样本集
D
D
D相对于属性
a
a
a基于划分点
t
t
t划分后的信息增益
需注意的是,与离散属性不同,若当前结点划分属性为连续属性,则该属性还可作为其后代结点的划分属性
缺失值处理
思想:按非缺失值所占比例加权处理,具体可见西瓜书4.4.2节
集成学习
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system) 、基于委员会的学习(committee-based learning) 等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqjrjPiG-1619061741455)(imgs/ensemble_learning.png)]
要获得好的集成,个体学习器应"好而不同",即个体学习器应有良好的"准确性"和"多样性",而个体学习器的"准确性"和"多样性"本身就存在冲突。一般的,准确性很高之后,要增加多样性就需牺牲准确性。事实上,如何产生并结合"好而不同"的个体学习器,恰是集成学习研究的核心
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法以及个体学习器间不存在强依赖关系、可同时生成的并行化方法,前者的代表是Boosting, 后者的代表是Bagging(例子:“随机森林” (Random Forest))
Boosting
Boosting(提升方法)是一种可将弱学习器提升为强学习器的算法。这种算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器,如此重复进行,直至基学习器数目达到事先指定的值 T T T, 最终将这 T T T个基学习器进行加权结合
AdaBoost
Boosting族算法最著名的代表是AdaBoost,完整算法如下,其中 y i ∈ { − 1 , + 1 } y_{i} \in\{-1,+1\} yi∈{−1,+1}, f f f是真实函数
算法流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZkQ4f11-1619061741457)(imgs/adaboost.png)]
算法推导
基于"加性模型" (additive model)的AdaBoost推导:
-
学习的模型是基学习器的线性组合
H ( x ) = ∑ t = 1 T α t h t ( x ) H(\boldsymbol{x})=\sum_{t=1}^{T} \alpha_{t} h_{t}(\boldsymbol{x}) H(x)=t=1∑Tαtht(x) -
最小化指数损失函数
ℓ exp ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] \ell_{\exp }(H \mid \mathcal{D})=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H(\boldsymbol{x})}\right] ℓexp(H∣D)=Ex∼D[e−f(x)H(x)]
对 H ( x ) H(\boldsymbol{x}) H(x)求偏导
∂ ℓ exp ( H ∣ D ) ∂ H ( x ) = − e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) \frac{\partial \ell_{\exp }(H \mid \mathcal{D})}{\partial H(\boldsymbol{x})}=-e^{-H(\boldsymbol{x})} P(f(\boldsymbol{x})=1 \mid \boldsymbol{x})+e^{H(\boldsymbol{x})} P(f(\boldsymbol{x})=-1 \mid \boldsymbol{x}) ∂H(x)∂ℓexp(H∣D)=−e−H(x)P(f(x)=1∣x)+eH(x)P(f(x)=−1∣x)
令导数为0,可得
H ( x ) = 1 2 ln P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) H(\boldsymbol{x})=\frac{1}{2} \ln \frac{P(f(x)=1 \mid \boldsymbol{x})}{P(f(x)=-1 \mid \boldsymbol{x})} H(x)=21lnP(f(x)=−1∣x)P(f(x)=1∣x)
因此有
sign ( H ( x ) ) = sign ( 1 2 ln P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) ) = { 1 , P ( f ( x ) = 1 ∣ x ) > P ( f ( x ) = − 1 ∣ x ) − 1 , P ( f ( x ) = 1 ∣ x ) < P ( f ( x ) = − 1 ∣ x ) = arg max y ∈ { − 1 , 1 } P ( f ( x ) = y ∣ x ) , \begin{aligned} \operatorname{sign}(H(\boldsymbol{x})) &=\operatorname{sign}\left(\frac{1}{2} \ln \frac{P(f(x)=1 \mid \boldsymbol{x})}{P(f(x)=-1 \mid \boldsymbol{x})}\right) \\ &=\left\{\begin{array}{ll} 1, & P(f(x)=1 \mid \boldsymbol{x})>P(f(x)=-1 \mid \boldsymbol{x}) \\ -1, & P(f(x)=1 \mid \boldsymbol{x})<P(f(x)=-1 \mid \boldsymbol{x}) \end{array}\right.\\ &=\underset{y \in\{-1,1\}}{\arg \max } P(f(x)=y \mid \boldsymbol{x}), \end{aligned} sign(H(x))=sign(21lnP(f(x)=−1∣x)P(f(x)=1∣x))={1,−1,P(f(x)=1∣x)>P(f(x)=−1∣x)P(f(x)=1∣x)<P(f(x)=−1∣x)=y∈{−1,1}argmaxP(f(x)=y∣x),
这意味着 sign ( H ( x ) ) \operatorname{sign}(H(\boldsymbol{x})) sign(H(x))达到了贝叶斯最优错误率,这说明指数损失函数是分类任务原本 0 − 1 0-1 0−1损失函数的一致的(consistent)替代损失函数。由于这个替代函数有更好的数学性质,例如它是连续可微函数,因此我们用它替代 0 − 1 0-1 0−1损失函数作为优化目标 -
在AdaBoost算法中,第一个基分类器 h 1 h_{1} h1是通过直接将基学习算法用于初始数据分布而得,此后迭代地生成 h t h_{t} ht和 α t \alpha_t αt, 当基分类器 h t h_{t} ht基于分布 D t \mathcal{D}_{t} Dt产生后,该基分类器的权重 α t \alpha_t αt应使得 α t h t \alpha_th_t αtht最小化指数损失函数
ℓ exp ( α t h t ∣ D t ) = E x ∼ D t [ e − f ( x ) α t h t ( x ) ] = E x ∼ D t [ e − α t I ( f ( x ) = h t ( x ) ) + e α t 1 ( f ( x ) ≠ h t ( x ) ) ] = e − α t P x ∼ D t ( f ( x ) = h t ( x ) ) + e α t P x ∼ D t ( f ( x ) ≠ h t ( x ) ) = e − α t ( 1 − ϵ t ) + e α t ϵ t \begin{aligned} \ell_{\exp }\left(\alpha_{t} h_{t} \mid \mathcal{D}_{t}\right) &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left[e^{-f(\boldsymbol{x}) \alpha_{t} h_{t}(\boldsymbol{x})}\right] \\ &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left[e^{-\alpha_{t}} \mathbb{I}\left(f(\boldsymbol{x})=h_{t}(\boldsymbol{x})\right)+e^{\alpha_{t}} \mathbb{1}\left(f(\boldsymbol{x}) \neq h_{t}(\boldsymbol{x})\right)\right] \\ &=e^{-\alpha_{t}} P_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left(f(\boldsymbol{x})=h_{t}(\boldsymbol{x})\right)+e^{\alpha_{t}} P_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left(f(\boldsymbol{x}) \neq h_{t}(\boldsymbol{x})\right) \\ &=e^{-\alpha_{t}}\left(1-\epsilon_{t}\right)+e^{\alpha_{t}} \epsilon_{t} \end{aligned} ℓexp(αtht∣Dt)=Ex∼Dt[e−f(x)αtht(x)]=Ex∼Dt[e−αtI(f(x)=ht(x))+eαt1(f(x)=ht(x))]=e−αtPx∼Dt(f(x)=ht(x))+eαtPx∼Dt(f(x)=ht(x))=e−αt(1−ϵt)+eαtϵt
其中 ϵ t = P x ∼ D t ( h t ( x ) ≠ f ( x ) ) \epsilon_{t}=P_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left(h_{t}(\boldsymbol{x}) \neq f(\boldsymbol{x})\right) ϵt=Px∼Dt(ht(x)=f(x))对 α t \alpha_t αt求导
∂ ℓ exp ( α t h t ∣ D t ) ∂ α t = − e − α t ( 1 − ϵ t ) + e α t ϵ t \frac{\partial \ell_{\exp }\left(\alpha_{t} h_{t} \mid \mathcal{D}_{t}\right)}{\partial \alpha_{t}}=-e^{-\alpha_{t}}\left(1-\epsilon_{t}\right)+e^{\alpha_{t}} \epsilon_{t} ∂αt∂ℓexp(αtht∣Dt)=−e−αt(1−ϵt)+eαtϵt
令导数为0,可得
α t = 1 2 ln ( 1 − ϵ t ϵ t ) \alpha_{t}=\frac{1}{2} \ln \left(\frac{1-\epsilon_{t}}{\epsilon_{t}}\right) αt=21ln(ϵt1−ϵt) -
AdaBoost 算法在获得 H t − 1 H_{t-1} Ht−1之后样本分布将进行调整,使下一轮的基学习器 h t h_t ht能纠正 H t − 1 H_{t-1} Ht−1的一些错误。理想的 h t h_t ht能纠正 H t − 1 H_{t-1} Ht−1的全部错误,即最小化
ℓ exp ( H t − 1 + h t ∣ D ) = E x ∼ D [ e − f ( x ) ( H t − 1 ( x ) + h t ( x ) ) ] = E x ∼ D [ e − f ( x ) H t − 1 ( x ) e − f ( x ) h t ( x ) ] \begin{aligned} \ell_{\exp }\left(H_{t-1}+h_{t} \mid \mathcal{D}\right) &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x})\left(H_{t-1}(\boldsymbol{x})+h_{t}(\boldsymbol{x})\right)}\right] \\ &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})} e^{-f(\boldsymbol{x}) h_{t}(\boldsymbol{x})}\right] \end{aligned} ℓexp(Ht−1+ht∣D)=Ex∼D[e−f(x)(Ht−1(x)+ht(x))]=Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]
注意到 f 2 ( x ) = h t 2 ( x ) = 1 f^{2}(\boldsymbol{x})=h_{t}^{2}(\boldsymbol{x})=1 f2(x)=ht2(x)=1,上式可使用 e − f ( x ) h t ( x ) e^{-f(\boldsymbol{x}) h_{t}(\boldsymbol{x})} e−f(x)ht(x)的泰勒展式近似为
ℓ exp ( H t − 1 + h t ∣ D ) ≃ E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h t ( x ) + f 2 ( x ) h t 2 ( x ) 2 ) ] = E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h t ( x ) + 1 2 ) ] \begin{aligned} \ell_{\exp }\left(H_{t-1}+h_{t} \mid \mathcal{D}\right) & \simeq \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\left(1-f(\boldsymbol{x}) h_{t}(\boldsymbol{x})+\frac{f^{2}(\boldsymbol{x}) h_{t}^{2}(\boldsymbol{x})}{2}\right)\right] \\ &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\left(1-f(\boldsymbol{x}) h_{t}(\boldsymbol{x})+\frac{1}{2}\right)\right] \end{aligned} ℓexp(Ht−1+ht∣D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+2f2(x)ht2(x))]=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+21)]
于是理想的基学习器
h t ( x ) = arg min h ℓ exp ( H t − 1 + h ∣ D ) = arg min h E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h ( x ) + 1 2 ) ] = arg max h E x ∼ D [ e − f ( x ) H t − 1 ( x ) f ( x ) h ( x ) ] = arg max h E x ∼ D [ e − f ( x ) H t − 1 ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] f ( x ) h ( x ) ] \begin{aligned} h_{t}(\boldsymbol{x})&=\underset{h}{\arg \min } \ell_{\exp }\left(H_{t-1}+h \mid \mathcal{D}\right)\\ &=\underset{h}{\arg \min } \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\left(1-f(\boldsymbol{x}) h(\boldsymbol{x})+\frac{1}{2}\right)\right] \\ &=\underset{h}{\arg \max } \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})} f(\boldsymbol{x}) h(\boldsymbol{x})\right] \\ &=\underset{h}{\arg \max } \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[\frac{e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\right]} f(\boldsymbol{x}) h(\boldsymbol{x})\right] \end{aligned} ht(x)=hargminℓexp(Ht−1+h∣D)=hargminEx∼D[e−f(x)Ht−1(x)(1−f(x)h(x)+21)]=hargmaxEx∼D[e−f(x)Ht−1(x)f(x)h(x)]=hargmaxEx∼D[Ex∼D[e−f(x)Ht−1(x)]e−f(x)Ht−1(x)f(x)h(x)]
令 D t \mathcal{D}_{t} Dt表示一个分布
D t ( x ) = D ( x ) e − f ( x ) H t − 1 ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] \mathcal{D}_{t}(\boldsymbol{x})=\frac{\mathcal{D}(\boldsymbol{x}) e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\right]} Dt(x)=Ex∼D[e−f(x)Ht−1(x)]D(x)e−f(x)Ht−1(x)
于是
h t ( x ) = arg max h E x ∼ D [ e − f ( x ) H t − 1 ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] f ( x ) h ( x ) ] = arg max h E x ∼ D t [ f ( x ) h ( x ) ] \begin{aligned} h_{t}(\boldsymbol{x}) &=\underset{h}{\arg \max } \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[\frac{e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\right]} f(\boldsymbol{x}) h(\boldsymbol{x})\right] \\ &=\underset{h}{\arg \max } \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}_{t}}[f(\boldsymbol{x}) h(\boldsymbol{x})] \end{aligned} ht(x)=hargmaxEx∼D[Ex∼D[e−f(x)Ht−1(x)]e−f(x)Ht−1(x)f(x)h(x)]=hargmaxEx∼Dt[f(x)h(x)]
由 f ( x ) , h ( x ) ∈ { − 1 , + 1 } f(\boldsymbol{x}), h(\boldsymbol{x}) \in\{-1,+1\} f(x),h(x)∈{−1,+1}, 有
f ( x ) h ( x ) = 1 − 2 I ( f ( x ) ≠ h ( x ) ) , f(\boldsymbol{x}) h(\boldsymbol{x})=1-2 \mathbb{I}(f(\boldsymbol{x}) \neq h(\boldsymbol{x})), f(x)h(x)=1−2I(f(x)=h(x)),
于是
h t ( x ) = arg min h E x ∼ D t [ I ( f ( x ) ≠ h ( x ) ) ] h_{t}(\boldsymbol{x})=\underset{h}{\arg \min } \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}_{t}}[\mathbb{I}(f(\boldsymbol{x}) \neq h(\boldsymbol{x}))] ht(x)=hargminEx∼Dt[I(f(x)=h(x))]
由此可见,理想的 h t h_{t} ht将在分布 D t \mathcal{D}_{t} Dt下最小化分类误差。因此,弱分类器将基于分布 D t \mathcal{D}_{t} Dt来训练,且针对 D t \mathcal{D}_{t} Dt的分类误差应小于0.5. 这在一定程度上类似"残差逼近"的思想考虑到 D t \mathcal{D}_{t} Dt和 D t + 1 \mathcal{D}_{t+1} Dt+1的关系,我们有
D t + 1 ( x ) = D ( x ) e − f ( x ) H t ( x ) E x ∼ D [ e − f ( x ) H t ( x ) ] = D ( x ) e − f ( x ) H t − 1 ( x ) e − f ( x ) α t h t ( x ) E x ∼ D [ e − f ( x ) H t ( x ) ] = D t ( x ) ⋅ e − f ( x ) α t h t ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] E x ∼ D [ e − f ( x ) H t ( x ) ] = D t ( x ) exp ( − α t f ( x ) h t ( x ) ) Z t \begin{aligned} \mathcal{D}_{t+1}(\boldsymbol{x}) &=\frac{\mathcal{D}(\boldsymbol{x}) e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}\right]} \\ &=\frac{\mathcal{D}(\boldsymbol{x}) e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})} e^{-f(\boldsymbol{x}) \alpha_{t} h_{t}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}\right]} \\ &=\mathcal{D}_{t}(\boldsymbol{x}) \cdot e^{-f(\boldsymbol{x}) \alpha_{t} h_{t}(\boldsymbol{x})} \frac{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\right]}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}\right]}\\ &=\frac{\mathcal{D}_{t}(\boldsymbol{x}) \exp \left(-\alpha_{t} f(\boldsymbol{x}) h_{t}(\boldsymbol{x})\right)}{Z_{t}}\\ \end{aligned} Dt+1(x)=Ex∼D[e−f(x)Ht(x)]D(x)e−f(x)Ht(x)=Ex∼D[e−f(x)Ht(x)]D(x)e−f(x)Ht−1(x)e−f(x)αtht(x)=Dt(x)⋅e−f(x)αtht(x)Ex∼D[e−f(x)Ht(x)]Ex∼D[e−f(x)Ht−1(x)]=ZtDt(x)exp(−αtf(x)ht(x))
算法小结
- 从偏差-方差分解的角度看,Boosting主要关住降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成
- Adaboost会检查当前基分类器是否是比随机猜测好,一旦条件不满足,则当前基学习器即被抛弃,且学习过程停止,可以通过重采样等手段加以优化,感兴趣可查相关资料
提升树
提升树是以分类树或回归树为基学习器的提升方法,提升树被认为是统计学习中性能最好的方法之一
采用平方损失时的回归问题的提升树算法流程如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYMHu0s0-1619061741459)(imgs/regression_boost_tree.png)]
对于二分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二类分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况
gbdt
gbdt全称是梯度提升树,是提升树的一种,提升树利用加法模型与前向分步算法实现学习的优化过程。当损失函数是平方损失和指数损失时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法,这是一种利用梯度下降法的近似方法,其算法流程如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-If6PAseR-1619061741461)(imgs/gbdt.png)]
gbdt也可以用于分类问题,感兴趣可查阅相关资料
xgboost
XGBoost(eXtreme Gradient Boosting)极致梯度提升,是一种基于GBDT的算法或者说工程实现
XGBoost的基本思想和GBDT相同,但是做了一些优化,比如二阶导数使损失函数更精准,正则项避免树过拟合,Block存储可以并行计算等
参考资料
-
Chen, T. , and C. Guestrin . “XGBoost: A Scalable Tree Boosting System.” ACM ACM, 2016.
LightGBM
LightGBM 由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中
从 LightGBM 名字我们可以看出其是轻量级(Light)的梯度提升机(GBM),其相对 XGBoost 具有训练速度快、内存占用低的特点
参考资料
- Meng, Q. . “LightGBM: A Highly Efficient Gradient Boosting Decision Tree.” (2018).
- 【机器学习】决策树(下)——XGBoost、LightGBM(非常详细)
小结
- gbdt是通用梯度提升树框架,因为对一般损失函数而言,往往每一步优化并不那么容易,所以用梯度下降近似
- xgboost在gbdt的基础上采用二阶泰勒展开,更精细,同时加上对CART树模型的正则项,减少过拟合,同时还有其他一些工程上的优化,是在kaggle比赛中非常经典的算法,实验上一般来说xgboost比gbdt效果好
- LightGBM是轻量级(Light)的梯度提升机(GBM),也是一种基于GBDT的工程实现,其相对 XGBoost 具有训练速度快、内存占用低的特点
参考资料
Bagging
Bagging是并行式集成学习方法最著名的代表,它基于自助采样法(bootstrap sampling)。给定包含 m m m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过 m m m次随机采样操作,我们得到含 m m m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现,初始训练集中约有63.2%的样本出现在来样集中。照这样,我们可采样出 T T T个含 m m m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。这就是Bagging的基本流程。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rVOd1O8e-1619061741463)(imgs/bagging.png)]
随机森林
算法流程
随机森林(Random Forest,简称RF)是Bagging的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有 d d d个属性)中选择一个最优属性,而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 k k k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数 k k k控制了随机性的引入程度。若令 k = d , k = d, k=d, 则基决策树的构建与传统决策树相同,若令 k = 1 , k = 1, k=1, 则是随机选择一个属性用于划分,一般情况下,推荐值 k = log 2 d k = \log_2d k=log2d
算法小结
- 从偏差-方差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显
- 随机森林简单、容易实现、计算开销小,令人惊奇的是,它在很多现实任务中展现出强大的性能,被誉为"代表集成学习技术水平的方法"。可以看出,随机森林对Bagging只做了小改动,但是与Bagging中基学习器的"多样性"仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升
Stacking
stacking则可以理解为bagging的升级版,因为bagging中采取的取平均或者投票的方法只是一种人为规定(其实比较合理)的方法,而stacking不采用这种人为规定的方式来得到最终结果,而是对这些学习器的在训练集上的预测值配上其真实值再次进行一次有监督学习,得到一个新的称为元学习器,以后就用这个元学习器来聚合生成最后结果,这个元学习器的作用就好比bagging的取平均或者投票,stacking的算法框架流程如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rgazp3fl-1619061741463)(imgs/stacking.png)]