集成学习
Ensemble Learning
Boosting
个体学习器间存在强依赖关系,必须串行生成各基学习器
Boosting考虑的是同质弱学习器
-
先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合
-
Boosting对上一个基学习器的依赖是指需要根据上一基学习器的分类误差判定该学习器的权重以及要如何改变训练集的分布以适用于下一基学习器的训练。也就是说,下一个基学习器并不是在上一基学习器的参数基础上继续训练的,而是由新的分布数据重新训练
-
从偏差-方差分解角度看,Boosting主要关注降低偏差
AdaBoost
只适用于二分类任务
Bagging
Boostrap AGGregatING
Bagging考虑的是同质弱学习器
-
基于前述介绍的自助采样法构建出T个各含m个训练样本的数据集,然后基于每个数据集训练出一个基学习器,再将这些基学习器结合,通常采取简单投票(分类)或简单平均法(回归)
-
为什么不直接对原始数据集进行简单划分成T个训练集进行训练?
Ensemble中,我们希望获得的若干基学习器能有比较大的差异,但与此同时,我们还希望个体基学习器不能太差,如果采样出的每个训练子集都完全不同的话,每个基学习器只用到了一小部分数据,甚至有可能不足以进行有效学习,这显然无法确保产生出比较好的基学习器,故考虑使用相互有交叠的采样子集
-
-
从偏差-方差分解角度看,Bagging主要关注降低方差
随机森林
Random Forest,RF
-
RF在以决策树为基学习器构建Bagging的基础上,进一步在决策树的训练过程中引入了随机属性选择
-
传统决策树在选择划分属性时是在当前节点的属性集合(假设有d个属性)中选择一个最优属性;而在RF中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。
-
这里的参数k控制了随机性的引入程度:若令k=d,则基决策树的构建与传统决策树相同;若令k=1,则是随机选择一个属性用于划分;一般情况下,推荐值 k = l o g 2 ( d ) k = log_2(d) k=log2(d)
-
-
RF中基学习器的“多样性”不仅通过样本扰动,还来自划分属性选择的扰动,这就可能使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升
结合策略
平均法
Averaging
一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法
-
简单平均
Simple Averaging
H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x) = \frac{1}{T}\sum\limits_{i=1}^Th_i(x) H(x)=T1i=1∑Thi(x)
-
加权平均
Weighted Averaging
H ( x ) = ∑ i = 1 T w i h i ( x ) H(x) = \sum\limits_{i=1}^Tw_ih_i(x) H(x)=i=1∑Twihi(x)
通常要求 w i > = 0 , ∑ i = 1 T w i = 1 w_i >= 0,\sum\limits_{i=1}^Tw_i=1 wi>=0,i=1∑Twi=1
投票法
Voting
-
绝对多数投票法
Majority Voting
适用于多标签分类
H ( x ) = { c j , if ∑ i = 1 T h i j ( x ) > 0.5 ∑ k = 1 N ∑ i = 1 T h i k ( x ) reject, otherwise H(\boldsymbol{x})= \begin{cases}c_{j}, & \text { if } \sum_{i=1}^{T} h_{i}^{j}(\boldsymbol{x})>0.5 \sum_{k=1}^{N} \sum_{i=1}^{T} h_{i}^{k}(\boldsymbol{x}) \\ \text { reject, } & \text { otherwise }\end{cases} H(x)={cj, reject, if ∑i=1Thij(x)>0.5∑k=1N∑i=1Thik(x) otherwise
即若某标记得票过半数,则预测为该标记,否则拒绝预测 -
相对多数投票法
Plurality Voting
适用于普通的多分类
H ( x ) = c a r g m a x ∑ i = 1 T h i j ( x ) H(x) = c_{argmax \sum\limits_{i=1}^Th_i^j(x)} H(x)=cargmaxi=1∑Thij(x)
即预测为得票最多的标记,若同时有多个标记获最高票,则随机选择 -
加权投票法
Weighted Voting
H ( x ) = c a r g m a x ∑ i = 1 T w i h i j ( x ) H(x) = c_{argmax \sum\limits_{i=1}^Tw_ih_i^j(x)} H(x)=cargmaxi=1∑Twihij(x)
通常要求 w i > = 0 , ∑ i = 1 T w i = 1 w_i >= 0,\sum\limits_{i=1}^Tw_i=1 wi>=0,i=1∑Twi=1 -
硬投票 & 软投票
-
硬投票(Hard Voting):预测值为代表类别的索引值,如0、1等
-
软投票(Soft Voting):预测值为代表类别的概率值,如0.36、0.98等
-
-
注意事项
-
若类概率值未经过规范化,如SVM的分类间隔值,必须使用一些技术如Platt缩放(Platt Scaling)、等分回归(Isotonic Regression)等进行“校准”后才能作为类概率使用
-
异质基学习器的类概率值不能直接进行比较,可将概率值转换为标签进行比较
-
学习法(Stacking)
Stacking本身是一种Ensemble方法,也可看成是一种结合策略,是学习法的代表
Stacking考虑的异质弱学习器
-
算法流程
-
将训练集划分为两组
- 以K-FOLD为例,可划分为测试集和训练集
-
给定T个初级学习算法,在训练集上训练得出T个初级学习器
-
用训练好的T个初级学习器对测试集进行预测,生成训练次级学习器所需的数据样本
-
即将T个初级学习器在测试集上的输出作为次级学习器的输入数据
z i = ( z i 1 ; z i 2 ; . . . ; z i T ) z_i = (z_{i1};z_{i2};...;z_{iT}) zi=(zi1;zi2;...;ziT)
D ′ = { ( z i , y i ) } i = 1 m D' = \{(z_i, y_i)\}_{i=1}^m D′={(zi,yi)}i=1m
-
-
将上述生成的数据集 D ′ D' D′用于训练次级学习器
-
多样性
误差-分歧分解
Error-Ambiguity Decomposition
- 个体学习器准确性越高、多样性越大,则集成越好
多样性度量
Diversity Measure
h i = + 1 h i = − 1 h j = + 1 a c h j = − 1 b d \begin{array}{|c|cc|} \hline & h_{i}=+1 & h_{i}=-1 \\ \hline h_{j}=+1 & a & c \\ h_{j}=-1 & b & d \\ \hline \end{array} hj=+1hj=−1hi=+1abhi=−1cd
-
不合度量
Disagreement Measure
d i s i j = b + c m dis_{ij} = \frac{b+c}{m} disij=mb+c
值越大多样性越大 -
相关系数
Correlation Coefficient
ρ i j = a d − b c ( a + b ) ( a + c ) ( c + d ) ( b + d ) ρ_{ij} = \frac{ad-bc}{\sqrt{(a+b)(a+c)(c+d)(b+d)}} ρij=(a+b)(a+c)(c+d)(b+d)ad−bc
-
Q-统计量
Q-statistic
Q i j = a d − b c a d + b c Q_{ij} = \frac{ad-bc}{ad+bc} Qij=ad+bcad−bc
-
K-统计量
K-statistic
K = p 1 − p 2 1 − p 2 K = \frac{p_1 - p_2}{1 - p_2} K=1−p2p1−p2
越大多样性越小p 1 = a + d m p_1 = \frac{a+d}{m} p1=ma+d
p 2 = ( a + b ) ( a + c ) + ( c + d ) ( b + d ) m 2 p_2 = \frac{(a+b)(a+c)+(c+d)(b+d)}{m^2} p2=m2(a+b)(a+c)+(c+d)(b+d)
多样性增强
-
数据样本扰动
-
通常基于采样法。如在Bagging中使用自助采样法,在AdaBoost中使用序列采样
-
适用于决策树、神经网络等训练样本稍加变化就会导致学习器有显著变动的学习器
-
线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等对数据扰动不敏感,需使用其他机制
-
-
输入属性扰动
-
从初始属性集中抽取出若干个属性子集(考虑随机选取和投影),再基于每个属性子集训练一个基学习器
-
对包含大量冗余属性的数据,在属性子空间中训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销,同时由于冗余属性多,减少一些属性后训练出的个体学习器也不至于太差
-
若数据只包含少量属性,或冗余属性很少,则不宜使用输入属性扰动法
-
-
输出表示扰动
-
算法参数扰动