当前位置: 首页 > news >正文

集成学习在数学建模中的应用

集成学习在数学建模中的应用

  • 一、集成学习概述
    • (一)基知
    • (二)相关术语
    • (三)集成学习为何能提高性能?
    • (四)集成学习方法
  • 二、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=1rEx[εt(X)2]e(f)t=1rEx[ε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[(yy)2],预测效果弱于均值预测,组合预测结果后,集成学习器的预测误差更大
    在这里插入图片描述

集成好于单个分类器的条件:

  1. 弱分类器独立(难满足)
  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=1325C25i(0.35)i(10.35)25i=0.06

误分类率降低!

(四)集成学习方法

在这里插入图片描述
待解决的问题:

  1. 怎样获得不同的弱分类器?
    Bagging 和 Boosting 方法
  2. 如何将多个弱分类器组合成一个强分类器?
    投票法、加权平均、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=1cp(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)=1i=1cp(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=1VDDv 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/49

Step2:
重复采样,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如何获得多个弱分类器?

  1. 从原数据集中,抽样样本组成训练集;
  2. 产生弱学习器,去除已正确分类的样本,保留误分类样本
  3. 从原数据集中,再抽取样本,与上一轮的误分类样本构成新的训练集;
  4. 重复(2)-(3)步骤,直至获得T个分类器;
  5. 组合弱学习器,形成强学习器。
    在这里插入图片描述

四、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=1NwiI(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,...,Twj+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=1rα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)

  1. 初始化训练数据的权值分布, 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
  2. F o r j = 1...... T \mathrm{For} j=1......\mathrm{T} Forj=1......T
  3. 使用具有权值分布的训练集Dj进行训练,得到基分类器 f j ( x ) f_{j}\left(x\right) fj(x) X → { − 1 , + 1 } X\to\{-1,+1\} X{1,+1}
    X→{-1,+1}
  4. 计算 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=1NwiI(fj(xi)=yi)]
  5. 计算 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)
  6. 更新训练数据集的权重分布
    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))
  7. 由基分类器的线性组合,获得强分类器 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.51,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=21lne11e1=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=21lne21e2=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.51,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=21lne31e3=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方法

  1. 算术平均: y ^ = 1 n ∑ i = 1 n y ^ i \hat{y}=\frac{1}{n}\sum_{i=1}^{n} \hat{y}_{i} y^=n1i=1ny^i

  2. 加权平均: 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=1nwii=1n(wiy i)

  3. 几何平均: y ^ = ∏ i = 1 n y ^ i n \widehat{y}=\sqrt[n]{\prod_{i=1}^n\widehat{y}_i} y =ni=1ny i

  • 算术平均的应用:软投票Soft voting,即计算弱分类器预测概率的均值,与概率阈值相比,获得最终的分类结果
  • 原因:算术平均对于弱学习器学习结果相近的情况,起到的作用不大。
  • 解决:采用排序平均(Ranking averaging)。

例:已知弱学习器预测的回归值分别为:0.35000056, 0.35000002,0.35000098,0.35000111,排序平均后的预测结果是?
![解答:先排序:
0.35000002(1), 0.35000056(2),0.35000098(3), 0.35000111(4)
再对排序归一化或标准化:
0.35000002(0.1), 0.35000056(0.2),0.35000098(0.3), 0.35000111(0.4)
最后,求平均:
0.3500000×0.1+0.35000056×0.2+0.35000098×0.3+0.35000111×0.4](https://i-blog.csdnimg.cn/direct/f3532a1e56fd4a2e955244a3c7132d6d.png)
在这里插入图片描述

(七)Stacking方法

(1)原理

算法通过两层模型结构来实现模型融合。在第一层(Level 0),训练多个基学习器,这些模型可以是同质的也可以是异质的。在第二层(Level 1),使用元模型或次学习器将第一层所有模型的预测结果融合起来,得到最终的预测结果。
在这里插入图片描述

(2)基础训练过程

Step1:首先,将训练数据集分为两个部分,一部分用于训练基础模型(也称为基学习器或一级学习器),另一部分作为验证集
Step2:使用这些基础模型对验证集做出预测,生成预测结果。这些基础模型可以是不同的算法,也可以是同一算法的不同参数设置。
Step3:将这些基础模型的预测结果作为新的特征,与原始特征一起输入到最终的模型(也称为元学习器或二级学习器)中进行训练

(3)交叉训练

交叉训练提高了Stacking融合有效性,信息隔离,避免重复学习造成过拟合
在这里插入图片描述

(4)代码示例

在这里插入图片描述
在这里插入图片描述

另:

  • stack_method:选择元学习器的训练数据类型:‘auto’、‘predict_proba’、‘decision_function’、'predict’四个不同取值
  • passthrough:特征增强

在这里插入图片描述


相关文章:

集成学习在数学建模中的应用

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

WebKit 的 Web SQL 数据库:现代浏览器的本地存储解决方案

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

Yolo-World网络模型结构及原理分析(三)——RepVL-PAN

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. 网络结构2. 特征融合3. 文本引导&#xff08;Text-guided&#xff09;4. 图像池化注意力&#xff08;Image-Pooling Attention&#xff09;5. 区域文本匹配&…...

代码随想录——一和零(Leetcode474)

题目链接 0-1背包 class Solution {public int findMaxForm(String[] strs, int m, int n) {// 本题m&#xff0c;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 &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 思路&#xff1a; 本题实质上是给一些数字&#xff0c;让他们在满足和是targ…...

Postgresql主键自增的方法

Postgresql主键自增的方法 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 插入数据 二.方法&#xff08;二&#xff09; &#x1f388;边走、边悟&#x1f388;迟早会好 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 建表语句如下&#xf…...

【源码阅读】Sony的go breaker熔断器源码探究

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

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…...

来参与“向日葵杯”全国教育仿真技术大赛~

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

SQL每日一题:删除重复电子邮箱

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

3、宠物商店智能合约实战(truffle智能合约项目实战)

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

数据库系列

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

极狐GitLab如何启用和配置PlantUML?

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

Shell 构建flutter + Android 生成Apk

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

如何用手机压缩视频?手机压缩视频方法来了

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

Linux下如何安装配置Elastic Stack日志收集系统

安装和配置Elastic Stack日志收集系统&#xff0c;包括Elasticsearch、Logstash和Kibana&#xff0c;是一个相对复杂的过程。本篇文章将逐步引导您完成整个过程。 安装Java Elasticsearch、Logstash和Kibana都需要Java运行环境。首先&#xff0c;您需要在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等多个常见模型的预训练&#xff0c;当下大模型流行&#xff0c;故以pretrain_gpt.py为例做源码的走读。 一. 启动pretrain_gpt.py pretrain_gpt.py为GPT类模型的训练入口&#xff0c;它通过命令行形式被调用&#xff0c;其精确执行路径位于M…...

MATLAB练习题——矩阵(2)

逻辑运算 a [5 0.2 0 -8 -0.7 ]&#xff0c;在进行逻辑运算时&#xff0c;a 相当于什么样的逻辑量。 相当于 a[1 1 0 1 1] 角度运算 在 sin(x)运算中&#xff0c;x 是角度还是弧度&#xff1f; 在 sin(x)运算中&#xff0c;x 是弧度&#xff0c;MATLAB 规定所有…...

arm、AArch64、x86、amd64、x86_64 的区别

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

【SpringBoot】 jasypt配置文件密码加解密

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

复杂网络的任意子节点的网络最短距离

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

(Qt) 文件读写基础

文章目录 &#x1f5c2;️前言&#x1f4c4;ref&#x1f4c4;访问标记&#x1f5c3;️enum 标记 &#x1f5c2;️Code&#x1f4c4;demo&#x1f4c4;分点讲解&#x1f5c3;️继承体系&#x1f5c3;️打开/关闭&#x1f5c3;️写&#x1f5c3;️读 &#x1f5c2;️END&#x1f…...

全产业布局对穿戴甲品牌连锁店的意义

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

git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)

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

展厅中控系统有哪些优势呢

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

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别

一、概念 阻塞赋值&#xff1a;阻塞赋值的赋值号用“”表示&#xff0c;对应的是串行执行。 对应的电路结构往往与触发沿没有关系&#xff0c;只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作&#xff0c;即计算赋值号右边的语句并更新赋值号左边的语句…...

动态特征转换的艺术:在Mojo模型中实现自定义变换的策略

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

如何让Python爬虫在遇到异常时继续运行

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

手把手带你搭建Snort入侵检测系统

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

小程序内嵌uniapp页面跳转回小程序指定页面方式

使用微信小程序提供的Api&#xff1a;wx.miniProgram.navigateTo 在小程序中嵌套uniapp的H5页面&#xff0c;并使用wx.miniProgram.navigateTo进行页面跳转&#xff0c;需要确保满足以下条件&#xff1a; 你的小程序必须是通过uniapp构建的&#xff0c;并且支持小程序嵌套。 你…...

基于 Three.js 的 3D 模型加载优化

作者&#xff1a;来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目&#xff0c;从用户打开页面到最终模型的渲染需要经过多个流程&#xff0c;加载的时间也会比普通的H5项目要更长一些&#xff0c;从而造成大量的用户流失。为了提升首屏加载的转化率&#xff0c;需要尽可能…...

Jlink下载与适配keil ccs theia教程 用jlink代替ti自己的下载仿真器

用jlink代替ti自己的下载仿真器&#xff0c;然后你去买立创的m0g3507才19.9包赚160 安装 J-Link 软件包 J-Link 软件包 v7.88i 或更高版本支持 MSPM0。 从 Segger 网站下载安装程序 按照安装程序说明操作 安装程序将自动请求更新 IAR 或 Keil&#xff08;如果已安装&#x…...

C# 进制之间的转换(二进制,八进制,十进制,十六进制)

常用的方法是&#xff1a;Convert.ToString(byte value, int toBase)&#xff0c; 并且有多个重载方法&#xff0c; value的类型可以为short&#xff0c;int 等&#xff0c;但必须是整数且不能为负数&#xff0c; 一般默认为十进制 toBase: 返回值的基数&#xff0c;必须是 2、…...

Linux 基础开发工具 : Vim编辑器

Vim 是 Linux 和其他类 Unix 系统上广泛使用的文本编辑器之一。它基于更早的 vi 编辑器&#xff0c;但添加了许多增强功能和扩展。Vim 是“Vi IMproved”的缩写&#xff0c;意为“改进的 Vi”&#xff0c;我们常使用Vim编辑器编写c/c代码。 ps&#xff1a;该篇介绍均为最基础介…...

Delphi 11.2 配置Android SDK 环境

打开 Delphi 11 点击 Tools–Options… 然后点击 Deployment–SDK Manager–Add… 这里如果配置64位就选 Android 64-bit&#xff0c;如果配置32位就选 Android 32-bit 点击 Select an SDK version–Add New… 有警告图标的就是有问题的项&#xff0c;需要手动更新一下&#xf…...

Spring Boot 学习(10)——固基(Idea 配置 git 访问 gitee)

几转眼就过了两个月&#xff0c;其实也没有闲着&#xff0c;学也学了&#xff0c;只是繁杂事多&#xff0c;学的不如以前多&#xff0c;也没有做过笔记了。 以前做开发因条件受限&#xff0c;没有什么 git &#xff0c;也没有 gitee。现在出来混要跟上形势才行&#xff0c;学习…...

11 个接口性能优化技巧(上)【送源码】

接口性能优化对于从事后端开发的同学来说&#xff0c;肯定再熟悉不过了&#xff0c;因为它是一个跟开发语言无关的公共问题。 该问题说简单也简单&#xff0c;说复杂也复杂。 有时候&#xff0c;只需加个索引就能解决问题。 有时候&#xff0c;需要做代码重构。 有时候&…...

AIoTedge 智能边缘物联网平台

AIoTedge智能边缘物联网平台是一个创新的边云协同架构&#xff0c;它为智能设备和系统提供了强大的数据处理和智能决策能力。这个平台的核心优势在于其边云协同架构设计&#xff0c;它优化了数据处理速度&#xff0c;提高了系统的可靠性和灵活性&#xff0c;适用于多种场景&…...

深入理解CSS基础【代码审计实战指南】

文章目录 为什么需要cssCSS语法CSS的组成css注释&#xff1a; 快速入门示例&#xff1a;常用样式字体颜色和边框颜色介绍颜色示例&#xff1a;边框边框的宽度与高度 字体样式背景样式文本居中 字体颜色和边框颜色介绍颜色示例&#xff1a;边框边框的宽度与高度 字体样式背景样式…...

html改写vue日志

本人最近学了vue&#xff0c;想着练手的方法就是改写之前在公司开发的小系统前端&#xff0c;将前端的AJAXJSThymeleaf改为axiosvue。 改写html 将<html>中的<head>和<body>结构移除&#xff0c;将css部分移入<style>&#xff0c; 重新定义了全局的&…...

Transformer-Bert---散装知识点---mlm,nsp

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点&#xff0c;有时间就会整理收录&#xff0c;希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同&#xff0c;bert是使用大量无标签的数据进行预训…...

基于术语词典干预的机器翻译挑战赛笔记 Task3 #Datawhale AI 夏令营

书接上回&#xff0c;上回在这捏&#xff1a; 基于术语词典干预的机器翻译挑战赛笔记Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读223次&#xff0c;点赞10次&#xff0c;收藏5次。基于术语词典干预的机器翻译挑战赛笔记Task2https://blog.csdn.net/qq_23311271/article/…...

定制QCustomPlot 带有ListView的QCustomPlot 全网唯一份

定制QCustomPlot 带有ListView的QCustomPlot 文章目录 定制QCustomPlot 带有ListView的QCustomPlot摘要需求描述实现关键字: Qt、 QCustomPlot、 魔改、 定制、 控件 摘要 先上效果,是你想要的,再看下面的分解,顺便点赞搜藏一下;不是直接右上角。 QCustomPlot是一款…...

Fast Planner规划算法(一)—— Fast Planner前端

本系列文章用于回顾学习记录Fast-Planner规划算法的相关内容&#xff0c;【本系列博客写于2023年9月&#xff0c;共包含四篇文章&#xff0c;现在进行补发第一篇&#xff0c;其余几篇文章将在近期补发】 一、Fast Planner前端 Fast Planner的轨迹规划部分一共分为三个模块&…...

问题记录-SpringBoot 2.7.2 整合 Swagger 报错

详细报错如下 报错背景&#xff0c;我将springboot从2.3.3升级到了2.7.2&#xff0c;报了下面的错误&#xff1a; org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPo…...

【视觉SLAM】 十四讲ch5习题

1.*寻找一个相机&#xff08;你手机或笔记本的摄像头即可&#xff09;&#xff0c;标定它的内参。你可能会用到标定板&#xff0c;或者自己打印一张标定用的棋盘格。 参考我之前写过的这篇博客&#xff1a;【OpenCV】 相机标定 calibrateCamera Code来源是《学习OpenCV3》18.…...

Webpack基础学习-Day01

Webpack基础学习-Day01 1.1 webpack 是什么 webpack 是一种前端资源构建工具&#xff0c;一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析&#xff0c;打包生成…...

如何防止热插拔烧坏单片机

大家都知道一般USB接口属于热插拔&#xff0c;实际任意带电进行连接的操作都可以属于热插拔。我们前面讲过芯片烧坏的原理&#xff0c;那么热插拔就是导致芯片烧坏的一个主要原因之一。 在电子产品的整个装配过程、以及产品使用过程经常会面临接口热插拔或者类似热插拔的过程。…...

JQuery+HTML+JavaScript:实现地图位置选取和地址模糊查询

本文详细讲解了如何使用 JQueryHTMLJavaScript 实现移动端页面中的地图位置选取功能。本文逐步展示了如何构建基本的地图页面&#xff0c;如何通过点击地图获取经纬度和地理信息&#xff0c;以及如何实现模糊查询地址并在地图上标注。最后&#xff0c;提供了完整的代码示例&…...