文章目录
第六章:集成学习
1、个体与集成
1.1、集成学习
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,提升性能。
也称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)
根据学习器类型分为:
- 同质:集成中只包含同种类型的个体学习器,其中的个体学习器称为基学习器
- 异质:集成中包含不同类型的个体学习器,其中的个体学习器称为组件学习器
1.2、要求
个体学习器应该“好而不同”
![image-20230405144735038](https://lzztypora.oss-cn-beijing.aliyuncs.com/202304051447076.png#pic_center%20=400x200)
1.3、分类
集成学习分为两类:
- 个体学习器间存在强依赖关系、必须串行生成的序列化方法,如Boosting
- 个体学习器间不存在强依赖关系、可同时生成的并行化方法,如Bagging和随机森林(Random Forest)
2、Boosting
Boosting是一族可将弱学习器提升为强学习器的算法
![image-20230405205035166](https://lzztypora.oss-cn-beijing.aliyuncs.com/202304052050227.png#pic_center%20=60x60)
2.1、Boosting基本原理
- 从初始训练集训练出一个基学习器
- 根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注
- 基于调整后的样本分布来训练下一个基学习器
- 重复进行直到基学习器数目达到事先指定的值𝑇,最终将这𝑇个基学习器进行加权结合
2.2、AdaBoost (Adaptive Boosting)
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } , T=\{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\}, T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中 x i ∈ X ⊆ R n , y i ∈ Y = { − 1 , + 1 } x_{i}{\in}{\mathcal{X}}\subseteq\mathbf{R}^{n},y_i \in \mathcal{Y}=\{-1,+1\} xi∈X⊆Rn,yi∈Y={−1,+1};且给了弱学习算法的形式
输出:最终分类器 Y M ( x ) Y_M(x) YM(x)
流程:(李航的书和PRML有区别,LH是误分类样本的权值得以扩大,被正确分类的样本的权值得以缩小,PRML是前者变大,后者不变 )
PRML:
-
Initialize the data weighting coefficients { w n } \{w_n\} {wn} by setting w n ( 1 ) = 1 N w_n^{(1)}=\frac{1}{N} wn(1)=N1 for n = 1 , 2 , … , N n= 1,2,\dots,N n=1,2,…,N
-
For m = 1 , … , M m =1,\dots,M m=1,…,M:
-
Fit a classifier y m ( x ) y_m(\mathbf{x}) ym(x) to the training data by minimize the weighted error function
J m = ∑ n = 1 N w n ( m ) I ( y m ( x n ) ≠ t n ) J_m=\sum\limits_{n=1}^N w_n^{(m)}I(y_m(\mathbf{x}_n)\neq t_n) Jm=n=1∑Nwn(m)I(ym(xn)=tn)
where I ( y m ( x n ) ≠ t n ) I(y_m(\mathbf{x}_n)\neq t_n) I(ym(xn)=tn) is the indicator function and equal 1 when y m ( x n ) ≠ t n y_m(\mathbf{x}_n)\neq t_n ym(xn)=tn and 0 otherwise. -
Evaluate the quantities
ϵ m = ∑ n = 1 N w n ( m ) I ( y m ( x n ) ≠ t n ) ∑ n = 1 N w n ( m ) \epsilon_m=\frac{\sum\limits_{n=1}^N w_n^{(m)}I(y_m(\mathrm x_n)\neq t_n)}{\sum\limits_{n=1}^N w_n^{(m)}} ϵm=n=1∑Nwn(m)n=1∑Nwn(m)I(ym(xn)=tn)
and then use these to evaluate
α m = ln { 1 − ϵ m ϵ m } . \alpha_m=\ln\left\{\dfrac{1-\epsilon_m}{\epsilon_m}\right\}. αm=ln{ϵm1−ϵm}. -
Update the data weighting coeffificients
w n ( m + 1 ) = w n ( m ) exp { α m I ( y m ( x n ) ≠ t n ) } w^{(m+1)}_n=w^{(m)}_n\exp\left\{\alpha_m I(y_m(\mathbf{x}_n)\neq t_n)\right\} wn(m+1)=wn(m)exp{αmI(ym(xn)=tn)}预测正确的样本,e的指数为0,权重不变
只针对预测错的扩大权重(其中错误率大于0.5的, α m < 0 \alpha_m<0 αm<0,看似 w w w减小了,实际是错误率太高错的也可能是对的,对于错误率小于0.5的,被分类错误的样本权重会扩大为相同值)
-
-
Make predictions using the fifinal model, which is given by
Y M ( x ) = sign ( ∑ m = 1 M α m y m ( x ) ) Y_M(\mathbf{x})=\operatorname{sign}\left(\sum\limits_{m=1}^{M}\alpha_my_m(\mathbf{x})\right) YM(x)=sign(m=1∑Mαmym(x))正确率大于0.5时,正确率越高的分类器所占权重越大;小于0.5时反向使用
李航:
![](https://lzztypora.oss-cn-beijing.aliyuncs.com/202304052133743.png)
![](https://lzztypora.oss-cn-beijing.aliyuncs.com/202304052133174.png)
Sign函数: 如果数字为正数,则返回 1;如果数字为 0,则返回零 (0);如果数字为负数,则返回 -1。
2.3、两种样本处理方法
- 重赋权法:在训练的每一轮,根据样本分布为每个训练样本重新赋予一个权重
- 重采样法:对训练集重新采样:
- 对无法接受带权样本的基学习算法,在每一轮,根据样本分布对训练集重新采样,用重采样的样本集对基学习器进行训练。
- 在训练的每一轮要检查当前的基分类器是否比随机猜测好,不满足时当前基学习器被抛弃,且学习过程停止。初始设置的学习轮数未达到,此时采用“重采样法”,可以获得重启动,学习过程持续到预设的T轮结束
这两种方法不止适用于AdaBoost,而是普适于机器学习中:
例如在神经网络中可以通过K折交叉验证来重采样,可以通过对损失函数的不同样本加权实现重赋权
2.4、例题(李航P159)
![image-20230405215059543](https://lzztypora.oss-cn-beijing.aliyuncs.com/202304052150571.png#pic_center%20=500x200)
![image-20230405215109127](https://lzztypora.oss-cn-beijing.aliyuncs.com/202304052151155.png#pic_center%20=500x200)
![image-20230519203606858](https://lzztypora.oss-cn-beijing.aliyuncs.com/202305192036905.png#pic_center%20=500x200)
![image-20230519203639373](https://lzztypora.oss-cn-beijing.aliyuncs.com/202305192036412.png#pic_center%20=500x200)
…………以此类推往后进行。
3、Bagging与随机森林
3.1、Bagging
Bagging算法基本流程:
- 先使用自助采样法:给定包含m 个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机采样操作,我们得到含m 个样本的采样集(初始训练集中有的样本在采样集里多次出现,有的则从未出现)
- 采样出T 个含m 个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合,在预测输出进行结合时,对分类任务使用简单投票法,对回归任务使用简单平均法。
特点:
- 时间复杂度低:假定基学习器的计算复杂度为O(m),采样与投票/平均过程的复杂度为O(s),则bagging的复杂度大致为T(O(m)+O(s)),由于O(s)很小且T是一个不大的常数,因此训练一个bagging集成与直接使用基学习器的复杂度同阶(高效)。
- 可方便推广至多分类及回归任务
- 与标准的AdaBoost只适用于二分类任务不同,Bagging能不经修改的用于多分类、回归任务
3.2、决策树
3.2.1、决策树模型和学习
定义5.1(决策树):分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node) 和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。
可以将决策树看成一个 if-then 规则的集合。将决策树转换成f-then 规则的过程是这样的:由决策树的根结点到叶结点的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。决策树的路径或其对应的 if-then 规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。这里所谓覆盖是指实例的特征与路径上的特征一致或实例满足规则的条件。
决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个都没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。
3.2.2、特征选择
特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的准则是信息增益或信息增益比。
随机变量
X
X
X的熵定义为:
H
(
X
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=-\sum_{i=1}^n p_i\log p_i
H(X)=−i=1∑npilogpi
熵越大,随机变量的不确定性就越大.
决策树学习应用信息增益准则选择特征。给定训练数据集 D 和特征 A,经验熵
H
(
D
)
H(D)
H(D)表示对数据 D分类的不确定性。而经验条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)在特征
A
A
A给定的条件下对数据集
D
D
D进行分类的不确定性。那么它们的差,即信息增益,就表示由于特征 A 而使得对数据集 D的分类的不确定性减少的程度。
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
显然,对于数据集 D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
设训练数据集为 D , ∣ D ∣ D,|D| D,∣D∣ 表示其样本容量, 即样本个数。设有 K K K 个类 C k , k = C_{k}, k= Ck,k= 1 , 2 , ⋯ , K , ∣ C k ∣ 1,2, \cdots, K,\left|C_{k}\right| 1,2,⋯,K,∣Ck∣ 为属于类 C k C_{k} Ck 的样本个数, ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ \sum_{k=1}^{K}\left|C_{k}\right|=|D| ∑k=1K∣Ck∣=∣D∣ 。设特征 A A A 有 n n n 个不同的 取值 { a 1 , a 2 , ⋯ , a n } \left\{a_{1}, a_{2}, \cdots, a_{n}\right\} {a1,a2,⋯,an}, 根据特征 A A A 的取值将 D D D 划分为 n n n 个子集 D 1 , D 2 , ⋯ , D n , ∣ D i ∣ D_{1}, D_{2}, \cdots, D_{n},\left|D_{i}\right| D1,D2,⋯,Dn,∣Di∣ 为 D i D_{i} Di 的样本个数, ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ \sum_{i=1}^{n}\left|D_{i}\right|=|D| ∑i=1n∣Di∣=∣D∣ 。记子集 D i D_{i} Di 中属于类 C k C_{k} Ck 的样本的集合为 D i k D_{i k} Dik, 即 D i k = D i ∩ C k , ∣ D i k ∣ D_{i k}=D_{i} \cap C_{k},\left|D_{i k}\right| Dik=Di∩Ck,∣Dik∣ 为 D i k D_{i k} Dik 的样本个数。于是信息增益的算法如下:
算法 5.1 (信息增益的算法)
输入: 训练数据集
D
D
D 和特征
A
A
A;
输出: 特征
A
A
A 对训练数据集
D
D
D 的信息增益
g
(
D
,
A
)
g(D, A)
g(D,A) 。
(1) 计算数据集
D
D
D 的经验熵
H
(
D
)
H(D)
H(D)
H
(
D
)
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
log
2
∣
C
k
∣
∣
D
∣
H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|}
H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
(2) 计算特征
A
A
A 对数据集
D
D
D 的经验条件熵
H
(
D
∣
A
)
H(D \mid A)
H(D∣A)
H
(
D
∣
A
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
H
(
D
i
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
∑
k
=
1
K
∣
D
i
k
∣
∣
D
i
∣
log
2
∣
D
i
k
∣
∣
D
i
∣
H(D \mid A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} H\left(D_{i}\right)=-\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \sum_{k=1}^{K} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|} \log _{2} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|}
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣
(3) 计算信息增益
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D, A)=H(D)-H(D \mid A)
g(D,A)=H(D)−H(D∣A)
3.2.3、决策树生成(ID3算法)
输入: 训练数据集 D D D , 特征集 A A A 阈值 ε \varepsilon ε;
输出: 决策树 T T T
(1) 若 D D D中所有实例属于同一类 C k C_{k} Ck , 则 T T T为单结点树, 并将类 C k C_{k} Ck 作为该结点的类标记, 返回 T T T ;
(2) 若 A = ∅ A = \varnothing A=∅ , 则 T T T为单结点树, 并将 D D D中实例数最大的类 C k C_{k} Ck 作为该结点的类标记, 返回 T T T;
(3) 否则,计算 A A A 中各特征对 D D D的信息增益, 选择信息增益最大的特 征 A g A_{g} Ag ;
(4) 如果
A
g
A_{g}
Ag 的信息增益小于阈值
ε
\varepsilon
ε, 则置
T
T
T为单结点树,并将
D
{{D}}
D 中实例数最大的类
C
k
C_{k}
Ck 作为该结点的类标记,返回
T
T
T;
(5) 否则,对
A
g
A_{g}
Ag 的每一可能值
a
i
,
a_{i}\,,
ai, 依
A
g
=
a
i
A_g=a_{i}
Ag=ai 将
D
{{D}}
D 分割为若千非空子集
D
i
,
D_{i},
Di, 将
D
i
D_{i}
Di 中实例数最大的类作为标记构建子结点,由结点及其子结点构成树
T
T
T,返回
T
:
T\colon
T:
(6) 对第
i
i
i 个子结点,以
D
i
D_{i}
Di 为训练集,以
A
−
{
A
g
}
A\!-\{A_{g}\}
A−{Ag} 为特征集,递归地调用步(1)~步(5),得到子树
T
i
T_i
Ti,返回
T
i
T_{\mathrm{i}}
Ti
3.2.4、剪纸
在决策树学习中将已生成的树进行简化的过程成为剪枝,防止过拟合。
3.3、随机森林
-
简介
随机森林(Random Forest,简称RF)是bagging的一个扩展变种。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
随机性体现在两个方面
-
Bagging法随机采样:给定一个大小为 n n n的训练集 D D D,Bagging算法从中均匀、有放回地(即使用自助采样法)选取 m m m个大小为 n ′ n^{\prime} n′的子集 D i D_i Di,作为新的训练集。
-
随机属性选择:在进行节点分裂时,并非选取所有特征中的最佳特征,而是选取所有特征中的一部分再进行最佳特征选取,即:如果存在M个特征,则在每个节点分裂的时候,从M中随机选择m个特征维度(m << M),使用这些m个特征维度中最佳特征(最大化信息增益)来分割节点。在森林生长期间,m的值保持不变。一般情况下推荐 m = l o g 2 M m = log_2 M m=log2M
-
-
效果提升因素
随机森林分类效果(错误率)与两个因素有关:
-
森林中任意两棵树的相关性:相关性越大,错误率越大;(弱分类器应该good且different)
-
森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。(弱分类器应该good且different)
减小特征选择个数m,树的相关性(树之间选择的特征更不容易重叠)和分类能力(目前找到的最优特征效果可能并不好)也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m,这也是随机森林的一个重要参数。
要解决这个问题主要依据计算袋外错误率OOB error(out-of-bag error)
我们知道,在构建每棵树时,我们对训练集使用了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树而言(假设对于第k棵树),大约有1/3的训练实例没有参与第k棵树的生成,它们称为第k棵树的oob样本。而这样的采样特点就允许我们进行oob估计,它的计算方式如下:
- 对每个样本,计算它作为oob样本的树对它的分类情况(约1/3的树);
- 然后以简单多数投票作为该样本的分类结果;
- 最后用误分个数占样本总数的比率作为随机森林的oob误分率。
oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。这样,就可以通过比较oob误分率来选择一个最好的特征数m。
-
随机森林的起始性能往往相对较差,特别是在集成中只包含一个基学习器时,因为通过引入属性扰动,随机森林中个体学习器的性能往往有所降低,然而随着个体学习器数目的增加,随机森林通常会收敛到更低的泛化误差。
![image-20230519224509378](https://lzztypora.oss-cn-beijing.aliyuncs.com/202305192245438.png#pic_center%20=500x200)
参考:
《统计学习方法(第二版)》
《Pattern Recognition and Machine Learning》
《西瓜书》