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

机器学习周志华学习笔记-第6章<支持向量机>

机器学习周志华学习笔记-第6章<支持向量机>

卷王,请看目录

  • 6支持向量机
    • 6.1 函数间隔与几何间隔
        • 6.1.1 函数间隔
        • 6.1.2 几何间隔
    • 6.2 最大间隔与支持向量
    • 6.3 对偶问题
    • 6.4 核函数
    • 6.5 软间隔支持向量机
    • 6.6 支持向量机
    • 6.7核方法

6支持向量机

支持向量机是一种经典的二分类模型,是一种监督学习算法。基本模型定义为特征空间中最大间隔的线性分类器,其学习的优化目标便是间隔最大化,因此支持向量机本身可以转化为一个凸二次规划求解的问题。

6.1 函数间隔与几何间隔

对于二分类学习,假设现在的数据是线性可分的,这时分类学习最基本的想法就是找到一个合适的超平面,该超平面能够将不同类别的样本分开,类似二维平面使用 a x + b y + c = 0 ax+by+c=0 ax+by+c=0来表示,超平面实际上表示的就是高维的平面,如下图所示:
在这里插入图片描述对数据点进行划分时,易知:当超平面距离与它最近的数据点的间隔越大,分类的鲁棒性越好,即当新的数据点加入时,超平面对这些点的适应性最强,出错的可能性最小。因此需要让所选择的超平面能够最大化这个间隔Gap(如下图所示), 常用的间隔定义有两种,一种称之为函数间隔,一种为几何间隔,下面将分别介绍这两种间隔,并对SVM为什么会选用几何间隔做了一些阐述。
在这里插入图片描述

6.1.1 函数间隔

在超平面 ω ’ x + b = 0 \omega’x+b=0 ωx+b=0确定的情况下, ∣ ω ’ x ∗ + b ∣ |\omega’x^*+b| ωx+b能够代表点 x ∗ x^* x距离超平面的远近,易知:当 ω ’ x ∗ + b > 0 \omega’x^*+b>0 ωx+b>0时,表示 x ∗ x^* x在超平面的一侧(正类,类标为1),而当 ω ’ x ∗ + b < 0 \omega’x^*+b<0 ωx+b<0时,则表示 x ∗ x^* x在超平面的另外一侧(负类,类别为-1)。因此 ( ω ’ x ∗ + b ) y ∗ (\omega’x^*+b)y^* ωx+by的正负性恰能表示数据点 x ∗ x^* x是否被分类正确。于是便引出了函数间隔的定义(functional margin):
γ ^ = y ( ω T x + b ) = y f ( x ) \hat{\gamma}=y\left(\omega^{T} x+b\right)=y f(x) γ^=y(ωTx+b)=yf(x)
而超平面 ( ω , b ) (\omega,b) ω,b关于所有样本点 ( X i , Y i ) (X_i,Y_i) XiYi的函数间隔最小值则为超平面在训练数据集T上的函数间隔:
γ ^ = min ⁡ γ ^ i , ( i = 1 , … , n ) \hat{\gamma}=\min \hat{\gamma}_{i},(i=1, \ldots, n) γ^=minγ^i,(i=1,,n)
可以看出:这样定义的函数间隔在处理SVM上会有问题,当超平面的两个参数 ω \omega ω b b b同比例改变时,函数间隔也会跟着改变,但是实际上超平面还是原来的超平面,并没有变化。例如: ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + b = 0 \omega_1x_1+\omega_2x_2+\omega_3x_3+b=0 ω1x1+ω2x2+ω3x3+b=0其实等价于 2 ω 1 x 1 + 2 ω 2 x 2 + 2 ω 3 x 3 + 2 b = 0 2\omega_1x_1+2\omega_2x_2+2\omega_3x_3+2b=0 2ω1x1+2ω2x2+2ω3x3+2b=0,但计算的函数间隔却翻了一倍。从而引出了能真正度量点到超平面距离的概念–几何间隔(geometrical margin)。

6.1.2 几何间隔

几何间隔代表的则是数据点到超平面的真实距离,对于超平面 ω ’ x + b = 0 \omega’x+b=0 ωx+b=0 ω \omega ω代表的是该超平面的法向量,设 x ∗ x^* x为超平面外一点 x x x在法向量 ω \omega ω方向上的投影点, x x x与超平面的距离为 γ \gamma γ,则有 x ∗ = x − γ ( ω / ∣ ∣ ω ∣ ∣ ) x^*=x-\gamma(\omega/||\omega||) x=xγ(ω/∣∣ω∣∣),又 x ∗ x^* x在超平面上,即 ω ’ x ∗ + b = 0 \omega’x^*+b=0 ωx+b=0,代入即可得:

γ = ω T x + b ∥ ω ∥ = f ( x ) ∥ ω ∥ \gamma=\frac{\omega^{T} x+b}{\|\omega\|}=\frac{f(x)}{\|\omega\|} γ=ωωTx+b=ωf(x)
为了得到 γ \gamma γ的绝对值,令 γ \gamma γ乘上其对应的类别 y y y,即可得到几何间隔的定义:
γ ~ = y γ = γ ^ ∥ ω ∥ \tilde{\gamma}=y \gamma=\frac{\hat{\gamma}}{\|\omega\|} γ~=yγ=ωγ^
从上述函数间隔与几何间隔的定义可以看出:实质上函数间隔就是 ∣ ω ’ x + b ∣ |\omega’x+b| ωx+b,而几何间隔就是点到超平面的距离。

6.2 最大间隔与支持向量

通过前面的分析可知:函数间隔不适合用来最大化间隔,因此这里我们要找的最大间隔指的是几何间隔,于是最大间隔分类器的目标函数定义为:

max ⁡ γ ~ y i ( ω T x i + b ) = γ ^ i ≥ γ ^ , i = 1 , … , n \begin{array}{l} \max \tilde{\gamma} \\ y_{i}\left(\omega^{T} x_{i}+b\right)=\hat{\gamma}_{i} \geq \hat{\gamma}, \quad i=1, \ldots, n \end{array} maxγ~yi(ωTxi+b)=γ^iγ^,i=1,,n
在这里插入图片描述
一般地,我们令 γ ^ \hat{\gamma} γ^为1(这样做的目的是为了方便推导和目标函数的优化),从而上述目标函数转化为:
max ⁡ 1 ∥ ω ∥ , s.t.  y i ( ω T x i + b ) ≥ 1 , i = 1 , … , n \max \frac{1}{\|\omega\|}, \quad \text { s.t. } \quad y_{i}\left(\omega^{T} x_{i}+b\right) \geq 1, i=1, \ldots, n maxω1, s.t. yi(ωTxi+b)1,i=1,,n
对于 y ( ω ’ x + b ) = 1 y(\omega’x+b)=1 y(ωx+b)=1的数据点,即右图中位于 ω ’ x + b = 1 \omega’x+b=1 ωx+b=1 ω ’ x + b = − 1 \omega’x+b=-1 ωx+b=1上的数据点,我们称之为支持向量(support vector),易知:对于所有的支持向量,它们恰好满足 y ∗ ( ω ’ x ∗ + b ) = 1 y^*(\omega’x^*+b)=1 y(ωx+b)=1,而所有不是支持向量的点,有 y ∗ ( ω ’ x ∗ + b ) > 1 y^*(\omega’x^*+b)>1 y(ωx+b)>1

6.3 对偶问题

对于上述得到的目标函数,求 1 / ∣ ∣ ω ∣ ∣ 1/||\omega|| 1/∣∣ω∣∣的最大值相当于求 ∣ ∣ ω ∣ ∣ 2 ||\omega||^2 ∣∣ω2的最小值,因此很容易将原来的目标函数转化为:
min ⁡ 1 2 ∥ ω ∥ 2 , s.t.  y i ( ω T x i + b ) ≥ 1 , i = 1 , … . , n \min \frac{1}{2}\|\omega\|^{2}, \quad \text { s.t. } \quad y_{i}\left(\omega^{T} x_{i}+b\right) \geq 1, i=1, \ldots ., n min21ω2, s.t. yi(ωTxi+b)1,i=1,.,n
即变为了一个带约束的凸二次规划问题,按书上所说可以使用现成的优化计算包(QP优化包)求解,但由于SVM的特殊性,一般我们将原问题变换为它的对偶问题,接着再对其对偶问题进行求解。为什么通过对偶问题进行求解,有下面两个原因:

  • 一是因为使用对偶问题更容易求解
  • 二是因为通过对偶问题求解出现了向量内积的形式,从而能更加自然地引出核函数

对偶问题,顾名思义,可以理解成优化等价的问题,更一般地,是将一个原始目标函数的最小化转化为它的对偶函数最大化的问题。对于当前的优化问题,首先我们写出它的朗格朗日函数:
在这里插入图片描述
上式很容易验证:当其中有一个约束条件不满足时,L的最大值为 ∞(只需令其对应的 α \alpha α为 ∞即可);当所有约束条件都满足时,L的最大值为 1 / 2 ∣ ∣ ω ∣ ∣ 2 1/2||\omega||^2 1/2∣∣ω2(此时令所有的 α \alpha α为0),因此实际上原问题等价于:
min ⁡ ω , b θ ( ω ) = min ⁡ ω , b max ⁡ α i ≥ 0 L ( ω , b , α ) = p ∗ \min _{\omega, b} \theta(\omega)=\min _{\omega, b} \max _{\alpha_{i} \geq 0} L(\omega, b, \alpha)=p^{*} ω,bminθ(ω)=ω,bminαi0maxL(ω,b,α)=p
由于这个的求解问题不好做, 因此一般我们将最小和最大的位置交换一下(需满足 KKT 条件),变成原问题的对偶问题:
max ⁡ α i ≥ 0 min ⁡ ω , b L ( ω , b , α ) = d ∗ \max _{\alpha_{i} \geq 0} \min _{\omega, b} L(\omega, b, \alpha)=d^{*} αi0maxω,bminL(ω,b,α)=d

这样就将原问题的求最小变成了对偶问题求最大 (用对偶这个词还是很形象), 接下来便可先求 L 对 ω \omega ω b b b 的极小, 再求 L 对 α \alpha α 的极大。

  1. 首先求 L 对 ω \omega ω b b b 的极小, 分别求 L 关于 ω \omega ω b b b 的偏导, 可以得出:

∂ L ∂ ω = 0 ⇒ ω = ∑ i = 1 n α i y i x i ∂ L ∂ b = 0 ⇒ ∑ i = 1 n α i y i = 0 \begin{array}{l} \frac{\partial L}{\partial \omega}=0 \Rightarrow \omega=\sum_{i=1}^{n} \alpha_{i} y_{i} x_{i} \\ \\ \frac{\partial L}{\partial b}=0 \Rightarrow \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{array} ωL=0ω=i=1nαiyixibL=0i=1nαiyi=0
将上述结果代入 L 得到:
L ( ω , b , α ) = 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j − ∑ i , j = 1 n α i α j y i y j x i T x j − b ∑ i = 1 n α i y i + ∑ i = 1 n α i = ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j → 现在只包含  α \begin{aligned} L(\omega, b, \alpha) & =\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j}-\sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j}-b \sum_{i=1}^{n} \alpha_{i} y_{i}+\sum_{i=1}^{n} \alpha_{i} \\ & =\sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j} \rightarrow \text { 现在只包含 } \alpha \end{aligned} L(ω,b,α)=21i,j=1nαiαjyiyjxiTxji,j=1nαiαjyiyjxiTxjbi=1nαiyi+i=1nαi=i=1nαi21i,j=1nαiαjyiyjxiTxj 现在只包含 α

  1. 接着 L 关于 α \alpha α 极大求解 α \alpha α (通过 SMO 算法求解,此处不做深入)。
    max ⁡ α ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j s.t.  α i ≥ 0 , i = 1 , … , n ∑ i = 1 n α i y i = 0 \begin{aligned} \max _{\alpha} & \sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j} \\ \text { s.t. } & \alpha_{i} \geq 0, i=1, \ldots, n \\ & \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{aligned} αmax s.t. i=1nαi21i,j=1nαiαjyiyjxiTxjαi0,i=1,,ni=1nαiyi=0

  2. 最后便可以根据求解出的 , 计算出 ω \omega ω b b b , 从而得到分类超平面函数。
    ω ∗ = ∑ i = 1 n α i y i x i b ∗ = − max ⁡ i : y i = − 1 ω ∗ T x i + min ⁡ i : y i = 1 ω ∗ T x i 2 \begin{aligned} \omega^{*} & =\sum_{i=1}^{n} \alpha_{i} y_{i} x_{i} \\ b^{*} & =-\frac{\max _{i: y_{i}=-1} \omega^{* T} x_{i}+\min _{i: y_{i}=1} \omega^{* T} x_{i}}{2} \end{aligned} ωb=i=1nαiyixi=2maxi:yi=1ωTxi+mini:yi=1ωTxi
    在对新的点进行预测时, 实际上就是将数据点 x ∗ x^* x 代入分类函数 f ( x ) = ω ′ x + b f(x)=\omega^{\prime} x+b f(x)=ωx+b 中, 若 f ( x ) > 0 f(x)>0 f(x)>0 ,则为正类, f ( x ) < 0 f(x)<0 f(x)<0 , 则为负类, 根据前面推导得出的 ω \omega ω b b b , 分类函数如下所示, 此时便出现了上面所提到的内积形式。
    f ( x ) = ( ∑ i = 1 n α i y i x i ) T x + b = ∑ i = 1 n α i y i ⟨ x i , x ⟩ + b \begin{aligned} f(x) & =\left(\sum_{i=1}^{n} \alpha_{i} y_{i} x_{i}\right)^{T} x+b \\ & =\sum_{i=1}^{n} \alpha_{i} y_{i}\left\langle x_{i}, x\right\rangle+b \end{aligned} f(x)=(i=1nαiyixi)Tx+b=i=1nαiyixi,x+b

这里实际上只需计算新样本与支持向量的内积, 因为对于非支持向量的数据点, 其对应的拉格朗日乘子一定为 0 , 根据最优化理论( K-T 条件),对于不等式约束 y ( ω ′ x + b ) − 1 ⩾ 0 \mathrm{y}\left(\mathrm{\omega}^{\prime} \mathrm{x}+\mathrm{b}\right)-1 \geqslant 0 y(ωx+b)10 ,满足:

∂ i ( y i ( ω T x i + b ) − 1 ) = 0 ⇒ 即总有一个为  0 \partial_{i}\left(\mathrm{y}_{i}\left(\omega^{T} \mathrm{x}_{i}+\mathrm{b}\right)-1\right)=0 \Rightarrow \text { 即总有一个为 } 0 i(yi(ωTxi+b)1)=0 即总有一个为 0

6.4 核函数

由于上述的超平面只能解决线性可分的问题, 对于线性不可分的问题, 例如: 异或问题, 我们需要使用核函数将其进行推广。一般地, 解决线性不可分问题时, 常常采用咉射的方式, 将低维原始空间映射到高维特征空间, 使得数据集在高维空间中变得线性可分, 从而再使用线性学习器分类。如果原始空间为有限维, 即属性数有限, 那么总是存在一个高维特征空间使得样本线性可分。若 ∅ \varnothing 代表一个映射, 则在特征空间中的划分函数变为:

f ( x ) = ω T ϕ ( x ) + b f(\boldsymbol{x})=\boldsymbol{\omega}^{\mathrm{T}} \phi(\boldsymbol{x})+b f(x)=ωTϕ(x)+b

按照同样的方法, 先写出新目标函数的拉格朗日函数, 接着写出其对偶问题, 求 L 关于 ω \omega ω 和 b的极大, 最后运用 SOM 求解 α \alpha α 。可以得出:
(1) 原对偶问题变为:
max ⁡ α ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j ⟨ ϕ ( x i ) , ϕ ( x j ) ⟩ s.t.  α i ≥ 0 , i = 1 , … , n ∑ i = 1 n α i y i = 0 \begin{aligned} \max _{\alpha} & \sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} \left\langle\phi\left(x_{i}\right), \phi\left(x_{j}\right)\right\rangle \\ \text { s.t. } & \alpha_{i} \geq 0, i=1, \ldots, n \\ & \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{aligned} αmax s.t. i=1nαi21i,j=1nαiαjyiyjϕ(xi),ϕ(xj)αi0,i=1,,ni=1nαiyi=0
等价于:
在这里插入图片描述
(2) 原分类函数变为:
f ( x ) = ∑ i n α i y i ⟨ ϕ ( x i ) , ϕ ( x ) ⟩ + b \begin{aligned} f(x)=\sum_{i}^{n} \alpha_{i}y_{i} \left\langle\phi\left(x_{i}\right), \phi\left(x\right)\right\rangle + b \end{aligned} f(x)=inαiyiϕ(xi),ϕ(x)+b
等价于:
在这里插入图片描述

求解的过程中,只涉及到了高维特征空间中的内积运算,由于特征空间的维数可能会非常大,例如:若原始空间为二维,映射后的特征空间为5维,若原始空间为三维,映射后的特征空间将是19维,之后甚至可能出现无穷维,根本无法进行内积运算了,此时便引出了核函数(Kernel)的概念

在这里插入图片描述
因此,核函数可以直接计算隐式映射到高维特征空间后的向量内积,而不需要显式地写出映射后的结果,它虽然完成了将特征从低维到高维的转换,但最终却是在低维空间中完成向量内积计算,与高维特征空间中的计算等效(低维计算,高维表现),从而避免了直接在高维空间无法计算的问题。引入核函数后,原来的对偶问题与分类函数则变为:
(1) 对偶问题:
max ⁡ α ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j K ( x i , x j ) s.t.  α i ≥ 0 , i = 1 , … , n ∑ i = 1 n α i y i = 0 \begin{array}{ll} \max _{\alpha} & \sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} \red{K\left(x_{i}, x_{j}\right) }\\ \text { s.t. } & \alpha_{i} \geq 0, i=1, \ldots, n \\ & \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{array} maxα s.t. i=1nαi21i,j=1nαiαjyiyjK(xi,xj)αi0,i=1,,ni=1nαiyi=0

(2) 分类函数:
f ( x ) = ∑ i = 1 n α i y i K ( x i , x ) + b f(x)=\sum_{i=1}^{n} \alpha_{i} y_{i} \red{K\left(x_{i}, x\right)}+b f(x)=i=1nαiyiK(xi,x)+b
因此,在线性不可分问题中,核函数的选择成了支持向量机的最大变数,若选择了不合适的核函数,则意味着将样本映射到了一个不合适的特征空间,则极可能导致性能不佳。同时,核函数需要满足以下这个必要条件:
在这里插入图片描述
由于核函数的构造十分困难,通常我们都是从一些常用的核函数中选择,下面列出了几种常用的核函数:
在这里插入图片描述

6.5 软间隔支持向量机

前面的讨论中,我们主要解决了两个问题:当数据线性可分时,直接使用最大间隔的超平面划分当数据线性不可分时,则通过核函数将数据映射到高维特征空间,使之线性可分。然而在现实问题中,对于某些情形还是很难处理,例如数据中有噪声的情形,噪声数据(outlier)本身就偏离了正常位置,但是在前面的SVM模型中,我们要求所有的样本数据都必须满足约束,如果不要这些噪声数据还好,当加入这些outlier后导致划分超平面被挤歪了,如下图所示,对支持向量机的泛化性能造成很大的影响。
在这里插入图片描述

为了解决这一问题,我们需要允许某一些数据点不满足约束,即可以在一定程度上偏移超平面,同时使得不满足约束的数据点尽可能少,这便引出了“软间隔”支持向量机的概念

  • 允许某些数据点不满足约束 y ( ω ′ x + b ) ≥ 1 y(\omega'x+b)≥1 y(ωx+b)1
  • 同时又使得不满足约束的样本尽可能少。

在这里插入图片描述
这样优化目标变为:
在这里插入图片描述
如同阶跃函数,0/1损失函数虽然表示效果最好,但是数学性质不佳。因此常用其它函数作为“替代损失函数”。
在这里插入图片描述
图像如下所示:
在这里插入图片描述
支持向量机中的损失函数为hinge损失,引入“松弛变量”,目标函数与约束条件可以写为:
在这里插入图片描述
书中描述如下:
在这里插入图片描述

其中C为一个参数,控制着目标函数与新引入正则项之间的权重,这样显然每个样本数据都有一个对应的松弛变量,用以表示该样本不满足约束的程度,将新的目标函数转化为拉格朗日函数得到:
在这里插入图片描述
按照与之前相同的方法,先让L求关于 ω , b \omega,b ωb以及松弛变量的极小,再使用SMO求出 α \alpha α,有:

在这里插入图片描述
ω \omega ω代入 L L L化简,便得到其对偶问题:
在这里插入图片描述
将“软间隔”下产生的对偶问题与原对偶问题对比可以发现:新的对偶问题只是约束条件中的 α \alpha α多出了一个上限C,其它的完全相同,因此在引入核函数处理线性不可分问题时,便能使用与“硬间隔”支持向量机完全相同的方法。

6.6 支持向量机

对样本 ( x , y ) (\boldsymbol{x}, y) (x,y) , 传统回归模型通常直接基于模型输出 $f(\boldsymbol{x}) $ 与真实输出 $y $ 之间的差别来计算损失, 当且仅当 f ( x ) f(\boldsymbol{x}) f(x) y y y 完全相同时, 损失才为零. 与此不同,支持向量回归(Support Vector Regression, 简称 SVR) 假设我们能容忍 f ( x ) f(\boldsymbol{x}) f(x) y y y之间最多有 ϵ \epsilon ϵ的偏差, 即仅当 f ( x ) f(\boldsymbol{x}) f(x) y y y 之间的差别绝对值大于 ϵ \epsilon ϵ 时才计算损失. 如下图所示, 这相当于以 f ( x ) f(x) f(x) 为中心, 构建了一个宽度为 2 ϵ \epsilon ϵ 的间隔带, 若训练样本落入此间隔带, 则认为是被预测正确的。
在这里插入图片描述
在这里插入图片描述
与之前类似,根据拉格朗日与对偶问题的最终转换可得:
在这里插入图片描述

6.7核方法

在这里插入图片描述
表示定理对损失函数没有限制,对正则化项Ω仅要求单调递增,甚至不要求几是凸函数,意味着对于一般的损失函数和正则化项,优化问题(6.57)的最优解 h ∗ ( x ) h*(x) h(x)都可表示为核函数 κ ( x , x i ) κ(x,x_i) κ(xxi)的线性组合;这显示出核函数的巨大威力。人们发展出一系列基于核函数的学习方法,统称为“核方法”(内核
方法)。最常见的,是通过“核化”(即引入核函数)来将线性学习器拓展为非线性学习器

相关文章:

机器学习周志华学习笔记-第6章<支持向量机>

机器学习周志华学习笔记-第6章<支持向量机> 卷王&#xff0c;请看目录 6支持向量机6.1 函数间隔与几何间隔6.1.1 函数间隔6.1.2 几何间隔 6.2 最大间隔与支持向量6.3 对偶问题6.4 核函数6.5 软间隔支持向量机6.6 支持向量机6.7核方法 6支持向量机 支持向量机是一种经典…...

IP反向追踪技术,了解一下?

DOSS&#xff08;拒绝服务&#xff09;攻击是现在比较常见的网络攻击手段。想象一下&#xff0c;有某个恶意分子想要搞垮某个网站&#xff0c;他就会使用DOSS攻击。这种攻击常常使用的方式是IP欺骗。他会伪装成正常的IP地址&#xff0c;让网络服务器以为有很多平常的请求&#…...

2025蓝桥杯(单片机)备赛--扩展外设之UART1的原理与应用(十二)

一、串口1的实现原理 a.查看STC15F2K60S2数据手册: 串口一在590页&#xff0c;此款单片机有两个串口。 串口1相关寄存器&#xff1a; SCON:串行控制寄存器&#xff08;可位寻址&#xff09; SCON寄存器说明&#xff1a; 需要PCON寄存器的SMOD0/PCON.6为0&#xff0c;使SM0和SM…...

Linux 使用gdb调试core文件

core文件和gdb调试 什么是 core 文件&#xff1f;产生core文件的原因&#xff1f;core 文件的控制和生成路径gdb 调试core 文件引用和拓展 什么是 core 文件&#xff1f; 当程序运行过程中出现Segmentation fault (core dumped)错误时&#xff0c;程序停止运行&#xff0c;并产…...

Python后端flask框架接收zip压缩包方法

一、用base64编码发送&#xff0c;以及接收 import base64 import io import zipfile from flask import request, jsonifydef unzip_and_find_png(zip_data):# 使用 BytesIO 在内存中处理 zip 数据with zipfile.ZipFile(io.BytesIO(zip_data), r) as zip_ref:extracted_paths…...

【21-30期】Java技术深度剖析:从分库分表到微服务的核心问题解析

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 文章题目&#xff1a;Java技术深度剖析&#xff1a;从分库分表到微服务的核心问题解析 摘要&#xff1a; 本…...

Linux 中 find 命令使用详解

目录 一&#xff1a;基本语法二&#xff1a;搜索路径1、限制递归层级2、排除指定路径 三&#xff1a;匹配条件1、按照文件名搜索2、按文件类型搜索3、按文件大小搜索4、按文件权限搜索5、按文件所有者或所属组搜索6、按文件修改时间搜索 四&#xff1a;执行操作1、输出满足条件…...

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;其设计的目的是在Web浏览器和Web服务器之间进行实时通信&#xff08;实时Web&#xff09; WebSocket协议的优点包括&#xff1a; 1. 更高效的网络利用率&#xff1a;与HTTP相比&#xff0c;WebSocket的握手只…...

林业产品智能推荐引擎:Spring Boot篇

1 绪论 1.1 选题背景 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。计算机软件可以针对不同行业的营业特点以及管理需求&#xff0c;设置不同的功能&…...

【C++】LeetCode:LCR 077. 排序链表

题干 LCR 077. 排序链表 给定链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 解法&#xff1a;归并排序 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(null…...

git教程

文章目录 简介&#xff1a;使用教程&#xff1a;&#xff08;1&#xff09;安装git&#xff1a;&#xff08;2&#xff09;设置用户名和邮箱作为标识符&#xff1a;&#xff08;3&#xff09;建立本地仓库&#xff1a;本地仓库作用&#xff1a;&#xff08;1&#xff09;将文件…...

报表工具功能对比:免费易上手的山海鲸报表 vs 庞大用户群体的Tableau

在数据报表与分析领域&#xff0c;随着大数据技术的不断发展和企业数字化转型的深入&#xff0c;市面上涌现出了众多报表工具&#xff0c;为用户提供多元化的选择。对于企业数据分析师、IT人员及管理层来说&#xff0c;选择一款适合自己的报表工具至关重要。本文将从多个角度对…...

鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元

目录 前言 HarmonyOS NEXT&#xff1a;下一代操作系统的愿景 1、核心特性和优势 2、如何推动应用生态的发展 3、对开发者和用户的影响 华为云服务在鸿蒙原生应用开发中的作用 1、华为云ECS C系列实例 &#xff08;1&#xff09;全维度性能升级 &#xff08;2&#xff…...

CSS之3D转换

三维坐标系 三维坐标系其实就是指立体空间&#xff0c;立体空间是由3个轴共同组成的。 x轴:水平向右注意:x右边是正值&#xff0c;左边是负值 y轴:垂直向下注意:y下面是正值&#xff0c;上面是负值 z轴:垂直屏幕注意:往外面是正值&#xff0c;往里面是负值 3D移动 translat…...

uni-app初学笔记:文件路径与作用

components:可复用的组件pages:页面&#xff08;可见/不可见&#xff09;static:静态资源&#xff0c;存放图片视频等 &#xff08;相当于vue项目的 assets&#xff09;mainjs:Vue初始化入口文件App.vue:应用配置&#xff0c;用来配置App全局样式以及监听pages.json :配置页面路…...

子组件中$emit和update更新传递变量

vue2.6之后才可以使用update更新&#xff0c;vue2.6以下版本使用input和v-model 需求描述&#xff1a;蒙层上展示弹窗&#xff0c;弹窗点击关闭&#xff0c;需要向父传递关闭的信息 方法1&#xff0c;简便直接传递变量visible&#xff08;或者不改名isModalVisible也是可以的…...

浅谈Python库之lxml

一、基本介绍 lxml 是一个用 Python 编写的库&#xff0c;它提供了对 XML 和 HTML 文档的解析和操作功能。它使用 C 语言编写的 libxml2 和 libxslt 库作为后端&#xff0c;因此解析速度非常快&#xff0c;并且能够处理大型文档。lxml 支持 XPath 和 XSLT&#xff0c;这使得它在…...

spring boot框架漏洞复现

spring - java开源框架有五种 Spring MVC、SpringBoot、SpringFramework、SpringSecurity、SpringCloud spring boot版本 版本1: 直接就在根下 / 版本2:根下的必须目录 /actuator/ 端口:9093 spring boot搭建 1:直接下载源码打包 2:运行编译好的jar包:actuator-testb…...

IDEA插件CamelCase,快速转变命名格式

在IDEA上大小写转换的快捷键是 CtrlshitU 其它的格式转换的快捷键是 shitaltu 安装方法&#xff1a; file-settings-plugins-在marketplace搜索“CamelCase”-点击安装。 安装成功设置后&#xff0c;重新打开idea 下载完成后 点击 Apply 和OK 此刻就可以选中命名 并使用快捷…...

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch中的节点&#xff08;比如共20个&#xff09;&#xff0c;其中的10个选了一个master&#xff0c;另外10个选了另一个master&#xff0c;怎么办&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch中的节…...

Spring Boot 集成 Knife4j 的 Swagger 文档

在开发微服务应用时&#xff0c;API 文档的生成和维护是非常重要的一环。Swagger 是一个非常流行的 API 文档工具&#xff0c;可以帮助我们自动生成 RESTful API 的文档&#xff0c;并提供了一个友好的界面供开发者测试 API。本文将介绍如何在 Spring Boot 项目中集成 Knife4j …...

C# 创建快捷方式文件和硬链接文件

C# 创建快捷方式文件和硬链接文件 引言什么是快捷方式什么是硬链接文件硬链接与快捷方式不同 实现创建快捷方式文件实现创建硬链接文件小结 引言 什么是快捷方式 平常我们最常window桌面上点击的左下角带小箭头的文件就是快捷方式了&#xff0c;大家都很熟悉它。快捷方式是Wi…...

Linux高阶——1123—服务器基础服务器设备服务器基础能力

目录 1、服务器基础 1、服务器基本概述 2、服务器设计之初解决的问题 网络穿透 网络数据设备间的收发 3、服务器的类型C/S、B/S 2、服务器设备 将自己的服务器软件部署上线 3、代理服务器负载均衡&#xff0c;以及地址绑定方式 4、服务器的基础能力 1、服务器基础 1…...

LabVIEW串口通讯速度

LabVIEW串口通讯能达到的速度 LabVIEW支持高效的串口通讯&#xff0c;通过优化设置&#xff0c;理论上可以实现每次接收一个字节时达到1ms甚至更短的周期。不过&#xff0c;实际性能会受到以下因素的限制&#xff1a; ​ 波特率&#xff08;Baud Rate&#xff09;&#xff1a;…...

Jmeter中的监听器

3&#xff09;监听器 1--查看结果树 用途 调试测试计划&#xff1a;查看每个请求的详细信息&#xff0c;帮助调试和修正测试计划。分析响应数据&#xff1a;查看服务器返回的响应数据&#xff0c;验证请求是否成功。检查错误&#xff1a;识别和分析请求失败的原因。 配置步骤…...

缺失的第一个正数(java)

题目描述&#xff1a; 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 […...

跨部门文件共享安全:平衡协作与风险的关键策略

在现代企业中&#xff0c;跨部门协作已成为推动业务发展的关键因素。然而&#xff0c;随着信息的自由流动和共享&#xff0c;文件安全风险也随之增加。如何在促进跨部门协作的同时&#xff0c;确保文件共享的安全性&#xff0c;成为了一个亟待解决的问题。 一、明确文件分类与…...

一键AI换脸软件,支持表情控制,唇形同步Facefusion-3.0.0发布!支持N卡和CPU,一键启动包

嗨,小伙伴们!还记得小编之前介绍的FaceFusion 2.6.1吗?今天给大家带来超级exciting的消息 —— FaceFusion 3.0.0闪亮登场啦! &#x1f31f; 3.0.0版本更新 &#x1f3d7;️ 全面重构:修复了不少小虫子,运行更稳定,再也不怕突然罢工啦! &#x1f600; Live Portrait功能:新增…...

我要成为算法高手-递归篇

目录 题目1&#xff1a;汉诺塔题目2&#xff1a;合并两个有序链表题目3&#xff1a;反转链表题目4&#xff1a;两两交换链表中的结点题目5&#xff1a;Pow(x,n) 题目1&#xff1a;汉诺塔 面试题 08.06. 汉诺塔问题 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1…...

Git 提交的相对引用

Git 提交的相对引用 在 Git 中&#xff0c;使用 ~ 和 ^ 符号可以帮助你更灵活地引用提交历史中的特定提交。以下是这些符号的具体用法和示例&#xff1a; 1. ~&#xff08;波浪号&#xff09; ~ 符号用于指向上一个或多个父提交。它总是沿着第一个父提交的链向上追溯。 HEA…...

国内首家! 阿里云人工智能平台 PAI 通过 ITU 国际标准测评

近日&#xff0c;阿里云人工智能平台 PAI 顺利通过中国信通院组织的 ITU-T AICP-GA&#xff08;Technical Specification for Artificial Intelligence Cloud Platform&#xff1a;General Architecture&#xff09;国际标准和《智算工程平台能力要求》国内标准一致性测评&…...

CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标

注&#xff1a;本文为 “CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标” 几篇相关文章合辑。 文章中部分超链接、图片异常受引用之前的原文所限。 相机自动对焦原理 TriumphRay 于 2020-01-16 18:59:41 发布 凸透镜成像原理 这一部分大家中学应该就学过…...

小米C++ 面试题及参考答案下(120道面试题覆盖各种类型八股文)

指针和引用的区别?怎么实现的? 指针和引用有以下一些主要区别。 从概念上来说,指针是一个变量,它存储的是另一个变量的地址。可以通过指针来间接访问所指向的变量。例如,我们定义一个整型指针int *p;,它可以指向一个整型变量的内存地址。而引用是一个别名,它必须在定义的…...

WPF异步UI交互功能的实现方法

前面的文章我们提及过&#xff0c;异步UI的基础实现。基本思路主要是开启新的UI线程&#xff0c;并通过VisualTarget将UI线程上的Visual(即RootVisual)连接到主线程上的UI上即可渲染显示。 但是&#xff0c;之前的实现访问是没有交互能力的&#xff0c;视觉树上的UI并不能实现…...

2024 java大厂面试复习总结(一)(持续更新)

10年java程序员&#xff0c;2024年正好35岁&#xff0c;2024年11月公司裁员&#xff0c;记录自己找工作时候复习的一些要点。 java基础 hashCode()与equals()的相关规定 如果两个对象相等&#xff0c;则hashcode一定也是相同的两个对象相等&#xff0c;对两个对象分别调用eq…...

TCP/IP学习笔记

TCP\IP从实际应用的五层结构开始&#xff0c;自顶而下的去分析每一层。 TCP/IP五层架构概述 学术上面是TCP/IP四层架构&#xff0c;OSI/ISO是七层架构&#xff0c;实际中使用的是TCP/IP五层架构。 数据链路层 ICMP数据包分析 Wireshark抓包分析ICMP协议_wireshark抓ping包分析…...

基于IPMI的服务器硬件监控指标解读

在现代化数据中心中&#xff0c;服务器的稳定运行对于保障业务连续性至关重要。为了实时掌握服务器的健康状况&#xff0c;运维团队需要借助高效的监控工具。监控易作为一款功能强大的监控软件&#xff0c;支持使用IPMI&#xff08;Intelligent Platform Management Interface&…...

相亲交友小程序项目介绍

一、项目背景 在当今快节奏的社会生活中&#xff0c;人们忙于工作和事业&#xff0c;社交圈子相对狭窄&#xff0c;寻找合适的恋爱对象变得愈发困难。相亲交友作为一种传统而有效的社交方式&#xff0c;在现代社会依然有着巨大的需求。我们的相亲交友项目旨在为广大单身人士提…...

Day3 洛谷Day3 1161+1179+1200+1304

零基础洛谷刷题记录 Day1 2024.11.18 Day2 2024.11.25 Day3 2024.11.26 文章目录 零基础洛谷刷题记录1161&#xff1a;题目描述1161&#xff1a;解题代码1161&#xff1a;学习成果1179&#xff1a;题目描述&#xff08;成功写出&#xff09;1179&#xff1a;解题代码1179&…...

【通俗理解】ELBO(证据下界)——机器学习中的“情感纽带”

【通俗理解】ELBO&#xff08;证据下界&#xff09;——机器学习中的“情感纽带” 关键词提炼 #ELBO #证据下界 #变分推断 #机器学习 #潜变量模型 #KL散度 #期望 #对数似然 第一节&#xff1a;ELBO的类比与核心概念【尽可能通俗】 ELBO&#xff0c;即证据下界&#xff0c;在…...

Vue: computed 计算属性

在Vue中&#xff0c;computed属性是用于计算和返回基于其他响应式数据的值的功能。 适合在模板中使用&#xff0c;因为能够根据依赖的数据自动更新。 当依赖的数据变化时&#xff0c;computed属性会重新计算&#xff0c;并且会将结果缓存&#xff0c;以提高性能。 computed的…...

【自动化Selenium】Python 网页自动化测试脚本(上)

目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 &#xff08;1&#xff09;ID定位 &…...

数据库命令规范、数据库基本设计规范

所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字&#xff08;如果表名中包含关键字查询时&#xff0c;需要将其用单引号括起来&#xff09; 数据库对象的命名要能做到见名识意&#xff0c;并且最后不要超过32个字符 临时库表必…...

php常用伪协议整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理php常见的伪协议 php伪协议介绍 直观点&#xff0c;就是php可以识别的协议。 类似于我们访问网站的http协议&#xff0c;我们用浏览器访问我们自己本地文件的file协议等。 php可以识别这些协议&#xf…...

Redis与MySQL如何保证数据一致性

Redis与MySQL如何保证数据一致性 简单来说 该场景主要发生在读写并发进行时&#xff0c;才会发生数据不一致。 主要流程就是要么先操作缓存&#xff0c;要么先操作Redis&#xff0c;操作也分修改和删除。 一般修改要执行一系列业务代码&#xff0c;所以一般直接删除成本较低…...

NIO三大组件

现在互联网环境下&#xff0c;分布式系统大相径庭&#xff0c;而分布式系统的根基在于网络编程&#xff0c;而netty恰恰是java领域的网络编程的王者&#xff0c;如果要致力于并发高性能的服务器程序、高性能的客户端程序&#xff0c;必须掌握netty网络编程。 NIO基础 NIO是从ja…...

智能呼叫中心是什么?

智能呼叫中心是什么&#xff1f; 作者&#xff1a;开源智能呼叫中心系统 FreeIPCC&#xff0c;Github地址&#xff1a;https://github.com/lihaiya/freeipcc 智能呼叫中心是指运用人工智能、大数据分析等技术&#xff0c;对来电进行智能分析和处理的客户服务中心。以下是对智能…...

LSTM原理解读与实战

在RNN详解及其实战中&#xff0c;简单讨论了为什么需要RNN这类模型、RNN的具体思路、RNN的简单实现等问题。同时&#xff0c;在文章结尾部分我们提到了RNN存在的梯度消失问题&#xff0c;及之后的一个解决方案&#xff1a;LSTM。因此&#xff0c;本篇文章主要结构如下&#xff…...

24.11.26 神经网络 参数初始化

神经网络 感知神经网络 神经网络&#xff08;Neural Networks&#xff09;是一种模拟人脑神经元网络结构的计算模型&#xff0c;用于处理复杂的模式识别、分类和预测等任务 生物学&#xff1a; 人脑可以看做是一个生物神经网络&#xff0c;由众多的神经元连接而成 树突&#…...

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍&#xff0c;发展也很迅猛&#xff0c;学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出&#xff0c;但51单片机价格低廉、易学易用、性能成熟&#xff0c;在家电和工业控制中有一定的应用&#xff0c;而且学好了51单片机&…...