集成学习
集成学习通过构建并结合多个学习器来完成机器学习任务,有时也被称为多分类器系统、基于委员会的学习等(这名字亮眼)。
个体与集成
集成学习一般包括一个或多个基本的学习器,也被称为个体学习器。通过使用多个个体学习器的方法,各个学习器间取长补短,从而获得比单一学习器显著优越的性能(包括准确性能和泛化性能)。这些个体学习器理论上可以从其他任何机器学习方法中选取。
当个体学习器均为同种类型时,称这种集成是同质的,反之是异质的。同质集成的个体学习器称为基学习器,反之称为组件学习器。
如果各个个体学习器的误差相互独立,那么随着个体学习器的数量增多,集成学习的误差将无限接近于零。而事实上,所有的个体学习器都是针对同一个问题训练出来的,它们的误差很难相互独立。事实上,个体学习器的"准确性"和"多样性"本身就存在冲突,增加多样性就需牺牲准确性,反之亦然。如何产生并结合好而不同的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类。一个是个体学习器问存在强依赖关系、必须串行生成的序列化方法;另一个是个体学习器间不存在强依赖关系、可同时生成的并行化方法。
Boosting
Boosting 是一族可将弱学习器提升为强学习器的算法,更专注于提升模型的准确性,降低偏差。它的个体学习器见存在强依赖关系,且这种算法只能串行运行。一般的,Boosting算法先从训练样本中得到一个个体学习器,然后根据当前个体学习器在训练样本上的表现(如果使用非训练样本是否能够使得Boosting有更好的泛化性能?又将如何调整训练样本的分布?)来调整训练样本的分布,并进一步训练下一个个体学习器;如此反复,直到个体学习器的数量达到事先指定的数量 T T T,最终将所有的个体学习器进行加权结合。
AdaBoost
Boosting族算法的著名代表是AdaBoost。这里以最简单的二分类问题为例,对于训练集,有:
y
i
∈
−
1
,
+
1
,
f
:
x
→
y
y_i\in {-1,+1},f:\boldsymbol{x} \rightarrow y
yi∈−1,+1,f:x→y;并且使用容易理解的加性模型(加性模型不采用梯度下降的思想,而是每次更新求解一个理论上最优的α_t和h_t):
H
(
x
)
=
∑
t
=
1
T
α
t
h
t
(
x
)
H(\boldsymbol{x})=\sum _{t=1}^T{\alpha _th_t(\boldsymbol{x})}
H(x)=t=1∑Tαtht(x)
其中KaTeX parse error: Undefined control sequence: \boldsymbold at position 5: h_t(\̲b̲o̲l̲d̲s̲y̲m̲b̲o̲l̲d̲{x}是第
t
t
t个个体学习器,
α
t
\alpha _t
αt是其对应的权重。
构造指数损失函数:
ℓ
e
x
p
(
H
∣
D
)
=
E
x
∼
D
[
e
−
f
(
x
)
H
(
x
)
]
\ell _{exp}(H\mid \mathcal{D})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H(\boldsymbol{x})}]
ℓexp(H∣D)=Ex∼D[e−f(x)H(x)]
使得损失函数最小,对其求
H
(
x
)
H(\boldsymbol{x})
H(x)的偏导,容易得到:
这意味着使用
H
(
x
)
H(\boldsymbol{x})
H(x)进行二分类可以达到贝叶斯最优错误率。
然而直接求得
ℓ
e
x
p
(
H
∣
D
)
\ell _{exp}(H\mid \mathcal{D})
ℓexp(H∣D)最小时的
H
(
x
)
H(\boldsymbol{x})
H(x)较为困难,AdaBoost算法一般采用迭代的方法逐步生成个体分类器。
分类器权重更新
通过最小化第
t
t
t步的指数损失函数:
ℓ
e
x
p
(
α
t
h
t
∣
D
t
)
=
E
x
∼
D
t
[
e
−
f
(
x
)
α
t
h
t
(
x
)
]
=
e
−
α
t
(
1
−
ϵ
t
)
+
e
α
t
ϵ
t
\ell _{exp}(\alpha_t h_t\mid \mathcal{D_t})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D_t}}[e^{-f(\boldsymbol{x})\alpha_t h_t(\boldsymbol{x})}]=e^{-\alpha_t}(1-\epsilon_t)+e^{\alpha_t}\epsilon_t
ℓexp(αtht∣Dt)=Ex∼Dt[e−f(x)αtht(x)]=e−αt(1−ϵt)+eαtϵt
其中
ϵ
t
\epsilon_t
ϵt是第
t
t
t个个体学习器错误分类的概率。对
α
t
\alpha_t
αt求偏导,可解得:
α
t
=
1
2
ln
(
1
−
ϵ
t
ϵ
t
)
\alpha_t=\frac{1}{2}\ln \bigg(\frac{1-\epsilon_t}{\epsilon_t}\bigg)
αt=21ln(ϵt1−ϵt)
也即分类器权重更新公式。
新个体学习器的确定
假设算法已经得到了
H
t
−
1
H_{t-1}
Ht−1,那么下一轮的个体学习器
h
t
h_t
ht应当能纠正
H
t
−
1
H_{t-1}
Ht−1中出现的错误。理想情况下所有的错误都应被纠正,即最小化:
对损失函数进行泰勒展开:
并令:
最终可以得到理想的个体学习器:
由此可见,理想的个体学习器将在分布为
D
t
\mathcal{D_t}
Dt的情况下最小化分类误差。
改变训练样本的分布
考虑
D
t
\mathcal{D_t}
Dt和
D
t
+
1
\mathcal{D_{t+1}}
Dt+1的关系,可以得到:
D
t
+
1
(
x
)
=
D
t
(
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
)
⋅
e
−
f
(
x
)
α
t
h
t
(
x
)
∑
x
∈
D
D
t
(
x
)
e
−
f
(
x
)
α
t
h
t
(
x
)
\begin{aligned} \mathcal{D}_{t+1}(\boldsymbol{x})&=\frac{\mathcal{D_t}(\boldsymbol{x})e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}]} \\&=\frac{\mathcal{D}(\boldsymbol{x})e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}]} \\&=\mathcal{D_t}(\boldsymbol{x})\cdot e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}\frac{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}]}{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}]} \\&=\frac{\mathcal{D_t}(\boldsymbol{x})\cdot e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}}{\sum_{\boldsymbol{x}\in D}{\mathcal{D_t}(\boldsymbol{x})e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}}} \end{aligned}
Dt+1(x)=Ex∼D[e−f(x)Ht(x)]Dt(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)]=∑x∈DDt(x)e−f(x)αtht(x)Dt(x)⋅e−f(x)αtht(x)
最后一个等号建议手动简单推导一下
AdaBoost算法流程
根据上述推导,可以很容易的理解AdaBoost算法的流程:
如果还不是十分清楚AdaBoost的流程,可以参考李航老师《统计学习方法》(清华大学出版社)对应章节。另外这篇文章也根据李航老师《统计学习方法》书籍中的例子做了详细的说明。
值得一提的是,上述算法流程中如果存在某一轮的个体学习器的错误概率大于0.5,算法将可能没有得到共
T
T
T个个体学习器就中止了。这种训练过程会过早停止的方法称之为重赋权法。此外我们还可以使用重采样法,在抛弃不满足条件的当前个体学习器之后,根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出个体学习器,从而使得学习过程可以持续到预设的T轮完成。
Bagging与随机森林
这两种方法均是个体学习器间不存在强依赖关系、可同时生成的并行化方法。且都对训练及进行了采样得到数据子集,再利用数据子集分别对个体学习器进行训练,以得到较强的泛化性能。这两种方法均着重降低模型的方差。
Bagging
这种方法直接基于自助来样法。对原训练集进行 T T T次采样,每次采样 m m m个数据,然后基于每个采样集训练出一个个体学习器,再将这些个体学习器进行结合。这相当于随机选择训练样本。在进行预测时,Bagging针对分类问题采用简单投票法,针对回归问题采用简单平均法。这种方法的实施十分简单,是一个很高效的集成学习算法。
随机森林(RF)
RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。即对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含
k
k
k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数
k
k
k控制了随机性的引入程度,一般
k
=
log
2
d
k=\log _2{d}
k=log2d。
随机森林中个体学习器的多样性不仅来自样本扰动,还来自属性扰动,这使得最终集成的泛化性能进一步提升。
结合策略
常见的结合策略包括:
- 平均法。包括简单平均法和加权平均法。
- 投票法。包括绝对多数投票法,相对多数投票法,加权投票法。其中投票可以使用硬投票( h i j ( x ) ∈ 0 , 1 h_i^j(\boldsymbol{x})\in {0,1} hij(x)∈0,1)或软投票( h i j ( x ) ∈ [ 0 , 1 ] h_i^j(\boldsymbol{x})\in [0,1] hij(x)∈[0,1])。
- 学习法。即通过另一个学习器来进行结合。
多样性
误差-分歧分解
其核心公式为:
E
=
E
‾
−
A
‾
E=\overline{E}-\overline{A}
E=E−A
其中
E
E
E表示集成的泛化误差,
E
‾
\overline{E}
E是个体学习器泛化误差的加权平均,
A
‾
\overline{A}
A是个体学习器与集成的分歧的加权平均。这个式子明确指出:个体学习器准确性越高、多样性越大,则集成越好。
多样性度量
对于二分类来说,有联表:
其中
a
+
b
+
c
+
d
=
m
a+b+c+d=m
a+b+c+d=m,有以下几种常用的多样性度量:
多样性增强
为增强多样性,一般的做法是对数据样本、输入属性、输出表示、算法参数进行扰动。(增强泛化性能)