集成学习在数学建模中的应用
- 一、集成学习概述
- (一)基知
- (二)相关术语
- (三)集成学习为何能提高性能?
- (四)集成学习方法
- 二、Bagging方法
- (一)装袋(Bagging)方法
- (二)特点
- (三)数据集划分的其他方法
- (四)参数设置
- 三、Boost方法
- (一)基知
- (二)Boosting如何获得多个弱分类器?
- 四、AdaBoost算法
- (一)基知
- (二)弱分类器的权重
- (三)样本集的权重
- (四)弱分类器的组合
- (五)AdaBoost算法
- (六)实例
- (六)特点
- (七)参数设置
- 五、Bagging和Boost的区别
- 六、模型的组合方法
- (一)怎样组合多个弱分类器?
- (二)Averaging方法
- (七)Stacking方法
- (1)原理
- (2)基础训练过程
- (3)交叉训练
- (4)代码示例
一、集成学习概述
(一)基知
分类器对数据集依赖强,数据集纷杂,很难找到适用所有情况的分类器。比如,训练任务和目标任务的数据分布不一致,数据过少等。
集成学习(Ensemble Learning) 是通过某种策略将多个模型
集成起来,通过群体决策
来提高决策准确率
。
集成学习中的两个核心问题是:
(1) 如何获得多个模型?(2) 如何集成多个模型?
(二)相关术语
(三)集成学习为何能提高性能?
(1)从模型的期望误差分析
- 设X是样本集,yx 是样本的真实的目标值,对于T个不同的模型,第 t 个模型的期望平方误差是:
e ( f t ) = E x [ ( f t ( X ) − y x ) 2 ] = E x [ ε t ( X ) 2 ] e(f_t)=E_x[(f_t(X)-y_x)^2]=E_x[\varepsilon_t(X)^2] e(ft)=Ex[(ft(X)−yx)2]=Ex[εt(X)2] - 集成模型 f 的期望平方误差 e(f) 满足:
1 T ∑ t = 1 r E x [ ε t ( X ) 2 ] ≤ e ( f ) ≤ ∑ t = 1 r E x [ ε t ( X ) 2 ] \frac{1}{T}\sum_{t=1}^{r}E_{x}[\varepsilon_{t}(X)^{2}]\leq e(f)\leq\sum_{t=1}^{r}E_{x}[\varepsilon_{t}(X)^{2}] T1t=1∑rEx[εt(X)2]≤e(f)≤t=1∑rEx[εt(X)2] - 投票规则的集成模型的期望错误大等于所有模型的平均期望错误的1/M,小于等于所有模型的平均期望错误
(2)从模型的泛化误差分析
分类问题
: f i ( X ) > 0.5 f_i(\mathbf{X}){>}0.5 fi(X)>0.5,大部分样本错误分类,投票后,集成学习器的错误率更高。
回归问题
: E [ ( f i ( X ) − y ) 2 ] > E [ ( y ‾ − y ) 2 ] \mathbb{E}[(f_i(\mathbb{X})-y)^2]>\mathbb{E}[(\overline{y}-y)^2] E[(fi(X)−y)2]>E[(y−y)2],预测效果弱于均值预测,组合预测结果后,集成学习器的预测误差更大
集成好于单个分类器的条件:
- 弱分类器独立(难满足)
- 弱分类器应好于随机猜测分类器,即 误差<0.5(容易满足)
(3)直观理解集成方法对预测能力的提升
提升的优势:
假设有25个弱分类器,且每个弱分类器的错误率均为0.35,采用少数服从多数的提升方式,只有当超过13个弱分类器都对样本x错误分类,才会导致x被误分类。
e e n s e m b l e = ∑ i = 13 25 C 25 i ( 0.35 ) i ( 1 − 0.35 ) 25 − i = 0.06 e_{ ens em ble} = \sum_{i=13}^{25}C_{ 25}^{ i}(0.35)^{i}(1-0.35)^{25-i}=0.06 eensemble=i=13∑25C25i(0.35)i(1−0.35)25−i=0.06
误分类率降低!
(四)集成学习方法
待解决的问题:
- 怎样获得不同的弱分类器?
Bagging 和 Boosting 方法 - 如何将多个弱分类器组合成一个强分类器?
投票法、加权平均、Stacking
二、Bagging方法
(一)装袋(Bagging)方法
(1)Bagging方法是基于训练集的划分:
(又被称为自举汇聚法Bootstrap aggregating),对原始数据进行自助采样
(bootstrap samples),形成T个数据集;训练每个数据集,获得T个弱模型;用投票法或加权平均生成集成学习模型。
自助采样:有放回采样,是重采样的一种。
(2)实例
已知原数据集有10个样本,利用装袋法,产生预测模型。
分别计算每个划分点,根据信息熵或Gini系数
,发现分裂点0.35或0.75能产生最好的分类结果,故,采用0.35作为分类标准。决策树单个分类器准确率最高是70%。
信息熵:
E n t r o p y = − ∑ i = 1 c p ( i ) log p ( i ) Entropy = -\sum_{\mathrm{i}=1}^{c} p(\mathrm{i}) \log p(i) Entropy=−i=1∑cp(i)logp(i)
Gini系数:
G i n i ( D ) = 1 − ∑ i = 1 c p ( i ) 2 Gini(D) = 1 - \sum_{i=1}^{c} p(i)^{2} Gini(D)=1−i=1∑cp(i)2
G i n i ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini(D,a)=\sum_{v=1}^V\frac{|D_v|}{|D|}\mathrm{~Gini}\left(D_v\right) Gini(D,a)=v=1∑V∣D∣∣Dv∣ Gini(Dv)
假设有c个类,样本点属于第 i 类的概率为 p ( i ) p(i) p(i)。信息熵和Gini系数都是用于衡量不确定性和多样性的重要指标,它们的系数越小越好
。
计算步骤:
Step1:
- 以 x = 0.35 作为划分点,产生子集 {0.1, 0.2, 0.3} 和 {0.4 ~ 1}
Gini(x=0.35)= (3/10) * [1-02-12] + (7/10) * [1-(4/7)2-(3/7)2] = 24/49- 类似地
Gini(x=0.75)=(7/10) * [1-(4/7)2-(3/7)2] + (3/10) * [1-02-12] = 24/49Step2:
重复采样,10轮,每轮获得分类器,准确率在70%
Step3:
多数表决 决定样本的最终类别,10个样本均正确分类。
装袋通过降低弱分类器方差改变了泛化误差。
(二)特点
- 结构简单,表现不错。
- 通过随机改变训练集的分布,产生新的训练子集。某些数据对象被多次采样,对于特定的子空间,弱学习器会具有很高的分类精度。
- 弱学习器预测能力越强且它们之间的差异越大,集成模型效果越好。
- Bagging方法不偏好任何基学习器,可以降低模型的方差,对不稳定学习算法非常有效。
- 适合小算例集,在大规模训练集上效果会下降(参见改进模型)。
(三)数据集划分的其他方法
(1)依据数据或特征
对原始训练数据划分,形成多个数据集。如随机森林(Random Forest) 方法。
(2)依据数据的类标号
对原始训练数据划分,形成迭代的二分类问题。如错误-纠正输出编码方法。
(3)依据算法模型
的变化,获得不同的弱学习模型。如改变神经网络结构或算法添加随机性。
(四)参数设置
- n_estimators:基学习器个数。
- criterion:分裂标准,squared_error均方差;均方差等价于特征的方差减少和最小化L2正则项。friedman_mse费尔德曼均方误差。
- max_depth:树的最大深度,防止过拟合。
- min_samples_split:内部节点再划分所需要的最少样本数,限制是否继续分裂。
- min_samples_leaf:叶子节点的最少样本数,用于剪枝。
- min_weight_fraction_leaf:叶子节点所有样本权重的最小值。如果小于这个权重,那么和它的兄弟节点一起被剪枝。
- max_features: None,auto考虑所有特征;log2最多考虑 log2N 个特征;sqrt最多考虑平方根个特征;整数表示特征的绝对数;浮点数表示考虑的特征个数的百分比。节省建树代价。
- max_leaf_nodes:树的最大叶子结点数,防止过拟合。
- min_impurity_decrease:结点分裂的纯度减少的最小值,限制是否继续分裂。
- min_samples_leaf:叶子节点的最少样本数,用于剪枝。
- bootstrap:布尔值,是否使用bootstrap采样。false,全部数据参与训练每个棵树。
- oob_score:布尔值,是否采用袋外样本(out-of-bag sample)来评估模型的好坏。与交叉验证类似,可以理解为验证集。当bootstrap为真时,使用。oob_score是单颗决策树返回的在验证集上的R2值。
- n_jobs:并行计算作业数量。
三、Boost方法
(一)基知
提升(Boosting)方法是一种常用的统计学习方法,是一种将弱学习器转换为强学习器的迭代方法。在分类问题中, AdaBoost通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提升分类的性能。
代表性算法AdaBoost,是1995年由Freund和Schapire提出的。
(二)Boosting如何获得多个弱分类器?
- 从原数据集中,抽样样本组成训练集;
- 产生弱学习器,
去除已正确分类的样本,保留误分类样本
; - 从原数据集中,再抽取样本,与上一轮的误分类样本构成新的训练集;
- 重复(2)-(3)步骤,直至获得T个分类器;
- 组合弱学习器,形成强学习器。
四、AdaBoost算法
(一)基知
- 问题1 怎样获得多个弱分类器?
AdaBoost算法提高那些在前一轮弱分类器错误分类的样本的权值,降低那些被正确分类样本的权值。 - 问题2 如何将多个弱分类器组合成一个强分类器?
AdaBoost算法采用加权表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起到较大的作用。
f ( x ) = α 1 f 1 ( x ) + α 2 f 2 ( x ) + . . . . . . + α T f T ( x ) f(x){=}\alpha_{1}f_{1}(x){+}\alpha_{2}f_{2}(x){+}......+\alpha_{\mathrm{T}}f_{\mathrm{T}}(x) f(x)=α1f1(x)+α2f2(x)+......+αTfT(x)
(二)弱分类器的权重
设训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , y i ∈ { − 1 , + 1 } D=\{(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})\}, y_{i}\in\{-1,+1\} D={(x1,y1),(x2,y2),...,(xN,yN)},yi∈{−1,+1},产生T个弱分类器,其中
- 第 j 个分类器 fj 的
错误率
定义为:
ε j = 1 N [ ∑ i = 1 N w i I ( f j ( x i ) ≠ y i ) ] , j = 1 , 2 , . . . , T \varepsilon_{j}=\frac{1}{N}[\sum_{i=1}^{N}w_{i}I(f_{j}(x_{i})\neq y_{i})], j=1,2,...,T εj=N1[i=1∑NwiI(fj(xi)=yi)],j=1,2,...,T
弱分类器的误分类率 εj 是错误分类样本的加权平均,N是样本数,wi是第 i 个样本权重,指示函数 I(•) 等于0或1。wi是归一化后的值。
- 弱分类器 fj 的
重要性(权重)
定义为:
α j = 1 2 l n ( 1 − ε j ε j ) , j = 1 , 2 , . . . , T \alpha_{ j}=\frac{1}{2}\mathbf{ln} (\frac{1-\varepsilon_{ j}}{\varepsilon_{ j}}), j=1,2,...,T αj=21ln(εj1−εj),j=1,2,...,T
若 α j \alpha_{j} αj= 0.5,αj = 0;
若 α j \alpha_{j} αj < 0.5 且 α j \alpha_{j} αj→ 0, α j \alpha_{j} αj是一个很大的正值;
若 α j \alpha_{j} αj > 0.5 且 α j \alpha_{j} αj→ 1, α j \alpha_{j} αj是一个很大的负值;
结论:误差大的分类器,在预测结果表决时,权重小。
(三)样本集的权重
- 初始样本权重设为:
w 1 i = 1 N , i = 1... N w_{_{1i}}=\frac{1}{N},i=1...N w1i=N1,i=1...N - 样本权重更新操作:
Z j = ∑ i = 1 N w j i exp ( − α j y i f j ( x i ) ) Z_{ j}=\sum_{i=1}^{N}w_{ ji}\exp{(-\alpha_{ j}y_{i}f_{ j}(x_{ i}))} Zj=∑i=1Nwjiexp(−αjyifj(xi))
w j + 1 , i = w j i Z j exp ( − α j y i f j ( x i ) ) , i = 1... N , j = 1 , . . . , T ⇒ w j + 1 , i = { exp ( − α j ) Z j w j i , y i = f j ( x i ) exp ( α j ) Z j w j i , y i ≠ f j ( x i ) , α j = 1 2 ln 1 − ε j ε j w_{j+1, i}=\frac{w_{ji}}{Z_{j}}\exp(-\alpha_{j}y_{i}f_{j}(x_{i})),i=1...N ,j=1,...,T\\\Rightarrow w_{j+1, i}=\begin{cases}\frac{\exp(-\alpha_{j})}{Z_{j}}w_{ji}, y_{i}=f_{j}(x_{i})\\\frac{\exp(\alpha_{j})}{Z_{j}}w_{ji}, y_{i}\neq f_{j}(x_{i})\end{cases}, \alpha_{j}=\frac{1}{2}\ln\frac{1-\varepsilon_{j}}{\varepsilon_{j}} wj+1,i=Zjwjiexp(−αjyifj(xi)),i=1...N,j=1,...,T⇒wj+1,i={Zjexp(−αj)wji,yi=fj(xi)Zjexp(αj)wji,yi=fj(xi),αj=21lnεj1−εj
w j + 1 , i w_{j+1,i} wj+1,i是第 i 个样本在 j+1 个学习器中的权重。
误分类的样本的权重在下一次学习中起到了更大的作用,且权重是指数级更新。
(四)弱分类器的组合
强分类器是T个弱分类器 f j f_{j} fj的线性组合,定义为:
C ∗ ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ j = 1 r α j f j ( x ) ) C^*(x)=sign(f(x))=sign(\sum_{j=1}^r\alpha_jf_j(x)) C∗(x)=sign(f(x))=sign(j=1∑rαjfj(x))
x是待分类对象, f j f_{j} fj是第 j 个弱分类器,C* 是分类结果。
对于x,分类结果C*(x)是T个弱分类器分类结果的加权表决。
当f(x)为负数,x被分类为-1。
当f(x)为正数,x被分类为1。
(五)AdaBoost算法
输入:训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , y i ∈ { − 1 , + 1 } D=\{(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})\}, y_{i}\in\{-1,+1\} D={(x1,y1),(x2,y2),...,(xN,yN)},yi∈{−1,+1},T个基学习器。
输出:最终分类器 f ( x ) f(x) f(x)。
- 初始化训练数据的权值分布, D 1 = { w 11 , w 12 , w 1 i , . . . , w 1 N } , w 1 i = 1 / N D_1=\{w_{11} ,w_{12},w_{1i},...,w_{1N}\},w_{1i}=1/N D1={w11,w12,w1i,...,w1N},w1i=1/N
- F o r j = 1...... T \mathrm{For} j=1......\mathrm{T} Forj=1......T
- 使用具有权值分布的训练集Dj进行训练,得到基分类器 f j ( x ) f_{j}\left(x\right) fj(x): X → { − 1 , + 1 } X\to\{-1,+1\} X→{−1,+1}
X→{-1,+1} - 计算 f j ( x ) f_{j}\left(x\right) fj(x)的分类误差率
ε j = 1 N [ ∑ i = 1 N w i I ( f j ( x i ) ≠ y i ) ] \varepsilon_{j}=\frac{1}{N}[\sum_{i=1}^{N}w_{i}I(f_{j}(x_{i})\neq y_{i})] εj=N1[i=1∑NwiI(fj(xi)=yi)] - 计算 f j ( x ) f_{j}\left(x\right) fj(x)的系数
α j = 1 2 l n ( 1 − ε j ε j ) \alpha_{j}=\frac{1}{2}\mathbf{ln}(\frac{1-\varepsilon_{j}}{\varepsilon_{j}}) αj=21ln(εj1−εj) - 更新训练数据集的权重分布
w j + 1 , i = w j i Z e x p ( − α j y i f j ( x i ) ) w_{_{j+1, i}}=\frac{w_{_{ji}}}{Z}\mathbf{e} \mathbf{x} \mathbf{p}(-\alpha_{_j}y_{_i}f_{_j}(x_{_i})) wj+1,i=Zwjiexp(−αjyifj(xi)) - 由基分类器的线性组合,获得强分类器 f ( x ) f\left(x\right) f(x)
(六)实例
初始化权重分布: w 1 i = 0.1 , i = 1 , 2 , … , 10 \mathrm{w_{1i}}=0.1,\mathrm{i}=1,2,\ldots,10 w1i=0.1,i=1,2,…,10
第1轮迭代:
①产生第1个弱分类器 j = 1;在D1数据集上,阈值取2.5,分类误差率最小 ⇒ f 1 ( x ) = { 1 , x < 2.5 − 1 , x > 2.5 \Rightarrow f_1(x)=\begin{cases} 1, x<2.5\\-1, x>2.5\end{cases} ⇒f1(x)={1,x<2.5−1,x>2.5
②f1在D1的上的误差 e 1 = 0.1 × 3 = 0.3 e_1=0.1\times3=0.3 e1=0.1×3=0.3
f = 0.4236 f 1 ( x ) f=0.4236f_1(x) f=0.4236f1(x),对D1预测,3个样本误分类;
③f1的权重 α 1 = 1 2 l n 1 − e 1 e 1 = 0.4236 \alpha_{_1}=\frac{1}{2}\mathbf{ln} \frac{1-e_{_1}}{e_{_1}}= 0.4 2 3 6 α1=21lne11−e1=0.4236
④更新样本权重
D 2 = ( 0.0715 , 0.0715 , 0.0715 , 0.0715 , 0.0715 , 0.1666 , 0.1666 , 0.1666 , 0.0715 ) D_{2}=(0.0715,0.0715,0.0715,0.0715,0.0715,\boxed{0.1666,0.1666,0.1666},0.0715) D2=(0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715)
第2轮迭代:
①在权值分布为D2的数据集上,阈值取8.5,分类误差率最小,产生第2个弱分类器:
⇒ f 2 ( x ) = { 1 , x < 8.5 − 1 , x > 8.5 \Rightarrow f_2( x )=\begin{cases} 1,&x < 8 .5\\-1,&x > 8 .5\end{cases} ⇒f2(x)={1,−1,x<8.5x>8.5
② f2在D2的上的误差: e 2 = 0.0715 × 3 = 0.2143 e_2=0.0715\times3=0.2143 e2=0.0715×3=0.2143
③ f2的权重: α 2 = 1 2 l n 1 − e 2 e 2 = 0.6496 \alpha_{_2}=\frac{1}{2}\mathbf{ln}\frac{1-e_{_2}}{e_{_2}}=0.6496 α2=21lne21−e2=0.6496
f = 0.4236 f 1 ( x ) + 0.6496 f 2 ( x ) f=0.4236f_1(x)+0.6496f_2(x) f=0.4236f1(x)+0.6496f2(x),对D1分类,有3个样本误分类;
④更新样本权重:
D 2 = ( 0.0715 , 0.0715 , 0.0715 , 0.0715 , 0.0715 , 0.0715 , 0.1666 , 0.1666 , 0.1666 , 0.0715 ) D_{2}=(0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,\boxed{0.1666,0.1666,0.1666},0.0715) D2=(0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.0715)
第3轮迭代:
① 在权值分布为D3的数据集上,阈值取5.5,分类误差率最小,产生第3个弱分类器:
⇒ f 3 ( x ) = { 1 , x < 5.5 − 1 , x > 5.5 \Rightarrow f_{3}(x)=\begin{cases} 1, x<5.5\\-1, x>5.5\end{cases} ⇒f3(x)={1,x<5.5−1,x>5.5
② f3在D3的上的误差: e 3 = 0.0455 × 4 = 0.1820 e_3=0.0455\times4=0.1820 e3=0.0455×4=0.1820
③ f3的权重: α 3 = 1 2 l n 1 − e 3 e 3 = 0.7514 \alpha_{_3}=\frac{1}{2}\mathbf{ln} \frac{1-e_{_3}}{e_{_3}}= 0.7 5 1 4 α3=21lne31−e3=0.7514
④更新样本权重: D 4 = ( 0.125 , 0.125 , 0.125 , 0.102 , 0.102 , 0.102 , 0.065 , 0.065 , 0.065 , 0.125 ) D_{4}=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.125) D4=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.125)
f ( x ) = 0.4236 f 1 ( x ) + 0.6496 f 2 ( x ) + 0.7514 f 3 ( x ) f(x)=0.4236f_1(x)+0.6496f_2(x)+0.7514f_3(x) f(x)=0.4236f1(x)+0.6496f2(x)+0.7514f3(x),对D1分类,有0个样本误分类;生成分类器过程终止。
强分类器是 f ( x ) = 0.4236 f 1 ( x ) + 0.6496 f 2 ( x ) + 0.7514 f 3 ( x ) f(x)=0.4236f_1(x)+0.6496f_2(x)+0.7514f_3(x) f(x)=0.4236f1(x)+0.6496f2(x)+0.7514f3(x)
达到最大迭代次数或误分类率小于指定阈值等条件,算法终止。
(六)特点
- 优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整。
- 缺点:对离群点敏感
- 适用数据类型:数值型和标称型
提升方法的直观理解
(七)参数设置
- base_estimator:基学习器。None表示默认学习器是深度为1的决策树分类器。如果指定其他学习器,需给出样本的权重。
- n_estimators:基学习器个数。
- learning_rate:浮点数,学习率,取值[0,1]。弱学习器的权重缩减的系数。若基学习器个数较大,则学习率可适当取大一些的值,否则取小一点的值,以免错过最优解。
- algorithm:SAMME用对样本集分类效果作为弱学习器权重,而SAMME.R使用了对样本集分类的预测概率大小来作为弱学习器权重。SAMME.R迭代一般比SAMME快。
- random_state:随机种子。
另:
1. AdaBoostClassifier的对象
- estimators_:以列表的形式返回所有的分类器。
- classes_:类别标签
- estimator_weights_:每个分类器权重
- estimator_errors_:每个分类器的错分率,与分类器权重相对应。
- feature_importances_:特征重要性,这个参数使用前提是基分类器也支持这个属性。
2. AdaBoostClassifier的方法
- decision_function(X):返回决策函数值(比如svm中的决策距离)
- fit(X,Y):在数据集(X,Y)上训练模型。
- get_parms():获取模型参数
- predict(X):预测数据集X的结果。
- predict_log_proba(X):预测数据集X的对数概率。
- predict_proba(X):预测数据集X的概率值。
- score(X,Y):输出数据集(X,Y)在模型上的准确率。
- staged_decision_function(X):返回每个基分类器的决策函数值
- staged_predict(X):返回每个基分类器的预测数据集X的结果。
.- staged_predict_proba(X):返回每个基分类器的预测数据集X的概率结果。- **staged_score(X, Y)**返回每个基分类器的预测准确率
l loss: { ‘linear’,‘square’,‘exponential’ } \text{loss: }\{\text{‘linear’,‘square',‘exponential’}\} loss: {‘linear’,‘square’,‘exponential’},每次迭代时,采用的损失函数
五、Bagging和Boost的区别
1. 样本选择
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例 在分类器中的权重发生变化,而权值是根据上一轮的分类结果进行调整。
2. 样例权重
Bagging:使用均匀取样,每个样例的权重相等。
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3. 预测模型
Bagging:所有弱学习器的权重相等。
Boosting:每个弱学习器都有相应的权重,对于误差小的学习器会有更大的权重。
4. 并行计算
Bagging:各个弱学习器可以并行
生成。
Boosting:各个弱学习器只能顺序
生成,因为后一个模型参数需要前一轮模型的结
果。
5. 计算效果
Bagging:因为各个训练子集之间是独立
的,所以降低了弱学习器的方差,从而改进了泛化误差。
Boosting:因为弱学习器针对错误样本学习,所以降低了学习器的偏差,从而改进了泛化误差。
六、模型的组合方法
(一)怎样组合多个弱分类器?
- 多专家组合:一种并行结构,所有的弱分类器都给出各自的预测结果,通过“组合”把这些预测结果转换为最终结果。 (eg.投票及其变种、混合专家模型)
- 多级组合:一种串行结构,下一个分类器只在前一个分类器预测不够准的实例上进行训练或检测。( eg. 级联算法)
(二)Averaging方法
-
算术平均: y ^ = 1 n ∑ i = 1 n y ^ i \hat{y}=\frac{1}{n}\sum_{i=1}^{n} \hat{y}_{i} y^=n1∑i=1ny^i
-
加权平均: y ^ = ∑ i = 1 n ( w i y ^ i ) ∑ i = 1 n w i \widehat{y} = \frac{\sum_{i=1}^n(w_i\widehat{y}_i)}{\sum_{i=1}^nw_i} y =∑i=1nwi∑i=1n(wiy i)
-
几何平均: y ^ = ∏ i = 1 n y ^ i n \widehat{y}=\sqrt[n]{\prod_{i=1}^n\widehat{y}_i} y =n∏i=1ny i
- 算术平均的应用:软投票Soft voting,即计算弱分类器预测概率的均值,与概率阈值相比,获得最终的分类结果
- 原因:算术平均对于弱学习器学习结果相近的情况,起到的作用不大。
- 解决:采用排序平均(Ranking averaging)。
(七)Stacking方法
(1)原理
算法通过两层模型结构来实现模型融合。在第一层(Level 0),训练多个基学习器,这些模型可以是同质
的也可以是异质
的。在第二层(Level 1),使用元模型或次学习器将第一层所有模型的预测结果融合起来,得到最终的预测结果。
(2)基础训练过程
Step1:首先,将训练数据集分为两个部分,一部分用于训练基础模型(也称为基学习器或一级学习器)
,另一部分作为验证集
。
Step2:使用这些基础模型对验证集做出预测,生成预测结果。这些基础模型可以是不同的算法,也可以是同一算法的不同参数设置。
Step3:将这些基础模型的预测结果作为新的特征,与原始特征一起输入到最终的模型(也称为元学习器或二级学习器)中进行训练。
(3)交叉训练
交叉训练提高了Stacking融合有效性,信息隔离,避免重复学习造成过拟合
(4)代码示例
另:
- stack_method:选择元学习器的训练数据类型:‘auto’、‘predict_proba’、‘decision_function’、'predict’四个不同取值
- passthrough:特征增强
完