机器学习理论基础—集成学习(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)

Z 3 = ∑ i = 1 N w 3 i e − α 3 f ( x i ) h 3 ( x i ) = 0.04546 e 0.7521 + 0.04546 e 0.7521 + 0.04546 e 0.7521 + 0.16666 e − 0.7521 + 0.16666 e − 0.7521 + 0.16666 e − 0.7521 + 0.10606 e − 0.7521 + 0.10606 e − 0.7521 + 0.10606 e − 0.7521 + 0.04546 e 0.7521 = 0.04546 e 0.7521 × 4 + 0.16666 e − 0.7521 × 3 + 0.10606 e − 0.7521 × 3 简化计算 = 0.09644113 × 4 + 0.07855946 × 3 + 0.04999410 × 3 = 0.77142520 \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} Z3=i=1Nw3ieα3f(xi)h3(xi)=0.04546e0.7521+0.04546e0.7521+0.04546e0.7521+0.16666e0.7521+0.16666e0.7521+0.16666e0.7521+0.10606e0.7521+0.10606e0.7521+0.10606e0.7521+0.04546e0.7521=0.04546e0.7521×4+0.16666e0.7521×3+0.10606e0.7521×3简化计算=0.09644113×4+0.07855946×3+0.04999410×3=0.77142520

可求得:

序号 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.rhkb.cn/news/316764.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java核心技术.卷I-上-笔记

目录 面向对象程序设计 使用命令行工具简单的编译源码 数据类型 StringBuilder 数组 对象与类 理解方法调用 继承 代理 异常 断言 日志 面向对象程序设计 面向对象的程序是由对象组成的&#xff0c;每个对象包含对用户公开的特定功能部分和隐藏的实现部分从根本上…

ARCGIS PRO3 三维模型OSGB转SLPK场景数据集

1.前言 因项目工作&#xff0c;需要将三维模型发布到arcgisserver上&#xff0c;但arcgisserver只支持slpk格式的模型&#xff0c;于是我开启了漫长的三维模型格式转换之旅&#xff0c;在这里记录下本人踩过的坑。 2.三维模型数据情况 2.1 模型大小&#xff1a;在20GB以上&a…

解决NetworkManager覆盖/etc/resolv.conf的问题

发布时间&#xff1a;2024.4.27 问题 /etc/resolv.conf是Linux下DNS的配置文件。 但是NetworkManager会用覆盖它&#xff0c;导致我们每次都要重新配置。 解决办法 这是官方推荐的做法。或者你可以用resolveconf工具。 $ nm-connection-editor会调起一个界面&#xff0c;…

若依:Linux Centos 7.9 安装部署RuoYi前后端集成版

目录 1.虚拟机操作系统版本 2.删除旧的jdk 3.下载JDK 17 &#xff1a; 4.下载 mvn 3.9.6&#xff1a; 5.下载mysql:5.7.44版本 6.git下载若依&#xff1a; 7.修改数据库连接&#xff1a; 8.mvn 清理和打包 9.启动若依&#xff1a; 1.虚拟机操作系统版本 2.删除旧的jd…

Android中的屏幕刷新机制(动画视频形象说明机制)

一&#xff0c;刷新率和帧率&#xff0c;60hz和60fps的区别 在Android系统中&#xff0c;刷新率和帧率是两个不同的概念&#xff0c;它们各自在显示过程中扮演着不同的角色。以下是对它们的详细解释&#xff1a; 刷新率&#xff0c;单位是Hz&#xff0c;是指屏幕在一秒内刷新…

螺旋角和导程、转位后的齿轮有什么关系?

最近和小伙伴聊到了一个问题&#xff1a;斜齿轮螺旋角和导程的关系&#xff0c;主要是在遇到在采用转位设计方式的刀具时&#xff0c;更觉得有点迷惑&#xff0c;今天咱们就聊聊这个事儿。 先来说斜齿轮螺旋角和导程的关系&#xff1a; 斜齿轮是有多个螺旋面组成的&#xff0…

图像在神经网络中的预处理与后处理的原理和作用(最详细版本)

1. 问题引出及内容介绍 相信大家在学习与图像任务相关的神经网络时&#xff0c;经常会见到这样一个预处理方式。 self.to_tensor_norm transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) 具体原理及作用稍后解释&…

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

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

基于Vue3的Axios异步请求

基于Vue3的Axios异步请求 1. Axios安装与应用2. Axios网络请求封装3. axios网络请求跨域前端解决方案server.proxy 1. Axios安装与应用 Axios是一个基于promise的网络请求库&#xff0c;Axios.js.中文文档&#xff1a;https://axios.js.cn/ 安装&#xff1a;npm install --sa…

vuetify3.0+tailwindcss+vite最新框架

1、根据vuetify官网下载项目 安装vuetify项目 2、根据tailwindcss官网添加依赖 添加tailwindcss依赖 3、 配置main.ts // main.ts import "./style.css"4、使用 <template><h1 class"text-3xl font-bold underline">Hello world!</…

【消息队列】延迟消息

延时消息 延迟消息死信交换机延迟消息的插件 延迟消息 生产者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而在指定时间之后才收到消息 比如说演唱会的票&#xff0c;抢上了但是迟迟未支付&#xff0c;但是库存已经占用&#xff0c;就需要用到延迟消…

75、堆-前K个高频元素

思路 这道题还是使用优先队列&#xff0c;是要大根堆&#xff0c;然后创建一个类&#xff0c;成员变量值和次数。大根堆基于次数排序。前k个就拿出前k的类的值即可。代码如下&#xff1a; class Solution {public int[] topKFrequent(int[] nums, int k) {if (nums null || …

电商技术揭秘三十五:智能风控功能架构浅析

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘二十八&#xff1a;安全与合规性保障 电商技术揭秘二十九&#xff1a;电商法律合规浅析 电商技术揭秘三十&#xff1a;知识产权保…

刷题训练之前缀和

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握前缀和算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

智能私信软件:转化率提升的神器

在数字化营销领域&#xff0c;利用智能私信软件策略提升转化率已经成为一种不可忽视的趋势。随着人工智能技术的发展&#xff0c;这些软件变得越来越智能&#xff0c;能够根据用户的行为和偏好提供个性化的沟通体验。在这篇文章中&#xff0c;我们将探讨如何有效地运用智能私信…

分布式WEB应用中会话管理的变迁之路

优质博文&#xff1a;IT-BLOG-CN Session一词直译为“会话”&#xff0c;意指有始有终的一系列动作&#xff0f;消息。Session是Web应用蓬勃发展的产物之一&#xff0c;在Web应用中隐含有“面向连接”和“状态保持”两个含义&#xff0c;同时也指代了Web服务器与客户端之间进行…

BM25检索算法 python

1.简介 BM25&#xff08;Best Matching 25&#xff09;是一种经典的信息检索算法&#xff0c;是基于 TF-IDF算法的改进版本&#xff0c;旨在解决、TF-IDF算法的一些不足之处。其被广泛应用于信息检索领域的排名函数&#xff0c;用于估计文档D与用户查询Q之间的相关性。它是一种…

Docker-compose部署LTC同步节点

1、下载ltc程序包&#xff0c;litecoin下载地址 下载页 mkdir /data/docker-compose/ltc cd /data/docker-compose/ltc https://github.com/litecoin-project/litecoin/releases/download/v0.21.3/litecoin-0.21.3-x86_64-linux-gnu.tar.gz2、编写dockerfile和bitcoin.conf b…

JVM (Micrometer)监控SpringBoot(AWS EKS版)

问题 怎样使用JVM (Micrometer)面板&#xff0c;监控Spring&#xff1f;这里不涉及Prometheus和Grafana&#xff0c;重点介绍与Micrometer与Springboot&#xff0c;k8s怎样集成。 pom.xml 引入依赖&#xff0c;如下&#xff1a; <properties><micrometer.version&…

【蓝桥杯C++A组省三 | 一场勇敢的征途与致19岁的信】

随着4.13西大四楼考场的倒计时结束… 就这样蓝桥杯落幕了 省三的名次既满足又不甘心&#xff0c;但又确乎说得上是19岁途中的又一枚勋章 从去年得知&#xff0c;纠结是否要报名、到寒假开始战战兢兢地准备、陆续开始创作博客&#xff0c;记录好题和成长……感谢你们的关注&…