集成学习在数学建模中的应用
集成学习在数学建模中的应用
- 一、集成学习概述
- (一)基知
- (二)相关术语
- (三)集成学习为何能提高性能?
- (四)集成学习方法
- 二、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:特征增强
完
相关文章:

集成学习在数学建模中的应用
集成学习在数学建模中的应用 一、集成学习概述(一)基知(二)相关术语(三)集成学习为何能提高性能?(四)集成学习方法 二、Bagging方法(一)装袋&…...

WebKit 的 Web SQL 数据库:现代浏览器的本地存储解决方案
WebKit 的 Web SQL 数据库:现代浏览器的本地存储解决方案 随着Web应用的不断发展,对本地存储的需求也日益增加。WebKit作为许多现代浏览器的核心引擎,提供了一种强大的本地存储解决方案:Web SQL 数据库。本文将详细探讨Web SQL 数…...

Yolo-World网络模型结构及原理分析(三)——RepVL-PAN
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1. 网络结构2. 特征融合3. 文本引导(Text-guided)4. 图像池化注意力(Image-Pooling Attention)5. 区域文本匹配&…...

代码随想录——一和零(Leetcode474)
题目链接 0-1背包 class Solution {public int findMaxForm(String[] strs, int m, int n) {// 本题m,n为背包两个维度// dp[i][j]:最多右i个0和j个1的strs的最大子集大小int[][] dp new int[m 1][n 1];// 遍历strs中字符串for(String str : strs){int num0 …...

力扣题解(组合总和IV)
377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 思路: 本题实质上是给一些数字,让他们在满足和是targ…...

Postgresql主键自增的方法
Postgresql主键自增的方法 一.方法(一) 使用 serial PRIMARY KEY 插入数据 二.方法(二) 🎈边走、边悟🎈迟早会好 一.方法(一) 使用 serial PRIMARY KEY 建表语句如下…...

【源码阅读】Sony的go breaker熔断器源码探究
文章目录 背景源码分析总结 背景 在微服务时代,服务和服务之间调用、跨部门调用都是很常见的事,但这些调用都存在很多不确定因素,如核心服务A依赖的部门B服务挂掉了,那么A本身的功能将会受到直接的影响,而这些都会影响…...

LeetCode题(66,69,35,88)--《c++》
66.加一 // // Created by wxj05 on 2024/7/20. // //法一 class Solution { public:vector<int> plusOne(vector<int>& digits) {bool carry true; // 进位标志for (int i digits.size() - 1; i > 0 && carry; --i) {digits[i] 1;carry digit…...

来参与“向日葵杯”全国教育仿真技术大赛~
可点击进行了解:“向日葵杯”全国教育仿真技术大赛 (sunmooc.cn) 本次大赛共分为四个赛道:自主命题赛道、教育知识图谱设计赛道、FPGA硬件扑克牌对抗赛道、EasyAR元宇宙空间设计赛道。 参赛对象 : 具有正式学籍的在校研究生,本科…...

SQL每日一题:删除重复电子邮箱
题干 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id 是该表的主键列(具有唯一值的列)。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。 编写解决方案 删除 所有重复…...

3、宠物商店智能合约实战(truffle智能合约项目实战)
3、宠物商店智能合约实战(truffle智能合约项目实战) 1-宠物商店环境搭建、运行2-webjs与宠物逻辑实现3-领养智能合约初始化4-宠物领养实现5-更新宠物领养状态 1-宠物商店环境搭建、运行 https://www.trufflesuite.com/boxes/pet-shop 这个还是不行 或者…...

数据库系列
目录 一、数据库的概念和作用 1.数据库的特点 2.数据模型 二、数据库系统 1.数据库管理系统 2.数据库的基本操作 一、数据库的概念和作用 数据库是指长期存储在计算机内,有组织的、可共享的数据集合。它可视为一个电子化的文件柜,用来存储电子文件…...

极狐GitLab如何启用和配置PlantUML?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...

Shell 构建flutter + Android 生成Apk
具体步骤 #shell 具体实现和说明如下: echo "build_start_apk!" echo "编译此脚本的前提条件如下:" #在Android 项目的主工程下,进入主工程文件夹,创建build-android 文件夹,在其文件夹下有build-android.sh文件,此文件就是整个文章的脚本内容(…...

如何用手机压缩视频?手机压缩视频方法来了
高清视频的大文件大小常常成为分享和存储的障碍,尤其是在数据流量有限或存储空间紧张的情况下。幸运的是,无论是智能手机还是个人电脑,都有多种方法可以帮助我们轻松压缩视频文件,以适应不同的需求和情境。本文将介绍如何在手机上…...

Linux下如何安装配置Elastic Stack日志收集系统
安装和配置Elastic Stack日志收集系统,包括Elasticsearch、Logstash和Kibana,是一个相对复杂的过程。本篇文章将逐步引导您完成整个过程。 安装Java Elasticsearch、Logstash和Kibana都需要Java运行环境。首先,您需要在Linux系统上安装Java…...

【深入C++】map和set的使用
文章目录 C 中的容器分类1. 顺序容器2. 关联容器3. 无序容器4. 容器适配器5. 字符串容器6. 特殊容器 set1.构造函数2.迭代器3.容量相关的成员函数4.修改器类的成员函数5.容器相关操作的成员函数 multiset1.equal_range map1.初始化相关的函数2.迭代器3.容量相关的成员函数4.访问…...

跟代码执行流程,读Megatron源码(二)训练入口pretrain_gpt.py
Megatron-LM默认支持GPT、T5、BERT等多个常见模型的预训练,当下大模型流行,故以pretrain_gpt.py为例做源码的走读。 一. 启动pretrain_gpt.py pretrain_gpt.py为GPT类模型的训练入口,它通过命令行形式被调用,其精确执行路径位于M…...
MATLAB练习题——矩阵(2)
逻辑运算 a [5 0.2 0 -8 -0.7 ],在进行逻辑运算时,a 相当于什么样的逻辑量。 相当于 a[1 1 0 1 1] 角度运算 在 sin(x)运算中,x 是角度还是弧度? 在 sin(x)运算中,x 是弧度,MATLAB 规定所有…...

arm、AArch64、x86、amd64、x86_64 的区别
arm vs AArch64 vs amd64 vs x86_64 vs x86 的区别 当涉及到 CPU 的时候,有许多术语:AArch64、x86_64、amd64、arm 等等。了解它们是什么以及它们之间的区别。 当你查看数据表或软件下载页面时是否被 ARM、AArch64、x86_64、i386 等术语混淆?…...

【SpringBoot】 jasypt配置文件密码加解密
目前我们对yml配置文件中的密码都是明文显示,显然这不安全,有的程序员离职了以后可能会做一些非法骚操作,所以我们最好要做一个加密,只能让领导架构师或者技术经理知道这个密码。所以这节课就需要来实现一下。 我们可以使用jasypt…...

复杂网络的任意子节点的网络最短距离
复杂网络的任意子节点的网络最短距离 题目要求介绍 本文算法测试用的数据集为空手道俱乐部,其中空手道俱乐部的数据集可通过这个链接进行下载•http://vlado.fmf.uni-lj.si/pub/networks/data/Ucinet/UciData.htm#zachary 摘要 本文旨在解决复杂网络中任意子节点…...

(Qt) 文件读写基础
文章目录 🗂️前言📄ref📄访问标记🗃️enum 标记 🗂️Code📄demo📄分点讲解🗃️继承体系🗃️打开/关闭🗃️写🗃️读 🗂️END…...

全产业布局对穿戴甲品牌连锁店的意义
对于美甲行业来说,穿戴甲虽然不是什么新生事物,但也就是近两年才流行开来。面对井喷的市场需求,相应的从业者,不管是品牌连锁店,还是做批发、外贸,美甲周边、亦或是OEM的,大家都忙得不亦乐乎&am…...

git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)
最近闲来无聊,虽然会使用git操作,但是 git fetch 和 git pull 的区别,git merge 和 git rebase的区别只是一知半解,稍微研究一下; git fetch 和 git pull 的区别 git fetch git fetch 是将远程仓库中的改动拉到本地…...

展厅中控系统有哪些优势呢
格芬科技的展厅中控系统具有多方面的优势,主要体现在以下几个方面: 一、高度集成与灵活控制 全终端网络可编程:格芬科技的展厅中控系统采用全终端网络可编程技术,能够实现对展厅内各种设备的集中控制和管理,包括电脑…...

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别
一、概念 阻塞赋值:阻塞赋值的赋值号用“”表示,对应的是串行执行。 对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句…...

动态特征转换的艺术:在Mojo模型中实现自定义变换的策略
动态特征转换的艺术:在Mojo模型中实现自定义变换的策略 在机器学习中,特征转换是数据预处理的关键步骤,它直接影响模型的性能和结果的准确性。Mojo模型,作为一种高效的模型部署形式,允许在不同环境中运行模型并进行预…...

如何让Python爬虫在遇到异常时继续运行
概述 在数据收集和数据挖掘中,爬虫技术是一项关键技能。然而,爬虫在运行过程中不可避免地会遇到各种异常情况,如网络超时、目标网站变化、数据格式不一致等。如果不加以处理,这些异常可能会导致爬虫程序中断,影响数据…...

手把手带你搭建Snort入侵检测系统
在当今数字化社会,网络安全问题日益突出。为了有效防范网络攻击,部署入侵检测系统(IDS)是必要的防护措施。Snort作为一款功能强大的开源IDS工具,被广泛应用于各种网络环境中。本文将手把手教您如何从零开始实现Snort入…...

企业注册公司/南京百度快速排名优化
这是这两天刚出的一篇文章(cvpr),在DGfont里面改进而来的。 Abstract 内容与样式的分离是实现少镜头字体生成的有效途径。它允许将源域中的字体图像的样式转换为目标域中由一些参考图像定义的样式。但是,使用代表性字体提取的内容特征可能不是最佳的。基于此,我们提出了一…...

贴吧网站建设/济南网络优化网站
C:\Users\this is user name\AppData\Roaming\Scooter Software\Beyond Compare 4 删除这个目录下所有文件(这个方法目前我试过可以的) 一劳永逸,修改注册表 1)在搜索栏中输入 regedit ,打开注册表 2) 删除项目:计算机\HKEY_CURRENT_USE…...

绵阳的网站建设公司哪家好/平台推广怎么做
一:J2SE 面向对象-封装、继承、多态 内存的分析 递归 集合类、泛型、自动打包与解包、Annotation IO 多线程、线程同步 TCP/UDP AWT、事件模型、匿名类 正则表达式 反射机制 2:数据库(Oracle或者MySQL) SQL…...

做网站的费用属于什么费用/互联网推广广告
1.在很多时候我们在网站上应用的时候都会用到nginx,由于我们是java开发者,不可避免的是我们需要在我们的tomcat的工程中应用到nginx,这里的应用可以是请求转发,负载均衡,反向代理,配置虚拟站点等。2.当然很…...

幼儿园主题网络图设计思路/搜索引擎优化的主要特征
Python通过语言的简洁性,让我们以人类思考的方式来编写代码,新手更容易上手,老鸟更爱不释手。 要写出Pythonic(优雅的,地道的,整洁的)代码,还要平时多观察那些大牛代码,这里明哥收集了一些比较常见的Pythonic写法,帮助你养成写优秀代码的习惯。 01.变量交换 交换两…...

做网站多少钱google/搜索引擎推广方案
在vue中methods互相调用的方法 转载于:https://www.cnblogs.com/macT/p/10212878.html...