机器学习理论基础—集成学习(1)

机器学习理论基础—集成学习

个体与集成

集成学习通过构建并结合多个学习器来完成学习任务,有时也称为多分类系统等。

分类: 根据集成学习中的个体学习器的不同可以分为同质集成(集成的学习器相同例如全部是决策树),和异质集成(集成的学习器包括多种,例如决策树神经网络SVM等)。

  • 同质集成中的学习器称为:基学习器
  • 异质集成中的学习器称为:组件学习器(或个体学习器
  • 弱学习器指的是泛化性能略优于随机猜想的学习器(例如二分类问题中精度略高于50%

集成举例

样本一,样本二,样本三的label值都为1时(共三种情况)

首先集成学习的结果通过投票法产生,即少数服从多数的原则
在这里插入图片描述

  1. 第一种情况:每个分类器都有66.6%的精度值经过集成学习之后提高了性能
  2. 第二种情况:每个分类器都有33.3%的精度值经过集成学习之后结果变差了
  3. 第三种情况:三个分类器没有差别集成的结果保持不变

总结: 集成学习器应该满足的两个基本条件是好而不同的。

集成个体学习器的收敛性保证

在这里插入图片描述
参数说明:

  • F(x)集成了多个学习器的集成学习最后结果
  • f(x)样本x的真实标签
  • T个体学习器的数量
  • &个体学习器的误差

解读:k个学习器成功预测样本x的概率

两个基本结论:

  1. 收敛速率随着个体学习器数量T呈指数下降
  2. ∈ =0.5的个体集成器对收敛没有作用

引入推导过程Hoeffing不等式(霍夫丁不等式
在这里插入图片描述

分类

根据个体学习器的生成方式的不同分为两大类

  1. 存在强依赖关系的(Boosting
  2. 不存在强的依赖关系的(随机森林)
2.2 算法原理
2.2.1 核心思想

需要解决的问题:

①在每一轮训练中,如何对训练样本的权值分布进行调整?

②如何确定各个基学习器“加权”结合的权重?

AdaBoost 的解决思路:

通过 分类器权重公式 来确定 各个基学习器的权重;通过 样本分布更新公式 来确定 各轮训练中的样本分布。

①在确定各个基学习器的权重时:

加大“分类误差率”小的弱分类器的权值,使其在表决中发挥较大作用;减小“分类误差率”大的弱分类器的权值,使其在表决中发挥较小作用。(直观而言:比较“菜”的学习器,权重应该小一些;比较“好”的学习器,权重应该大一些。)

②在确定各轮训练中的样本分布时:

提高那些被前一轮弱分类器错误分类样本的权值,降低那些被正确分类的样本的权值。(例如,假设我们在第 K 次得到的弱学习器,在某个样本上的分类结果出现错误,那么我们自然希望:第 K+1 次产生的弱学习器应该更加关注这个样本,使其尽可能地划分正确。)

2.2.2 分类情景介绍

下面我们从公式的角度推导 AdaBoost 的算法原理。为了防止公式混乱,我们给公式添加与《机器学习(周志华)》相同的编号;没有编号的公式是我们的推导过程。

AdaBoost 算法的训练目标是:基于“加性模型”,最小化指数损失函数

注意,我们在这里讨论的是二分类问题,其中训练样本集的 y i ∈ { − 1 , + 1 } y_i\in\{-1,+1\} yi{1,+1} f f f 是真实函数。对于样本 x x x 来说,真实值 f ( x ) ∈ { − 1 , + 1 } f(x)\in\{-1,+1\} f(x){1,+1},每个基学习器的预测值 h i ( x ) ∈ { − 1 , + 1 } h_i(x)\in\{-1,+1\} hi(x){1,+1},假定基分类器的错误率为 ϵ \epsilon ϵ,即对每个基分类器 h i h_i hi 有:
P ( h i ( x ) ≠ f ( x ) ) = ϵ (8.1) P(h_i(x)\neq f(x))=\epsilon \tag{8.1} P(hi(x)=f(x))=ϵ(8.1)
假设集成通过简单投票法结合 T T T 个基分类器,若有超过半数的基分类器正确,则集成分类就正确;集成分类的结果 F 简单投票 ( x ) F_{简单投票}(x) F简单投票(x) 为:
F 简单投票 ( x ) = s i g n ( ∑ i = 1 T h i ( x ) ) (8.2) F_{简单投票}(x)=\mathrm{sign}\Big(\sum\limits_{i=1}^{T}h_i(x)\Big) \tag{8.2} F简单投票(x)=sign(i=1Thi(x))(8.2)
“加性模型”(additive model),即基学习器的线性组合 H ( x ) H(x) H(x)
H ( x ) = ∑ t = 1 T α t h t ( x ) (8.4) H(x)=\sum\limits_{t=1}^T\alpha_{t}h_{t}(x) \tag{8.4} H(x)=t=1Tαtht(x)(8.4)
其中, α t \alpha_t αt 表示基分类器的权重,因为 AdaBoost 并不使用简单投票法,而是“加权表决法”,即让基学习器具有不同的权值:
F ( x ) = s i g n ( H ( x ) ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) F(x)=\mathrm{sign}(H(x))=\mathrm{sign}\Big(\sum\limits_{t=1}^T\alpha_{t}h_{t}(x)\Big) F(x)=sign(H(x))=sign(t=1Tαtht(x))
**“指数损失函数”**的定义为:
l e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] (8.5) \mathscr{l}_{exp}(H\mid D)=\mathbb{E}_{x\sim D}[e^{-f(x)H(x)}]\tag{8.5} lexp(HD)=ExD[ef(x)H(x)](8.5)
其中, x ∼ D x\sim D xD 表示概率分布 D ( x ) D(x) D(x) E \mathbb{E} E 表示期望。

例如,下面的表格就列出了一个分布 D ( x ) D(x) D(x)

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
权值分布 D D D0.10.050.050.20.10.10.10.10.10.1

对于这里出现的“指数损失函数”,我们直观地理解一下使用它的合理性,随后在 2.2.2 节中说明使用它的正确性。

先考虑指数损失函数 e − f ( x ) H ( x ) e^{-f(x)H(x)} ef(x)H(x) 的含义: f f f 为真实函数,对于样本 x x x 来说, f ( x ) ∈ { − 1 , + 1 } f(x)\in\{-1,+1\} f(x){1,+1},只能取 -1 和 +1,而 H ( x ) H(x) H(x) 是一个实数,表示集成学习器的预测结果。当 H ( x ) H(x) H(x) 的符号与 f ( x ) f(x) f(x) 一致时, f ( x ) H ( x ) > 0 f(x)H(x)\gt 0 f(x)H(x)>0,因此, e − f ( x ) H ( x ) = e − ∣ H ( x ) ∣ < 1 e^{-f(x)H(x)}=e^{-|H(x)|}\lt 1 ef(x)H(x)=eH(x)<1,且 ∣ H ( x ) ∣ |H(x)| H(x) 越大指数损失函数 e − f ( x ) H ( x ) e^{-f(x)H(x)} ef(x)H(x) 越小,(这很合理:此时 ∣ H ( x ) ∣ |H(x)| H(x) 越大意味着分类器本身对预测结果的信心越大,损失应该越小;若 ∣ H ( x ) ∣ |H(x)| H(x) 在零附近,虽然预测正确,但表示分类器本身对预测结果的信心很小,损失应该越大);当 H ( x ) H(x) H(x) 的符号与 f ( x ) f(x) f(x) 不一致时, f ( x ) H ( x ) < 0 f(x)H(x)\lt 0 f(x)H(x)<0,因此, e − f ( x ) H ( x ) = e ∣ H ( x ) ∣ > 1 e^{-f(x)H(x)}=e^{|H(x)|}\gt 1 ef(x)H(x)=eH(x)>1,且 ∣ H ( x ) ∣ |H(x)| H(x) 越大,损失函数越大,(这很合理:因为此时 ∣ H ( x ) ∣ |H(x)| H(x) 越大意味着分类器本身对预测结果的信心越大,但预测结果是错的,因此损失应该越大;若 ∣ H ( x ) ∣ |H(x)| H(x) 在零附近,虽然预测错误,但表示分类器本身对预测结果的信心很小,虽然错了,损失应该很小)。

同时,我们不难得到两个工具公式(注意 f ( x ) f(x) f(x) 是真实函数,也就是上表中 x x x 所对应的 y y y 的值):
E x ∼ D [ f ( x ) ] = ∑ x ∈ D D ( x ) f ( x ) (工具公式1) \mathbb{E}_{x\sim D}[f(x)]=\sum\limits_{x\in D}D(x)f(x)\tag{工具公式1} ExD[f(x)]=xDD(x)f(x)(工具公式1)

∑ i = 1 ∣ D ∣ D ( x i ) I ( f ( x i ) = 1 ) = P ( f ( x i ) = 1 ∣ x i ) (工具公式2) \sum\limits_{i=1}^{|D|}D(x_i)\mathbb{I}(f(x_i)=1)=P(f(x_i)=1\mid x_i)\tag{工具公式2} i=1DD(xi)I(f(xi)=1)=P(f(xi)=1xi)(工具公式2)

这里我们引入“指示函数”的概念, I ( ⋅ ) = { 1 ; ⋅  为真 0 ; ⋅  为假 \mathbb{I}(\cdot)=\begin{cases}{1};\quad \cdot\ 为真\\{0};\quad \cdot\ 为假\end{cases} I()={1; 为真0; 为假

2.2.3 使用“指数损失函数”的正确性

下面,我们从数学角度说明使用“指数损失函数”的正确性。

若集成学习器 H ( x ) H(x) H(x) 能令指数损失函数最小化,则考虑式(8.5)对 H ( x ) H(x) H(x) 的偏导:
∂ l e x p ( H ∣ D ) ∂ H ( x ) = − e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) (8.6) \dfrac{\partial\mathscr{l}_{exp}(H\mid D)}{\partial H(x)}=-e^{-H(x)}P(f(x)=1\mid x)+e^{H(x)}P(f(x)=-1\mid x)\tag{8.6} H(x)lexp(HD)=eH(x)P(f(x)=1x)+eH(x)P(f(x)=1x)(8.6)

式(8.6)的具体推导过程为:

将工具公式1代入式(8.5):
l e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] = ∑ x ∈ D D ( x ) e − f ( x ) H ( x ) \mathscr{l}_{exp}(H\mid D)=\mathbb{E}_{x\sim D}[e^{-f(x)H(x)}]=\sum\limits_{x\in D}D(x)e^{-f(x)H(x)} lexp(HD)=ExD[ef(x)H(x)]=xDD(x)ef(x)H(x)
由于工具公式2:
∑ i = 1 ∣ D ∣ D ( x i ) I ( f ( x i ) = 1 ) = P ( f ( x i ) = 1 ∣ x i ) \sum\limits_{i=1}^{|D|}D(x_i)\mathbb{I}(f(x_i)=1)=P(f(x_i)=1\mid x_i) i=1DD(xi)I(f(xi)=1)=P(f(xi)=1xi)
又注意到 f ( x i ) ∈ { − 1 , + 1 } f(x_i)\in\{-1,+1\} f(xi){1,+1},所以:
∂ l e x p ( H ∣ D ) ∂ H ( x ) = ∑ i = 1 ∣ D ∣ D ( x i ) ( − e − H ( x i ) I ( f ( x i ) = 1 ) + e H ( x i ) I ( f ( x i ) = − 1 ) ) 分类讨论 ( 两种情形 ) = − e − H ( x i ) P ( f ( x i ) = 1 ∣ x i ) + e H ( x i ) P ( f ( x i ) = − 1 ∣ x i ) 由工具公式 2 得到 \begin{aligned} \dfrac{\partial \mathscr{l}_{exp}(H\mid D)}{\partial H(x)}&=\sum\limits_{i=1}^{|D|}D(x_i)\Big(-e^{-H(x_i)}\mathbb{I}(f(x_i)=1)+e^{H(x_i)}\mathbb{I}(f(x_i)=-1)\Big)&分类讨论(两种情形)\\ &=-e^{-H(x_i)}P(f(x_i)=1\mid x_i)+e^{H(x_i)}P(f(x_i)=-1\mid x_i)&由工具公式2得到 \end{aligned} H(x)lexp(HD)=i=1DD(xi)(eH(xi)I(f(xi)=1)+eH(xi)I(f(xi)=1))=eH(xi)P(f(xi)=1xi)+eH(xi)P(f(xi)=1xi)分类讨论(两种情形)由工具公式2得到
式(8.6)的具体推导过程至此结束。

令式(8.6)为零,进行求解:
− e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) = 0 -e^{-H(x)}P(f(x)=1\mid x)+e^{H(x)}P(f(x)=-1\mid x)=0 eH(x)P(f(x)=1x)+eH(x)P(f(x)=1x)=0

H ( x ) + l n ( P ( f ( x ) = − 1 ∣ x ) ) = − H ( x ) + l n ( P ( f ( x ) = 1 ∣ x ) ) H(x)+\mathrm{ln}(P(f(x)=-1\mid x))=-H(x)+\mathrm{ln}(P(f(x)=1\mid x)) H(x)+ln(P(f(x)=1x))=H(x)+ln(P(f(x)=1x))

可解得:
H ( x ) = 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) (8.7) H(x)=\dfrac{1}{2}\mathrm{ln}\dfrac{P(f(x)=1\mid x)}{P(f(x)=-1\mid x)}\tag{8.7} H(x)=21lnP(f(x)=1x)P(f(x)=1x)(8.7)
因此,有:
s i g n ( H ( x ) ) = s i g n ( 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) ) = { 1 , P ( f ( x ) = 1 ∣ x ) > P ( f ( x ) = − 1 ∣ x ) − 1 , P ( f ( x ) = 1 ∣ x ) < P ( f ( x ) = − 1 ∣ x ) 这三行表达的是一个意思 = a r g m a x y ∈ { − 1 , 1 } P ( f ( x ) = y ∣ x ) (8.8) \begin{aligned} \mathrm{sign}(H(x))&=\mathrm{sign}\Big(\dfrac{1}{2}\mathrm{ln}\dfrac{P(f(x)=1\mid x)}{P(f(x)=-1\mid x)}\Big)\\ &=\begin{cases}{1},&{P(f(x)=1\mid x)\gt P(f(x)=-1\mid x)}\\{-1},&{P(f(x)=1\mid x)\lt P(f(x)=-1\mid x)}\end{cases}&这三行表达的是一个意思\\ &=\mathop {\mathrm{argmax}}\limits_{y\in\{-1,1\}}P(f(x)=y\mid x) \end{aligned} \tag{8.8} sign(H(x))=sign(21lnP(f(x)=1x)P(f(x)=1x))={1,1,P(f(x)=1x)>P(f(x)=1x)P(f(x)=1x)<P(f(x)=1x)=y{1,1}argmaxP(f(x)=yx)这三行表达的是一个意思(8.8)
这意味着 s i g n ( H ( x ) ) \mathrm{sign}(H(x)) sign(H(x)) 达到了贝叶斯最优错误率(即对于每个样本 x x x 都选择后验概率最大的类别)。换言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本 0/1 损失函数的一致的(consistent)替代损失函数。由于这个替代损失函数有更好的数学性质,例如它是连续可微函数,因此我们用它替代 0/1 损失函数作为优化目标

至此,我们知道了使用“指数损失函数”的原因及其正确性。

2.2.4 分类器权重公式

下面,我们将从指数损失函数入手,推导 AdaBoost 算法的分类器权重公式。

在 AdaBoost 算法中,第一个基分类器 h 1 h_1 h1 是通过直接将基学习器算法用于初始数据分布而得;此后迭代地生成 h t h_t ht α t \alpha_{t} αt,当基分类器 h t h_t ht 基于分布 D t D_t Dt 产生后,该基分类器的权重 α t \alpha_{t} αt 应使得 α t h t \alpha_{t}h_{t} αtht 最小化指数损失函数。

此时的指数损失函数:
l e x p ( α t h t ∣ D t ) = E x ∼ D t [ e − f ( x ) α t h t ( x ) ] 由定义式 ( 8.5 ) 得到 = E x ∼ D t [ e − α t I ( f ( x ) = h t ( x ) ) + e α t I ( f ( x ) ≠ h t ( x ) ) ] 分类讨论 ( 两种情形 ) = ∑ x ∈ D t D t ( x ) [ e − α t I ( f ( x ) = h t ( x ) ) + e α t I ( f ( x ) ≠ h t ( x ) ) ] 由工具公式 1 得到 = e − α t P x ∼ D t ( f ( x ) = h t ( x ) ) + e α t P x ∼ D t ( f ( x ) ≠ h t ( x ) ) 由工具公式 2 得到 = e − α t ( 1 − ϵ t ) + e α t ϵ t 错误率的定义 (8.9) \begin{aligned} \mathscr{l}_{exp}(\alpha_{t}h_{t}\mid D_{t})&=\mathbb{E}_{x\sim D_{t}}[e^{-f(x)\alpha_{t}h_t(x)}]&由定义式(8.5)得到\\ &=\mathbb{E}_{x\sim D_t}[e^{-\alpha_{t}}\mathbb{I}(f(x)=h_t(x))+e^{\alpha_t}\mathbb{I}(f(x)\neq h_t(x))]&分类讨论(两种情形)\\ &=\sum\limits_{x\in D_{t}}D_{t}(x)[e^{-\alpha_{t}}\mathbb{I}(f(x)=h_t(x))+e^{\alpha_t}\mathbb{I}(f(x)\neq h_t(x))]&由工具公式1得到\\ &=e^{-\alpha_{t}}P_{x\sim D_t}(f(x)=h_t(x))+e^{\alpha_{t}}P_{x\sim D_t}(f(x)\neq h_t(x))&由工具公式2得到\\ &=e^{-\alpha_t}(1-\epsilon_{t})+e^{\alpha_t}\epsilon_{t}&错误率的定义 \end{aligned}\tag{8.9} lexp(αthtDt)=ExDt[ef(x)αtht(x)]=ExDt[eαtI(f(x)=ht(x))+eαtI(f(x)=ht(x))]=xDtDt(x)[eαtI(f(x)=ht(x))+eαtI(f(x)=ht(x))]=eαtPxDt(f(x)=ht(x))+eαtPxDt(f(x)=ht(x))=eαt(1ϵt)+eαtϵt由定义式(8.5)得到分类讨论(两种情形)由工具公式1得到由工具公式2得到错误率的定义(8.9)
其中,错误率 ϵ t = P x ∼ D t ( h t ( x ) ≠ f ( x ) ) \epsilon_{t}=P_{x\sim D_t}(h_t(x)\neq f(x)) ϵt=PxDt(ht(x)=f(x))

考虑指数损失函数的导数:
∂ l e x p ( α t h t ∣ D t ) ∂ α t = − e − α t ( 1 − ϵ t ) + e α t ϵ t 由式 ( 8.9 ) 对 α t 求偏导 (8.10) \begin{aligned} &\dfrac{\partial\mathscr{l}_{exp}(\alpha_{t}h_{t}\mid D_{t})}{\partial\alpha_t}=-e^{-\alpha_t}(1-\epsilon_t)+e^{\alpha_t}\epsilon_{t} &由式(8.9)对\alpha_{t}求偏导 \end{aligned}\tag{8.10} αtlexp(αthtDt)=eαt(1ϵt)+eαtϵt由式(8.9)αt求偏导(8.10)
令式(8.10)为零,进行求解:
− e − α t ( 1 − ϵ t ) + e α t ϵ t = 0 令式 ( 8.10 ) 为零 α t + l n ϵ t = − α t + l n ( 1 − ϵ t ) 移项后取对数 \begin{aligned} &-e^{-\alpha_{t}}(1-\epsilon_{t})+e^{\alpha_{t}}\epsilon_{t}=0&令式(8.10)为零\\ \\ &\alpha_{t}+\mathrm{ln}\epsilon_{t}=-\alpha_{t}+\mathrm{ln}(1-\epsilon_{t})&移项后取对数 \end{aligned} eαt(1ϵt)+eαtϵt=0αt+lnϵt=αt+ln(1ϵt)令式(8.10)为零移项后取对数

可解得:
α t = 1 2 l n ( 1 − ϵ t ϵ t ) (8.11) \alpha_{t}=\dfrac{1}{2}\mathrm{ln}\Big(\dfrac{1-\epsilon_{t}}{\epsilon_{t}}\Big)\tag{8.11} αt=21ln(ϵt1ϵt)(8.11)
至此,我们求得了 AdaBoost 算法的分类器权重公式。

2.2.5 样本分布更新公式

下面,我们推导 AdaBoost 算法的样本分布更新公式。

AdaBoost 算法在获得 H t − 1 H_{t-1} Ht1 之后样本分布将进行调整,使下一轮的基学习器 h t h_t ht 能纠正 H t − 1 H_{t-1} Ht1 的一些错误。

理想的 h t h_t ht 能纠正 H t − 1 H_{t-1} Ht1 的全部错误,又因为 H ( x ) = H t − 1 ( x ) + α t h t ( x ) H(x)=H_{t-1}(x)+\alpha_{t}h_t(x) H(x)=Ht1(x)+αtht(x)

因此,我们希望最小化 l e x p ( H t − 1 + α t h t ∣ D ) \mathscr{l}_{exp}(H_{t-1}+\alpha_{t}h_{t}\mid D) lexp(Ht1+αthtD),可以简化为,最小化:
l e x p ( H t − 1 + h t ∣ D ) = E x ∼ D [ e − f ( x ) ( H t − 1 ( x ) + h t ( x ) ) ] = E x ∼ D [ e − f ( x ) H t − 1 ( x ) e − f ( x ) h t ( x ) ] (8.12) \begin{aligned} \mathscr{l}_{exp}(H_{t-1}+h_t\mid D)&=\mathbb{E}_{x\sim D}[e^{-f(x)(H_{t-1}(x)+h_t(x))}]\\ &=\mathbb{E}_{x\sim D}[e^{-f(x)H_{t-1}(x)}e^{-f(x)h_t(x)}] \end{aligned}\tag{8.12} lexp(Ht1+htD)=ExD[ef(x)(Ht1(x)+ht(x))]=ExD[ef(x)Ht1(x)ef(x)ht(x)](8.12)
对式(8.12)使用 e − f ( x ) h t ( x ) e^{-f(x)h_t(x)} ef(x)ht(x) 的泰勒展式近似:

使用到的泰勒展开式: e x ∼ 1 + x + 1 2 x 2 + o ( x 2 ) e^x\sim1+x+\dfrac{1}{2}x^{2}+o(x^2) ex1+x+21x2+o(x2)

可得:
l e x p ( H t − 1 + h t ∣ D ) ≃ E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h t ( x ) + f 2 ( x ) h t 2 ( x ) 2 ) ] \mathscr{l}_{exp}(H_{t-1}+h_t\mid D)\simeq\mathbb{E}_{x\sim D}\Big[e^{-f(x)H_{t-1}(x)}\Big(1-f(x)h_t(x)+\dfrac{f^2(x)h_t^2(x)}{2}\Big)\Big] lexp(Ht1+htD)ExD[ef(x)Ht1(x)(1f(x)ht(x)+2f2(x)ht2(x))]
又因为 f 2 ( x ) = h t 2 ( x ) = 1 f^2(x)=h_t^2(x)=1 f2(x)=ht2(x)=1,可得:
l e x p ( H t − 1 + h t ∣ D ) = E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h t ( x ) + 1 2 ) ] (8.13) \mathscr{l}_{exp}(H_{t-1}+h_t\mid D)=\mathbb{E}_{x\sim D}\Big[e^{-f(x)H_{t-1}(x)}\Big(1-f(x)h_t(x)+\dfrac{1}{2}\Big)\Big]\tag{8.13} lexp(Ht1+htD)=ExD[ef(x)Ht1(x)(1f(x)ht(x)+21)](8.13)
因为理想的基学习器 h t ( x ) h_t(x) ht(x) 要使得指数损失函数最小化,所以:
h t ( x ) = a r g m i n h l e x p ( H t − 1 + h ∣ D ) = a r g m i n h E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h ( x ) + 1 2 ) ] 由式 ( 8.13 ) 代入得到 = a r g m i n h E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( − f ( x ) h ( x ) ) ] 常数 1 + 1 2 不影响结果 = a r g m a x h E x ∼ D [ e − f ( x ) H t − 1 ( x ) f ( x ) h ( x ) ] 去负号 a r g m i n 变 a r g m a x = a r g m a x h E x ∼ D [ e − f ( x ) H t − 1 ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] f ( x ) h ( x ) ] 新加入的常数不影响结果 (8.14) \begin{aligned} h_t(x)&=\mathop {\mathrm{argmin}}\limits_{h}\mathscr{l}_{exp}(H_{t-1}+h\mid D)&\quad\\ &=\mathop {\mathrm{argmin}}\limits_{h}\mathbb{E}_{x\sim D}\Big[e^{-f(x)H_{t-1}(x)}\Big(1-f(x)h(x)+\dfrac{1}{2}\Big)\Big]&由式(8.13)代入得到\\ &=\mathop {\mathrm{argmin}}\limits_{h}\mathbb{E}_{x\sim D}\Big[e^{-f(x)H_{t-1}(x)}\Big(-f(x)h(x)\Big)\Big]&常数1+\dfrac{1}{2}不影响结果\\ &=\mathop {\mathrm{argmax}}\limits_{h}\mathbb{E}_{x\sim D}\Big[e^{-f(x)H_{t-1}(x)}f(x)h(x)\Big]&去负号\mathrm{argmin}变\mathrm{argmax}\\ &=\mathop {\mathrm{argmax}}\limits_{h}\mathbb{E}_{x\sim D}\Big[\dfrac{e^{-f(x)H_{t-1}(x)}}{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t-1}(x)}]}f(x)h(x)\Big]&新加入的常数不影响结果 \end{aligned}\tag{8.14} ht(x)=hargminlexp(Ht1+hD)=hargminExD[ef(x)Ht1(x)(1f(x)h(x)+21)]=hargminExD[ef(x)Ht1(x)(f(x)h(x))]=hargmaxExD[ef(x)Ht1(x)f(x)h(x)]=hargmaxExD[ExD[ef(x)Ht1(x)]ef(x)Ht1(x)f(x)h(x)]由式(8.13)代入得到常数1+21不影响结果去负号argminargmax新加入的常数不影响结果(8.14)
注意,式(8.14)中的 E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] \mathbb{E}_{x\sim D}[e^{-f(x)H_{t-1}(x)}] ExD[ef(x)Ht1(x)] 是一个常数,之所以添加此常数,是为了构造出下面的 D t D_t Dt 分布。

D t D_t Dt 表示一个分布:
D t ( x ) = D ( x ) e − f ( x ) H t − 1 ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] (8.15) D_t(x)=\dfrac{D(x)e^{-f(x)H_{t-1}(x)}}{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t-1}(x)}]}\tag{8.15} Dt(x)=ExD[ef(x)Ht1(x)]D(x)ef(x)Ht1(x)(8.15)
根据数学期望的定义,再将式(8.15)代入式(8.14),则理想的基学习器 h t ( x ) h_t(x) ht(x)
h t ( x ) = a r g m a x h E x ∼ D [ e − f ( x ) H t − 1 ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] f ( x ) h ( x ) ] 式 ( 8.14 ) = a r g m a x h ∑ i = 1 ∣ D ∣ D ( x i ) [ e − f ( x i ) H t − 1 ( x i ) f ( x i ) h ( x i ) E x ∼ D [ e − f ( x i ) H t − 1 ( x i ) ] ] 数学期望的定义 = a r g m a x h ∑ i = 1 ∣ D ∣ D t ( x i ) f ( x i ) h ( x i ) 由式 ( 8.15 ) 代入得到 = a r g m a x h E x ∼ D t [ f ( x ) h ( x ) ] (8.16) \begin{aligned} h_t(x)&=\mathop {\mathrm{argmax}}\limits_{h}\mathbb{E}_{x\sim D}\Big[\dfrac{e^{-f(x)H_{t-1}(x)}}{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t-1}(x)}]}f(x)h(x)\Big]&式(8.14)\\ &=\mathop {\mathrm{argmax}}\limits_{h}\sum\limits_{i=1}^{|D|}D(x_i)\Big[\dfrac{e^{-f(x_i)H_{t-1}(x_i)}f(x_i)h(x_i)}{\mathbb{E}_{x\sim D}[e^{-f(x_i)H_{t-1}(x_i)}]}\Big]&数学期望的定义\\ &=\mathop {\mathrm{argmax}}\limits_{h}\sum_{i=1}^{|D|}D_t(x_i)f(x_i)h(x_i)&由式(8.15)代入得到\\ &=\mathop {\mathrm{argmax}}\limits_{h}\mathbb{E}_{x\sim D_{t}}[f(x)h(x)] \end{aligned}\tag{8.16} ht(x)=hargmaxExD[ExD[ef(x)Ht1(x)]ef(x)Ht1(x)f(x)h(x)]=hargmaxi=1DD(xi)[ExD[ef(xi)Ht1(xi)]ef(xi)Ht1(xi)f(xi)h(xi)]=hargmaxi=1DDt(xi)f(xi)h(xi)=hargmaxExDt[f(x)h(x)](8.14)数学期望的定义由式(8.15)代入得到(8.16)
由于 f ( x ) , h ( x ) ∈ { − 1 , + 1 } f(x),h(x)\in\{-1,+1\} f(x),h(x){1,+1},有:
f ( x ) h ( x ) = 1 − 2 I ( f ( x ) ≠ h ( x ) ) (8.17) f(x)h(x)=1-2\mathbb{I}(f(x)\neq h(x))\tag{8.17} f(x)h(x)=12I(f(x)=h(x))(8.17)
则理想的基学习器 h t ( x ) h_t(x) ht(x)
h t ( x ) = a r g m a x h E x ∼ D t [ f ( x ) h ( x ) ] 式 ( 8.16 ) = a r g m a x h E x ∼ D t [ 1 − 2 I ( f ( x ) ≠ h ( x ) ) ] 由式 ( 8.17 ) 代入得到 = a r g m i n h E x ∼ D t [ I ( f ( x ) ≠ h ( x ) ) ] 去掉常数和负号 (8.18) \begin{aligned} h_t(x)&=\mathop {\mathrm{argmax}}\limits_{h}\mathbb{E}_{x\sim D_{t}}[f(x)h(x)]&式(8.16)\\ &=\mathop {\mathrm{argmax}}\limits_{h}\mathbb{E}_{x\sim D_{t}}[1-2\mathbb{I}(f(x)\neq h(x))]&由式(8.17)代入得到\\ &=\mathop {\mathrm{argmin}}\limits_{h}\mathbb{E}_{x\sim D_{t}}[\mathbb{I}(f(x)\neq h(x))]&去掉常数和负号 \end{aligned}\tag{8.18} ht(x)=hargmaxExDt[f(x)h(x)]=hargmaxExDt[12I(f(x)=h(x))]=hargminExDt[I(f(x)=h(x))](8.16)由式(8.17)代入得到去掉常数和负号(8.18)
由此可见,理想的 h t ( x ) h_t(x) ht(x) 将在分布 D t D_t Dt最小化分类误差

因此,弱分类器将基于分布 D t D_t Dt 进行训练,且针对 D t D_t Dt 的分类误差应小于 0.5,这在一定程度上类似“残差逼近”的思想。

考虑到 D t D_t Dt D t + 1 D_{t+1} Dt+1 的关系,有:
D t + 1 ( x ) = D ( x ) e − f ( x ) H t ( x ) E x ∼ D [ e − f ( x ) H t ( x ) ] 由式 ( 8.15 ) 可得 = D ( x ) e − f ( x ) H t − 1 ( x ) e − f ( x ) α t h t ( x ) E x ∼ D [ e − f ( x ) H t ( x ) ] 将 H t ( x ) 展开得到 = D t ( x ) e − f ( x ) α t h t ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] E x ∼ D [ e − f ( x ) H t ( x ) ] 将式 ( 8.15 ) 代入,构造 D t ( x ) (8.19) \begin{aligned} D_{t+1}(x)&=\dfrac{D(x)e^{-f(x)H_{t}(x)}}{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t}(x)}]}&由式(8.15)可得\\ &=\dfrac{D(x)e^{-f(x)H_{t-1}(x)}e^{-f(x)\alpha_{t}h_{t}(x)}}{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t}(x)}]}&将H_t(x)展开得到\\ &=D_t(x)e^{-f(x)\alpha_{t}h_{t}(x)}\dfrac{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t-1}(x)}]}{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t}(x)}]}&将式(8.15)代入,构造D_t(x) \end{aligned}\tag{8.19} Dt+1(x)=ExD[ef(x)Ht(x)]D(x)ef(x)Ht(x)=ExD[ef(x)Ht(x)]D(x)ef(x)Ht1(x)ef(x)αtht(x)=Dt(x)ef(x)αtht(x)ExD[ef(x)Ht(x)]ExD[ef(x)Ht1(x)]由式(8.15)可得Ht(x)展开得到将式(8.15)代入,构造Dt(x)(8.19)
至此,我们求得了 AdaBoost 算法的样本分布更新公式。

于是,由式(8.11)和(8.19)可见,我们从基于加性模型最小化指数损失函数的角度,推导出了 AdaBoost 算法。

2.3 算法流程
2.3.1 算法描述

AdaBoost 算法流程如下:
输入 :   训练集  D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } ; 基学习算法  L ; 训练轮数  T . 过程 :   1 : D 1 ( x ) = 1 m . 2 : f o r   t = 1 , 2 , … , T   d o 3 : h t = L ( D , D t ) ; 4 : ϵ t = P x ∼ D t ( h t ( x ) ≠ f ( x ) ) ; 5 : i f   ϵ > 0.5   t h e n   b r e a k 6 : α t = 1 2 l n ( 1 − ϵ t ϵ t ) ; 7 : D t + 1 ( x ) = D t ( x ) Z t × { e − α t , i f   h t ( x ) = f ( x ) e α t , i f   h t ( x ) ≠ f ( x ) = D t ( x ) e − α t f ( x ) h t ( x ) Z t 8 : e n d   f o r 输出 :   F ( x ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) \begin{aligned} 输入:\ &训练集\ D=\{(x_1,y_1),(x_2,y_2),…,(x_m,y_m)\};\\ &基学习算法\ \mathfrak{L};\\ &训练轮数\ T.\\ 过程:\ &\\ &1:D_1(x)=\dfrac{1}{m}.\\ &2:\mathbf{for}\ t=1,2,…,T\ \mathbf{do}\\ &3:\qquad h_t=\mathfrak{L}(D,D_t);\\ &4:\qquad \epsilon_t=P_{x\sim D_t}(h_t(x)\neq f(x));\\ &5:\qquad \mathbf{if}\ \epsilon\gt 0.5\ \mathbf{then\ break}\\ &6:\qquad \alpha_{t}=\dfrac{1}{2}ln\Big(\dfrac{1-\epsilon_{t}}{\epsilon_t}\Big);\\ &7:\qquad D_{t+1}(x)=\dfrac{D_t(x)}{Z_t}\times\begin{cases}{e^{-\alpha_{t}}}, &\mathrm{if}\ h_t(x)=f(x)\\{e^{\alpha_{t}}},&\mathrm{if}\ h_t(x)\neq f(x)\end{cases}=\dfrac{D_t(x)e^{-\alpha_{t}f(x)h_t(x)}}{Z_t}\\ &8:\mathbf{end\ for}\\ 输出:\ &F(x)=\mathrm{sign}\Big(\sum\limits_{t=1}^{T}\alpha_{t}h_{t}(x)\Big) \end{aligned} 输入: 过程: 输出: 训练集 D={(x1,y1),(x2,y2),,(xm,ym)};基学习算法 L;训练轮数 T.1:D1(x)=m1.2:for t=1,2,,T do3:ht=L(D,Dt);4:ϵt=PxDt(ht(x)=f(x));5:if ϵ>0.5 then break6:αt=21ln(ϵt1ϵt);7:Dt+1(x)=ZtDt(x)×{eαt,eαt,if ht(x)=f(x)if ht(x)=f(x)=ZtDt(x)eαtf(x)ht(x)8:end forF(x)=sign(t=1Tαtht(x))
其中, Z t Z_t Zt 是规范化因子,它使得 D t + 1 D_{t+1} Dt+1 是一个分布:
Z t = ∑ i = 1 N w t i e − α t f ( x i ) h t ( x i ) Z_t=\sum\limits_{i=1}^{N}w_{ti}e^{-\alpha_{t}f(x_i)h_{t}(x_{i})} Zt=i=1Nwtieαtf(xi)ht(xi)
我们知道, D t + 1 D_{t+1} Dt+1 表示的是样本权值的分布;因此,要想使得 D t + 1 D_{t+1} Dt+1 是一个分布,应当使得 D t + 1 D_{t+1} Dt+1 中的各样本权值之和为 1。为了做到这点,我们让 D t + 1 D_{t+1} Dt+1 中的每一个规范化前的样本权值 w t i e − α t f ( x i ) h t ( x i ) w_{ti}e^{-\alpha_{t}f(x_i)h_{t}(x_{i})} wtieαtf(xi)ht(xi) 都除以样本权值的总和 ∑ i = 1 N w t i e − α t f ( x i ) h t ( x i ) \sum\limits_{i=1}^{N}w_{ti}e^{-\alpha_{t}f(x_i)h_{t}(x_{i})} i=1Nwtieαtf(xi)ht(xi)(这个总和也就是规范化因子 Z t Z_t Zt),从而让我们得到的各样本权值之和为 1。(直观来说,规范化后的样本权值,即为规范化前的样本权值 占 总样本权值的比例,这个比例的总和当然为 1。)

所以我们也能理解:在式(8.19)中,由于项 E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] E x ∼ D [ e − f ( x ) H t ( x ) ] \dfrac{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t-1}(x)}]}{\mathbb{E}_{x\sim D}[e^{-f(x)H_{t}(x)}]} ExD[ef(x)Ht(x)]ExD[ef(x)Ht1(x)] 是一个常数,所有样本权值同时乘以常数,不会改变规范化前的样本权值 占 总样本权值的比例;因此无论是否有它,规范化之后的结果都是一样的,所以我们不去计算这个常数的值。

2.3.2 算法各步骤含义

AdaBoost 算法各步骤的含义如下(一一对应):
输入 :   训练集  D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } ; 基学习算法  L ; 训练轮数  T . 过程 :   1 : 初始化样本权值分布 . 2 : 循环进行  T  轮训练 3 : 基于分布  D t  从数据集  D  中训练出分类器  h t ; 4 : 估计  h t  的误差 ; 5 : 检查当前基分类器是否比随机猜测好,如果条件不满足,当前基学习器即被抛弃,学习过程停止 6 : 确定分类器  h t  的权重 ; 7 : 更新样本分布,其中  Z t  是规范化因子,以确保  D t + 1  是一个分布 8 : 结束循环 输出 :   分类结果 \begin{aligned} 输入:\ &训练集\ D=\{(x_1,y_1),(x_2,y_2),…,(x_m,y_m)\};\\ &基学习算法\ \mathfrak{L};\\ &训练轮数\ T.\\ 过程:\ &\\ &1:初始化样本权值分布.\\ &2:循环进行\ T\ 轮训练\\ &3:\qquad 基于分布\ D_t\ 从数据集\ D\ 中训练出分类器\ h_t;\\ &4:\qquad 估计\ h_t\ 的误差;\\ &5:\qquad 检查当前基分类器是否比随机猜测好,如果条件不满足,当前基学习器即被抛弃,学习过程停止\\ &6:\qquad 确定分类器\ h_t\ 的权重;\\ &7:\qquad 更新样本分布,其中\ Z_t\ 是规范化因子,以确保\ D_{t+1}\ 是一个分布\\ &8:结束循环\\ 输出:\ &分类结果 \end{aligned} 输入: 过程: 输出: 训练集 D={(x1,y1),(x2,y2),,(xm,ym)};基学习算法 L;训练轮数 T.1:初始化样本权值分布.2:循环进行 T 轮训练3:基于分布 Dt 从数据集 D 中训练出分类器 ht;4:估计 ht 的误差;5:检查当前基分类器是否比随机猜测好,如果条件不满足,当前基学习器即被抛弃,学习过程停止6:确定分类器 ht 的权重;7:更新样本分布,其中 Zt 是规范化因子,以确保 Dt+1 是一个分布8:结束循环分类结果

2.4 具体算例
2.4.1 给定数据集与基学习算法

假设给出如下表所示的训练数据。假设弱分类器由 x < v x\lt v x<v x > v x\gt v x>v 产生,其阈值 v v v 使该分类器在训练数据集上的分类误差率最低。试用 AdaBoost 算法学习一个强分类器。

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
2.4.2 算法步骤1-2

解:

我们用 t t t 表示当前训练的轮数, i i i 表示实例的序号, m m m 表示训练集实例的总数量。

在此例中, t = 1 , 2 , … , T t=1,2,…,T t=1,2,,T i = 1 , 2 , … , 10 i=1,2,…,10 i=1,2,,10 m = 10 m=10 m=10

1:初始化样本权值分布 D 1 ( x ) D_1(x) D1(x)
D 1 ( x ) = ( w 11 , w 12 , … , w 110 ) = 1 m D_1(x)=(w_{11},w_{12},…,w_{110})=\dfrac{1}{m} D1(x)=(w11,w12,,w110)=m1

w 1 i = 0.1 , i = 1 , 2 , … , 10 w_{1i}=0.1,\quad i=1,2,…,10 w1i=0.1,i=1,2,,10

这里, w t i w_{ti} wti 表示第 t t t 轮中第 i i i 个实例的权值,并且 ∑ i = 1 N w t i = 1 \sum\limits_{i=1}^{N}w_{ti}=1 i=1Nwti=1

2:开始循环进行 T T T 轮训练:

其中,下面的序号 a a a 表示第 1 轮训练, b b b 表示第 2 轮训练,以此类推。

2.4.3 算法步骤3a-7a(第 1 轮)

3a:基于分布 D t = D 1 D_t=D_1 Dt=D1 从数据集 D D D 中训练出分类器 h t = h 1 h_t=h_1 ht=h1
h 1 = L ( D , D 1 ) h_1=\mathfrak{L}(D,D_1) h1=L(D,D1)
在权值分布为 D 1 D_1 D1 的训练数据上,阈值 v v v 取 2.5 时分类误差率最低,故基本分类器为:
h 1 ( x ) = { 1 , x < 2.5 − 1 , x > 2.5 h_1(x)=\begin{cases}{1},&x\lt 2.5\\{-1},&x\gt 2.5\end{cases} h1(x)={1,1,x<2.5x>2.5
4a:估计 h 1 h_1 h1 的误差:

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
权值分布 D 1 D_1 D10.10.10.10.10.10.10.10.10.10.1
基分类器结果 h 1 ( x ) h_1(x) h1(x)111-1-1-1-1-1-1-1
正误×××

h 1 ( x ) h_1(x) h1(x) 的在训练数据集上的误差率为:
ϵ 1 = P x ∼ D 1 ( h 1 ( x ) ≠ f ( x ) ) = 0.1 + 0.1 + 0.1 = 0.3 \epsilon_1=P_{x\sim D_1}(h_1(x)\neq f(x))=0.1+0.1+0.1=0.3 ϵ1=PxD1(h1(x)=f(x))=0.1+0.1+0.1=0.3
务必注意:模型的误差等于误判样本的权重值之和(可以看作弱学习器在数据集上的加权错误率),而非误判样本数占总样本数的比例。

5a:检查当前基分类器是否比随机猜测好:
ϵ 1 = 0.3 ≤ 0.5 \epsilon_{1}=0.3\leq 0.5 ϵ1=0.30.5
基分类器 h 1 h_1 h1 比随机猜测好,循环继续进行。

6a:确定分类器 h t = h 1 h_t=h_1 ht=h1 的权重 α 1 \alpha_1 α1
α 1 = 1 2 l n ( 1 − ϵ 1 ϵ 1 ) = 1 2 l n ( 1 − 0.3 0.3 ) = 0.4236 \alpha_{1}=\dfrac{1}{2}ln\Big(\dfrac{1-\epsilon_{1}}{\epsilon_1}\Big)=\dfrac{1}{2}ln\Big(\dfrac{1-0.3}{0.3}\Big)=0.4236 α1=21ln(ϵ11ϵ1)=21ln(0.310.3)=0.4236
7a:更新样本的权值分布:
D 2 = ( w 21 , … , w 2 i , … , w 210 ) = D 1 ( x ) e − α 1 f ( x ) h 1 ( x ) Z 1 D_2=(w_{21},…,w_{2i},…,w_{210})=\dfrac{D_1(x)e^{-\alpha_{1}f(x)h_1(x)}}{Z_1} D2=(w21,,w2i,,w210)=Z1D1(x)eα1f(x)h1(x)

w 2 i = w 1 i Z 1 e − α 1 f ( x i ) h 1 ( x i ) , i = 1 , 2 , … , 10 w_{2i}=\dfrac{w_{1i}}{Z_1}e^{-\alpha_{1}f(x_i)h_1(x_i)},\quad i=1,2,…,10 w2i=Z1w1ieα1f(xi)h1(xi),i=1,2,,10

且已求得,基分类器权重 α 1 = 0.4236 \alpha_1=0.4236 α1=0.4236

可求,规范化因子(为了使样本的概率分布之和为1):
Z t = ∑ i = 1 N w t i e − α t f ( x i ) h t ( x i ) Z_t=\sum\limits_{i=1}^{N}w_{ti}e^{-\alpha_{t}f(x_i)h_{t}(x_{i})} Zt=i=1Nwtieαtf(xi)ht(xi)

Z 1 = ∑ i = 1 N w 1 i e − α 1 f ( x i ) h 1 ( x i ) = 0.1 e − 0.4236 + 0.1 e − 0.4236 + 0.1 e − 0.4236 + 0.1 e − 0.4236 + 0.1 e − 0.4236 + 0.1 e − 0.4236 + 0.1 e 0.4236 + 0.1 e 0.4236 + 0.1 e 0.4236 + 0.1 e − 0.4236 = 0.1 e − 0.4236 × 7 + 0.1 e 0.4236 × 3 简化计算 = 0.06546857 × 7 + 0.15274505 × 3 = 0.91651514 \begin{aligned} Z_1&=\sum\limits_{i=1}^{N}w_{1i}e^{-\alpha_{1}f(x_i)h_{1}(x_{i})}\\ &=0.1e^{-0.4236}+0.1e^{-0.4236}+0.1e^{-0.4236}+0.1e^{-0.4236}+0.1e^{-0.4236}+0.1e^{-0.4236}+0.1e^{0.4236}+0.1e^{0.4236}+0.1e^{0.4236}+0.1e^{-0.4236}\\ &=0.1e^{-0.4236}\times 7+0.1e^{0.4236}\times 3\qquad 简化计算\\ &=0.06546857\times 7+0.15274505\times 3\\ &=0.91651514 \end{aligned} Z1=i=1Nw1ieα1f(xi)h1(xi)=0.1e0.4236+0.1e0.4236+0.1e0.4236+0.1e0.4236+0.1e0.4236+0.1e0.4236+0.1e0.4236+0.1e0.4236+0.1e0.4236+0.1e0.4236=0.1e0.4236×7+0.1e0.4236×3简化计算=0.06546857×7+0.15274505×3=0.91651514

可求得:

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
权值分布 D 1 = ( w 1 i ) D_1=(w_{1i}) D1=(w1i)0.10.10.10.10.10.10.10.10.10.1
基分类器结果 h 1 ( x ) h_1(x) h1(x)111-1-1-1-1-1-1-1
分子 [ 1 ] ^{[1]} [1] w 1 i e − α 1 f ( x i ) h 1 ( x i ) w_{1i}e^{-\alpha_{1}f(x_i)h_1(x_i)} w1ieα1f(xi)h1(xi)0.065468570.065468570.065468570.065468570.065468570.065468570.152745050.152745050.152745050.06546857
权值分布 [ 2 ] ^{[2]} [2] D 2 = ( w 2 i ) D_2=(w_{2i}) D2=(w2i)0.071430.071430.071430.071430.071430.071430.166660.166660.166660.07143

[1]这里的分子计算: 0.1 e − 0.4236 = 0.06546857 0.1e^{-0.4236}=0.06546857 0.1e0.4236=0.06546857 0.1 e 0.4236 = 0.15274505 0.1e^{0.4236}=0.15274505 0.1e0.4236=0.15274505

[2]可以观察到:第 1 轮中基学习器分类错误的样本 x=6,7,8,在 D 2 D_2 D2 中的权重变大了,而其他样本权重降低了。

此时的集成分类器:
H 1 ( x ) = 0.4236 h 1 ( x ) H_1(x)=0.4236h_1(x) H1(x)=0.4236h1(x)
分类结果 F ( x ) = s i g n ( 0.4236 h 1 ( x ) ) F(x)=\mathrm{sign}\Big(0.4236h_1(x)\Big) F(x)=sign(0.4236h1(x)) 在训练数据集上有 3 个误分类点。

2.4.4 算法步骤3b-7b(第 2 轮)

3b:基于分布 D t = D 2 D_t=D_2 Dt=D2 从数据集 D D D 中训练出分类器 h t = h 2 h_t=h_2 ht=h2
h 2 = L ( D , D 2 ) h_2=\mathfrak{L}(D,D_2) h2=L(D,D2)
在权值分布为 D 2 D_2 D2 的训练数据上,阈值 v v v 取 8.5 时分类误差率最低,故基本分类器为:
h 2 ( x ) = { 1 , x < 8.5 − 1 , x > 8.5 h_2(x)=\begin{cases}{1},&x\lt 8.5\\{-1},&x\gt 8.5\end{cases} h2(x)={1,1,x<8.5x>8.5
4b:估计 h 2 h_2 h2 的误差:

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
权值分布 D 2 D_2 D20.071430.071430.071430.071430.071430.071430.166660.166660.166660.07143
基分类器结果 h 2 ( x ) h_2(x) h2(x)111111111-1
正误×××

h 2 ( x ) h_2(x) h2(x) 的在训练数据集上的误差率为:
ϵ 2 = P x ∼ D 2 ( h 2 ( x ) ≠ f ( x ) ) = 0.07143 + 0.07143 + 0.07143 = 0.2143 \epsilon_2=P_{x\sim D_2}(h_2(x)\neq f(x))=0.07143+0.07143+0.07143=0.2143 ϵ2=PxD2(h2(x)=f(x))=0.07143+0.07143+0.07143=0.2143
5b:检查当前基分类器是否比随机猜测好:
ϵ 2 = 0.2143 ≤ 0.5 \epsilon_{2}=0.2143\leq 0.5 ϵ2=0.21430.5
基分类器 h 2 h_2 h2 比随机猜测好,循环继续进行。

6b:确定分类器 h t = h 2 h_t=h_2 ht=h2 的权重 α 2 \alpha_2 α2
α 2 = 1 2 l n ( 1 − ϵ 2 ϵ 2 ) = 1 2 l n ( 1 − 0.2143 0.2143 ) = 0.6496 \alpha_{2}=\dfrac{1}{2}ln\Big(\dfrac{1-\epsilon_{2}}{\epsilon_2}\Big)=\dfrac{1}{2}ln\Big(\dfrac{1-0.2143}{0.2143}\Big)=0.6496 α2=21ln(ϵ21ϵ2)=21ln(0.214310.2143)=0.6496
7b:更新样本的权值分布:
D 3 = ( w 31 , … , w 3 i , … , w 310 ) = D 2 ( x ) e − α 2 f ( x ) h 2 ( x ) Z 2 D_3=(w_{31},…,w_{3i},…,w_{310})=\dfrac{D_2(x)e^{-\alpha_{2}f(x)h_2(x)}}{Z_2} D3=(w31,,w3i,,w310)=Z2D2(x)eα2f(x)h2(x)

w 3 i = w 2 i Z 2 e − α 2 f ( x i ) h 2 ( x i ) , i = 1 , 2 , … , 10 w_{3i}=\dfrac{w_{2i}}{Z_2}e^{-\alpha_{2}f(x_i)h_2(x_i)},\quad i=1,2,…,10 w3i=Z2w2ieα2f(xi)h2(xi),i=1,2,,10

且已求得,基分类器权重 α 2 = 0.6496 \alpha_2=0.6496 α2=0.6496

可求,规范化因子:
Z t = ∑ i = 1 N w t i e − α t f ( x i ) h t ( x i ) Z_t=\sum\limits_{i=1}^{N}w_{ti}e^{-\alpha_{t}f(x_i)h_{t}(x_{i})} Zt=i=1Nwtieαtf(xi)ht(xi)

Z 2 = ∑ i = 1 N w 2 i e − α 2 f ( x i ) h 2 ( x i ) = 0.07143 e − 0.6496 + 0.07143 e − 0.6496 + 0.07143 e − 0.6496 + 0.07143 e 0.6496 + 0.07143 e 0.6496 + 0.07143 e 0.6496 + 0.16666 e − 0.6496 + 0.16666 e − 0.6496 + 0.16666 e − 0.6496 + 0.07143 e − 0.6496 = 0.07143 e − 0.6496 × 4 + 0.07143 e 0.6496 × 3 + 0.16666 e − 0.6496 × 3 简化计算 = 0.03730465 × 4 + 0.13677236 × 3 + 0.08703896 × 3 = 0.82065256 \begin{aligned} Z_2&=\sum\limits_{i=1}^{N}w_{2i}e^{-\alpha_{2}f(x_i)h_{2}(x_{i})}\\ &=0.07143e^{-0.6496}+0.07143e^{-0.6496}+0.07143e^{-0.6496}+0.07143e^{0.6496}+0.07143e^{0.6496}+0.07143e^{0.6496}+0.16666e^{-0.6496}+0.16666e^{-0.6496}+0.16666e^{-0.6496}+0.07143e^{-0.6496}\\ &=0.07143e^{-0.6496}\times 4+0.07143e^{0.6496}\times 3+0.16666e^{-0.6496}\times 3\qquad 简化计算\\ &=0.03730465\times 4+0.13677236\times 3+0.08703896\times 3\\ &=0.82065256 \end{aligned} Z2=i=1Nw2ieα2f(xi)h2(xi)=0.07143e0.6496+0.07143e0.6496+0.07143e0.6496+0.07143e0.6496+0.07143e0.6496+0.07143e0.6496+0.16666e0.6496+0.16666e0.6496+0.16666e0.6496+0.07143e0.6496=0.07143e0.6496×4+0.07143e0.6496×3+0.16666e0.6496×3简化计算=0.03730465×4+0.13677236×3+0.08703896×3=0.82065256

可求得:

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
权值分布 D 2 = ( w 2 i ) D_2=(w_{2i}) D2=(w2i)0.071430.071430.071430.071430.071430.071430.166660.166660.166660.07143
基分类器结果 h 2 ( x ) h_2(x) h2(x)111111111-1
分子 [ 3 ] ^{[3]} [3] w 2 i e − α 2 f ( x i ) h 2 ( x i ) w_{2i}e^{-\alpha_{2}f(x_i)h_2(x_i)} w2ieα2f(xi)h2(xi)0.037304650.037304650.037304650.136772360.136772360.136772360.087038960.087038960.087038960.03730465
权值分布 [ 4 ] ^{[4]} [4] D 3 = ( w 3 i ) D_3=(w_{3i}) D3=(w3i)0.045460.045460.045460.166660.166660.166660.106060.106060.106060.04546

[3]这里的分子计算: 0.07143 e − 0.6496 = 0.03730465 0.07143e^{-0.6496}=0.03730465 0.07143e0.6496=0.03730465 0.07143 e 0.6496 = 0.13677236 0.07143e^{0.6496}=0.13677236 0.07143e0.6496=0.13677236 0.16666 e − 0.6496 = 0.08703896 0.16666e^{-0.6496}=0.08703896 0.16666e0.6496=0.08703896

[4]可以观察到:第 2 轮中基学习器分类错误的样本 x=3,4,5,在 D 3 D_3 D3 中的权重变大了,而其他样本权重降低了。

此时的集成分类器:
H 2 ( x ) = 0.4236 h 1 ( x ) + 0.6496 h 2 ( x ) H_2(x)=0.4236h_1(x)+0.6496h_2(x) H2(x)=0.4236h1(x)+0.6496h2(x)
分类结果 F ( x ) = s i g n ( 0.4236 h 1 ( x ) + 0.6496 h 2 ( x ) ) F(x)=\mathrm{sign}\Big(0.4236h_1(x)+0.6496h_2(x)\Big) F(x)=sign(0.4236h1(x)+0.6496h2(x)) 在训练数据集上有 3 个误分类点。

2.4.5 算法步骤3c-7c(第 3 轮)

3c:基于分布 D t = D 3 D_t=D_3 Dt=D3 从数据集 D D D 中训练出分类器 h t = h 3 h_t=h_3 ht=h3
h 3 = L ( D , D 3 ) h_3=\mathfrak{L}(D,D_3) h3=L(D,D3)
在权值分布为 D 3 D_3 D3 的训练数据上,阈值 v v v 取 5.5 时分类误差率最低,故基本分类器为:
h 3 ( x ) = { 1 , x > 5.5 − 1 , x < 5.5 h_3(x)=\begin{cases}{1},&x\gt 5.5\\{-1},&x\lt 5.5\end{cases} h3(x)={1,1,x>5.5x<5.5
4c:估计 h 3 h_3 h3 的误差:

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
权值分布 D 3 D_3 D30.045460.045460.045460.166660.166660.166660.106060.106060.106060.04546
基分类器结果 h 3 ( x ) h_3(x) h3(x)-1-1-1-1-1-11111
正误××××

h 3 ( x ) h_3(x) h3(x) 的在训练数据集上的误差率为:
ϵ 3 = P x ∼ D 3 ( h 3 ( x ) ≠ f ( x ) ) = 0.04546 + 0.04546 + 0.04546 + 0.04546 = 0.1818 \epsilon_3=P_{x\sim D_3}(h_3(x)\neq f(x))=0.04546+0.04546+0.04546+0.04546=0.1818 ϵ3=PxD3(h3(x)=f(x))=0.04546+0.04546+0.04546+0.04546=0.1818
5c:检查当前基分类器是否比随机猜测好:
ϵ 3 = 0.1818 ≤ 0.5 \epsilon_{3}=0.1818\leq 0.5 ϵ3=0.18180.5
基分类器 h 3 h_3 h3 比随机猜测好,循环继续进行.

6c:确定分类器 h t = h 3 h_t=h_3 ht=h3 的权重 α 3 \alpha_3 α3
α 3 = 1 2 l n ( 1 − ϵ 3 ϵ 3 ) = 1 2 l n ( 1 − 0.1818 0.1818 ) = 0.7521 \alpha_{3}=\dfrac{1}{2}ln\Big(\dfrac{1-\epsilon_{3}}{\epsilon_3}\Big)=\dfrac{1}{2}ln\Big(\dfrac{1-0.1818}{0.1818}\Big)=0.7521 α3=21ln(ϵ31ϵ3)=21ln(0.181810.1818)=0.7521
7c:更新样本的权值分布:
D 4 = ( w 41 , … , w 4 i , … , w 410 ) = D 3 ( x ) e − α 3 f ( x ) h 3 ( x ) Z 3 D_4=(w_{41},…,w_{4i},…,w_{410})=\dfrac{D_3(x)e^{-\alpha_{3}f(x)h_3(x)}}{Z_3} D4=(w41,,w4i,,w410)=Z3D3(x)eα3f(x)h3(x)

w 4 i = w 3 i Z 3 e − α 3 f ( x i ) h 3 ( x i ) , i = 1 , 2 , … , 10 w_{4i}=\dfrac{w_{3i}}{Z_3}e^{-\alpha_{3}f(x_i)h_3(x_i)},\quad i=1,2,…,10 w4i=Z3w3ieα3f(xi)h3(xi),i=1,2,,10

且已求得,基分类器权重 α 3 = 0.7521 \alpha_3=0.7521 α3=0.7521

可求,规范化因子:
Z t = ∑ i = 1 N w t i e − α t f ( x i ) h t ( x i ) Z_t=\sum\limits_{i=1}^{N}w_{ti}e^{-\alpha_{t}f(x_i)h_{t}(x_{i})} Zt=i=1Nwtieαtf(xi)ht(xi)

$$
\begin{aligned}
Z_3&=\sum\limits_{i=1}{N}w_{3i}e{-\alpha_{3}f(x_i)h_{3}(x_{i})}\

&=0.04546e{0.7521}+0.04546e{0.7521}+0.04546e{0.7521}+0.16666e{-0.7521}+0.16666e{-0.7521}+0.16666e{-0.7521}+0.10606e{-0.7521}+0.10606e{-0.7521}+0.10606e{-0.7521}+0.04546e{0.7521}\
&=0.04546e^{0.7521}\times 4+0.16666e^{-0.7521}\times 3+0.10606e^{-0.7521}\times 3\qquad 简化计算\
&=0.09644113\times 4+0.07855946\times 3+0.04999410\times 3\
&=0.77142520
\end{aligned}
$$

可求得:

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
权值分布 D 3 = ( w 3 i ) D_3=(w_{3i}) D3=(w3i)0.045460.045460.045460.166660.166660.166660.106060.106060.106060.04546
基分类器结果 h 3 ( x ) h_3(x) h3(x)-1-1-1-1-1-11111
分子 [ 5 ] ^{[5]} [5] w 3 i e − α 3 f ( x i ) h 3 ( x i ) w_{3i}e^{-\alpha_{3}f(x_i)h_3(x_i)} w3ieα3f(xi)h3(xi)0.096441130.096441130.096441130.078559460.078559460.078559460.049994100.049994100.049994100.09644113
权值分布 [ 6 ] ^{[6]} [6] D 4 = ( w 4 i ) D_4=(w_{4i}) D4=(w4i)0.125020.125020.125020.101840.101840.101840.064810.064810.064810.12502

[5]这里的分子计算: 0.04546 e 0.7521 = 0.09644113 0.04546e^{0.7521}=0.09644113 0.04546e0.7521=0.09644113 0.16666 e − 0.7521 = 0.07855946 0.16666e^{-0.7521}=0.07855946 0.16666e0.7521=0.07855946 0.10606 e − 0.7521 = 0.04999410 0.10606e^{-0.7521}=0.04999410 0.10606e0.7521=0.04999410

[6]可以观察到:第 3 轮中基学习器分类错误的样本 x=0,1,2,9,在 D 4 D_4 D4 中的权重变大了,而其他样本权重降低了。

此时的集成分类器:
H 3 ( x ) = 0.4236 h 1 ( x ) + 0.6496 h 2 ( x ) + 0.7521 h 3 ( x ) H_3(x)=0.4236h_1(x)+0.6496h_2(x)+0.7521h_3(x) H3(x)=0.4236h1(x)+0.6496h2(x)+0.7521h3(x)
分类结果 F ( x ) = s i g n ( 0.4236 h 1 ( x ) + 0.6496 h 2 ( x ) + 0.7521 h 3 ( x ) ) F(x)=\mathrm{sign}\Big(0.4236h_1(x)+0.6496h_2(x)+0.7521h_3(x)\Big) F(x)=sign(0.4236h1(x)+0.6496h2(x)+0.7521h3(x)) 在训练数据集上有 0 个误分类点。

具体如下:

序号 i i i12345678910
数据 x x x0123456789
类别标签 y = f ( x ) y=f(x) y=f(x)111-1-1-1111-1
基分类器结果 h 1 ( x ) h_1(x) h1(x)111-1-1-1-1-1-1-1
加权 α 1 h 1 ( x ) \alpha_{1}h_1(x) α1h1(x)0.42360.42360.4236-0.4236-0.4236-0.4236-0.4236-0.4236-0.4236-0.4236
基分类器结果 h 2 ( x ) h_2(x) h2(x)111111111-1
加权 α 2 h 2 ( x ) \alpha_{2}h_2(x) α2h2(x)0.64960.64960.64960.64960.64960.64960.64960.64960.6496-0.6496
基分类器结果 h 3 ( x ) h_3(x) h3(x)-1-1-1-1-1-11111
加权 α 3 h 3 ( x ) \alpha_{3}h_3(x) α3h3(x)-0.7521-0.7521-0.7521-0.7521-0.7521-0.75210.75210.75210.75210.7521
∑ t = 1 T α t h t ( x ) \sum\limits_{t=1}^{T}\alpha_{t}h_{t}(x) t=1Tαtht(x)0.32110.32110.3211-0.5261-0.5261-0.52610.97810.97810.9781-0.3211
集成分类器结果 F ( x ) F(x) F(x)111-1-1-1111-1
正误
2.4.6 算法步骤8

8:结束循环

输出结果:
F ( x ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) = s i g n ( 0.4236 h 1 ( x ) + 0.6496 h 2 ( x ) + 0.7521 h 3 ( x ) ) F(x)=\mathrm{sign}\Big(\sum\limits_{t=1}^{T}\alpha_{t}h_{t}(x)\Big)=\mathrm{sign}\Big(0.4236h_1(x)+0.6496h_2(x)+0.7521h_3(x)\Big) F(x)=sign(t=1Tαtht(x))=sign(0.4236h1(x)+0.6496h2(x)+0.7521h3(x))
AdaBoost 算法在本数据集的运算至此结束。

2.5 代码实现

见代码文件“AdaBoost.ipynb”。

2.6 算法分析
2.6.1 主要优点

①AdaBoost 作为分类器时,分类精度很高,训练误差以指数速率下降;

②在 AdaBoost 的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活;

③作为简单的二元分类器时,构造简单,结果可理解。

2.6.2 主要缺点

在 Adaboost 训练过程中,Adaboost 会使得难于分类的样本的权值呈指数增长,训练将会过于偏向这类困难的样本;因此它对异常样本是敏感的,异常样本在迭代中可能会获得较高的权重,影响最终强学习器的预测准确性。

2.7 常用技巧
2.7.1 特征缩减技术(Shrinkage)

对每个基学习器乘以一个系数 v   ( 0 < v < 1 ) v\ (0\lt v\lt 1) v (0<v<1),使其对最终模型的贡献减小,从而防止学的太快产生过拟合, v v v 又称学习率(learning rate)。

于是,上文的加法模型就从:
H ( x ) = H t − 1 ( x ) + α t h t ( x ) H(x)=H_{t-1}(x)+\alpha_{t}h_t(x) H(x)=Ht1(x)+αtht(x)
变为:
H ( x ) = H t − 1 ( x ) + v ⋅ α t h t ( x ) H(x)=H_{t-1}(x)+v\cdot\alpha_{t}h_t(x) H(x)=Ht1(x)+vαtht(x)
一般 v v v 要和迭代次数 T T T 结合起来使用,较小的 v v v 意味着需要较大的 T T T

The Elements of Staistical Learning》提到的策略是先将 v v v 设得很小 ( v < 0.1 ) (v\lt 0.1) (v<0.1),再通过 Early Stopping 选择 T T T;现实中也常用交叉验证(cross-validation)进行选择。

2.7.2 早停法(Early Stopping)

将数据集划分为训练集和测试集,在训练过程中不断检查在测试集上的表现,如果测试集上的准确率下降到一定阈值之下,则停止训练,选用当前的迭代次数 T T T,这同样是防止过拟合的手段。

2.7.3 权值修整(Weight Trimming)

Weight Trimming 的主要目的是提高训练速度,且不显著牺牲准确率。

在 AdaBoost 的每一轮基学习器训练过程中,只有小部分样本的权重较大,因而能产生较大的影响;而其他大部分权重小的样本则对训练影响甚微。

Weight Trimming 的思想是每一轮迭代中删除那些低权重的样本,只用高权重样本进行训练。具体是设定一个阈值(比如90%或99%),再将所有样本按权重排序,计算权重的累积和,累积和大于阈值的权重 (样本) 被舍弃,不会用于训练。注意每一轮训练完成后所有样本的权重依然会被重新计算,这意味着之前被舍弃的样本在之后的迭代中如果权重增加,可能会重新用于训练。

参考文献[9]中有使用 Weight Trimming 的 AdaBoost 代码,可供参考。

2.8 参考文献

[1]《机器学习》周志华

[2]《统计学习方法》李航

[3]《机器学习西瓜书之集成学习》爱你的小魔仙 https://www.bilibili.com/video/BV1PK4y147VQ/

[4] 《集成学习 之【Adaboost】 —— 李航《统计学习方法》相关章节解读》老弓的学习日记 https://www.bilibili.com/video/BV1x44y1r7Zc

[5]《通俗易懂讲算法-Adaboost》青青草原灰太郎 https://www.bilibili.com/video/BV13S4y1t7aY/

[6]《Adaboost是如何训练弱分类器的》herain https://www.zhihu.com/question/443511497?utm_id=0

[7]《集成学习之Boosting —— AdaBoost原理》wdmad https://zhuanlan.zhihu.com/p/37358517

[8]《集成学习之Boosting —— AdaBoost实现》wdmad https://zhuanlan.zhihu.com/p/37357981

[9]《AdaBoost 算法》Rnan-prince https://blog.csdn.net/qq_19446965/article/details/104200720

[10]《集成学习(Ensemble learning)》张梓寒 https://www.cnblogs.com/ZihanZhang/p/16351469.html

[11]《Statistical-Learning-Method_Code》Dod-o https://github.com/Dod-o/Statistical-Learning-Method_Code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/578673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上市公司专利数据、专利申请、专利授权和质量指标计算面板数据(1990-2022年)

01、数据简介 专利作为企业创新能力和核心竞争力的体现&#xff0c;越来越受到上市公司的重视。了解上市公司的专利数据、专利申请、专利授权和质量指标计算&#xff0c;有助于投资者更好地评估公司的创新能力和长期发展潜力。 通过分析上市公司的专利数据、专利申请、专利授…

【国标语音对讲】EasyCVR视频汇聚平台海康/大华/宇视摄像头GB28181语音对讲配置

一、背景分析 近年来&#xff0c;国内视频监控应用发展迅猛&#xff0c;系统接入规模不断扩大&#xff0c;涌现了大量平台提供商&#xff0c;平台提供商的接入协议各不相同&#xff0c;终端制造商需要给每款终端维护提供各种不同平台的软件版本&#xff0c;造成了极大的资源浪…

[C++ QT项目实战]----系统实现双击表格某一行,表格数据不再更新,可以查看该行所有信息,选中表更新之后,数据可以继续更新

前言 在需要庞大的数据量的系统中&#xff0c;基于合适的功能对数据进行观察和使用至关重要&#xff0c;本篇在自己项目实战的基础上&#xff0c;基于C QT编程语言&#xff0c;对其中一个数据功能进行分析和代码实现&#xff0c;希望可以有所帮助。一些特殊原因&#xff0c;图片…

回溯-单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相…

压测--混合场景设置

1、设计测试场景 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标满足需求定义的检验活动。一般有以下场景&#xff1a; 基准场景&#xff1a;单接口少量并发用户下压测&#xff0c;评估单个功能点性能。负载场景&#xff1a;逐步增…

Python实践应用|NC文件读取

import netCDF4 as nc import numpy as np import matplotlib.pyplot as plt# 打开NC文件 nc_file E:/NC_file/air.sig995.2012.nc # 将your_file.nc替换为你的NC文件路径 nc_data nc.Dataset(nc_file, r)# 查看NC文件中包含的变量 print("Variables in the NC file:&q…

免费简单好用的内网穿透工具(ngrok、natapp),微信回调地址配置

B站视频地址 文章目录 Natapp1、登录注册账号、下载软件2、使用2-1、购买隧道、查看token2-2、端口穿透 Ngrok1、登录注册账号、下载软件2、使用2-1、获取并设置 token2-2、使用 3、隧道 微信回调配置1、注册测试公众号2、回调代码3、回调配置 在一些特殊的场景下&#xff0c;需…

C#基础之结构体

结构体 文章目录 1、概念2、基本语法3、示例4、结构体的使用5、访问修饰符6、结构体的构造函数思考1 描述矩形信息思考2 职业名字释放了技能思考3 小怪兽思考4 多个小怪兽思考5 奥特曼打小怪兽 1、概念 结构体是一种一定义变量类型 它是数据和函数的集合&#xff0c;可以在结…

PCIe总线-MPS MRRS RCB参数介绍(四)

1.概述 PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载&#xff0c;即Data Payload。Data Payload的长度和MPS&#xff08;Max Payload Size&#xff09;、MRRS&#xff08;Max Read Request Size&#xff09;和RCB&#xff08;Read Completion Boundary&#xff0…

计算机存储原理.2

1.主存储器与CPU之间的连接 2.存储器芯片的输入输出信号 3.增加主存的存储字长 3.1位扩展 数据总线的利用成分是不充分的(单块只能读写一位)&#xff0c;为了解决这个问题所以引出了位扩展。 使用多块存储芯片解决这个问题。 3.2字扩展 因为存储器买的是8k*8位的&am…

硬件21、接线端子XH2.54、2.54排针排母、2510接插件、PH2.0、町洋接线端子5.08、ISP接口JTAG插座

XH2.54端子的间距为2.54毫米&#xff0c;2.54排针排母的间距也是2.54mm&#xff0c;2510接插件也是2.54、而PH2.0端子的间距为2.0毫米&#xff0c;町洋接线端子插针间的距离是5.08mm&#xff0c;ISP接口JTAG插座针脚的间距一般也是2.54mm XH2.54 针脚间距为2.54mm 插头 接线…

IIS中搭建.Net Core项目,步骤详解

一、准备服务器 1&#xff09;安装IIS 这个比较简单&#xff0c;百度一下就行 2&#xff09;安装 .NET Core 运行时 下载地址&#xff1a;下载 .NET(Linux、macOS 和 Windows) 因为我是本地开发&#xff0c;所以我下载的是SDK 安装成功之后显示如下&#xff1a; 检查是否安装…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

使用Github Action实现Hexo博客自动化部署

本文参考自 Akilar&#xff0c;原文地址&#xff1a;https://akilar.top/posts/f752c86d/ 每次部署Hexo都需要运行指令三件套&#xff0c;随着文章越来越多&#xff0c;编译的时间也随之越来越长&#xff0c;通过Github Action&#xff0c;我们只需要在每次完成博客的编写或修…

OSPF路由计算

1.区域内路由计算 &#xff08;1&#xff09;LSA的基本概念 LS Age&#xff1a;当LSA被始发时&#xff0c;该字段为0&#xff0c;随着LSA在网络中被泛洪&#xff0c;该时间逐渐累加&#xff0c;当到达MaxAge&#xff08;缺省值为3600s&#xff09;时&#xff0c;LSA不再用于路…

传统过程自动化工厂的智能扩展

一 通过NOA概念&#xff0c;公开、安全地迈向未来 随着数字化转型在过程自动化工业中的不断深入&#xff0c;许多公司都面临着同一挑战——如何平衡创新和传统。放眼望去&#xff0c;过程自动化工业和信息技术似乎在以不同的速度发展。虽然过程自动化工厂通过使用传统的自动化…

基于springboot实现企业oa管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现企业oa管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足&#xff0c;创建了一个计算机管理企业OA管理系统的方案…

C语言数据结构之栈

目录 1.栈的概念及结构2.栈的实现3.栈的代码实现4.相关例题 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插…

AI大模型系列:自然语言处理,从规则到统计的演变

自然语言处理&#xff0c;从规则到统计的演变 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能的一个重要分支&#xff0c;主要研究如何让计算机理解、解释和生成人类语言。从自然语言处理的字面上来看&#xff0c;最重要的是“语言…

Unity | 集成 Protobuf(proto 转 cs 插件及序列化与反序列化)

1. 添加 dll 1. 下载 protobuf 源码 根据需要下载 protobuf 指定版本的源码&#xff0c;这里以 v3.21.12&#xff08;protobuf-csharp-3.21.12.zip&#xff09;为例&#xff1a; 下载地址&#xff1a;「https://github.com/protocolbuffers/protobuf/releases」 2. 下载 Vis…
最新文章