SVM理论推导

news2024/12/27 21:33:23

本文介绍支持向量机(SVM)的理论推导。

一、SVM 的基本思想

SVM 的目标是找到一个最优超平面,将样本分为不同的类别,并最大化类别间的间隔。

1. 线性可分情况下

在特征空间中找到一个超平面,使得:

  • 样本之间的分类间隔(margin)最大。
  • 分类误差最小。

超平面可以表示为:
w T x + b = 0 w^Tx+b=0 wTx+b=0
其中:

  • w 是法向量,决定了超平面的方向。
  • b 是偏置,决定了超平面到原点的距离。

对于任意样本 ( x i , y i ) (x_i ,y_i) (xi,yi),其中 y i y_i yi ∈{−1,1} 表示类别标签,超平面需要满足:
y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i + b) ≥ 1 yi(wTxi+b)1

1. 优化目标

最大化间隔(margin)等价于最小化 1 2 ∥ w ⃗ ∥ 2 \frac{1}{2} \|\vec{w}\|^2 21w 2:
min ⁡ w , b 1 2 ∥ w ⃗ ∥ 2 \min\limits_{w,b} \frac{1}{2} \|\vec{w}\|^2 w,bmin21w 2
约束条件:
y i ( w T x i + b ) > 1 , i = 1 , 2 , … , n y_i(w^T x_i + b) \gt 1, i = 1, 2, \dots, n yi(wTxi+b)>1,i=1,2,,n

二、线性不可分情况

在实际问题中,数据通常线性不可分,此时需要引入:

1. 松弛变量 ξ i ξ_i ξi
  • 允许部分样本点违反约束条件。
  • 目标函数变为:
    min ⁡ w , b , ξ 1 2 ∥ w ⃗ ∥ 2 + C ∑ i = 1 n ξ i \min\limits_{w,b,ξ} \frac{1}{2} \|\vec{w}\|^2 +C\sum\limits_{i=1}^n ξ_i w,b,ξmin21w 2+Ci=1nξi
    其中 C 是惩罚参数,控制误差与间隔的权衡。
2. 核函数
  • 将低维数据映射到高维特征空间,使其线性可分。
  • 核函数定义为:
    K ( x i , x j ) = ϕ ( x i ) ⋅ ϕ ( x j ) K(x_i, x_j) = ϕ(x_i) \cdot ϕ(x_j) K(xi,xj)=ϕ(xi)ϕ(xj)
    常用核函数包括:
  • 线性核: K ( x i , x j ) = x i ⋅ x j K(x_i, x_j) = x_i \cdot x_j K(xi,xj)=xixj
  • 多项式核: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(x_i, x_j) = (x_i \cdot x_j + c)^d K(xi,xj)=(xixj+c)d
  • 高斯核(RBF 核): K ( x i , x j ) = e x p ( − ∥ x i − x j ∥ 2 / ( 2 σ 2 ) ) K(x_i, x_j) = exp(−∥x_i − x_j ∥^2 /(2σ^2)) K(xi,xj)=exp(xixj2/(2σ2))
  • Sigmoid 核: K ( x i , x j ) = t a n h ( α x i ⋅ x j + c ) K(x_i, x_j) = tanh(αx_i ⋅ x_j +c) K(xi,xj)=tanh(αxixj+c)

三、SVM 的优化过程

SVM 的优化问题通常通过 拉格朗日对偶问题 解决:

1. 原始问题:

min ⁡ w , b , ξ 1 2 ∥ w ⃗ ∥ 2 + C ∑ i = 1 n ξ i s . t y i ( w T x i + b ) ≥ 1 − ξ i ,   ξ i ≥ 0 , i = 1 , 2 , … , n \begin{aligned} \min\limits_{w,b,ξ} \quad & \frac{1}{2} \|\vec{w}\|^2 +C\sum\limits_{i=1}^n ξ_i \\ {s.t} \quad & y_i (w^T x_i + b) ≥ 1−ξ_i ,\ & ξ_i ≥ 0, \quad & i = 1, 2, \ldots, n \end{aligned} w,b,ξmins.t21w 2+Ci=1nξiyi(wTxi+b)1ξi, ξi0,i=1,2,,n

实际上,引入核函数后,优化问题需要用 ϕ ( x i ) \phi(x_i) ϕ(xi) 代替约束条件中的 x i x_i xi,即原始问题变为如下:
min ⁡ w , b , ξ 1 2 ∥ w ⃗ ∥ 2 + C ∑ i = 1 n ξ i s . t y i ( w T ϕ ( x i ) + b ) ≥ 1 − ξ i ξ i ≥ 0 \begin{aligned} \min\limits_{w,b,ξ} \quad & \frac{1}{2} \|\vec{w}\|^2 +C\sum\limits_{i=1}^n ξ_i \\ {s.t} \quad & y_i (w^T \red{\phi(x_i)} + b) ≥ 1−ξ_i \\ & ξ_i ≥ 0 \end{aligned} w,b,ξmins.t21w 2+Ci=1nξiyi(wTϕ(xi)+b)1ξiξi0

变换一下约束条件的符号,可以得到等价的标准型:
min ⁡ ω , b , ξ 1 2 ∥ ω ⃗ ∥ 2 − C ∑ i = 1 n ξ i s . t 1 + ξ i − y i ω T ϕ ( x i ) − y i b ≤ 0 ξ i ≤ 0 , i = 1 , 2 , … , n (1) \begin{aligned} \min\limits_{\omega,b,ξ} \quad & \frac{1}{2} \|\vec{\omega}\|^2 - C\sum\limits_{i=1}^n ξ_i \\ {s.t} \quad & 1 + ξ_i - y_i \omega^T \red{\phi(x_i)} - y_i b \leq 0 \\ & ξ_i \leq 0, \quad & i = 1, 2, \ldots, n \end{aligned}\tag{1} ω,b,ξmins.t21ω 2Ci=1nξi1+ξiyiωTϕ(xi)yib0ξi0,i=1,2,,n(1)

由于我们往往不知道 ϕ ( x i ) \phi(x_i) ϕ(xi)的显示表达,因此我们需要想办法把优化问题转换为没有 ϕ ( x i ) \phi(x_i) ϕ(xi) 的等价问题,因此就引入了对偶问题。
注意:该优化问题强对偶成立,即原始问题的最优解 p ∗ p^* p 等于对偶问题的 d ∗ d^* d

2. 对偶问题:

将约束条件引入优化目标,得到对偶形式:
max ⁡ α ∑ i = 1 n α i − 1 2 ⋅ ∑ i = 1 n ∑ j = 1 n α i α j y i y j K ( x i , x j ) s . t 0 ≤ α i ≤ C , ∑ i = 1 n α i y i = 0 (2) \begin{aligned} \max\limits_{α} \quad & \sum\limits_{i=1}^n α_i - \frac{1}{2} \cdot \sum\limits_{i=1}^n \sum\limits_{j=1}^n α_i α_j y_i y_j K(x_i, x_j) \\ {s.t} \quad & 0 \leq α_i \leq C , \quad \sum\limits_{i=1}^n α_i y_i = 0 \end{aligned}\tag{2} αmaxs.ti=1nαi21i=1nj=1nαiαjyiyjK(xi,xj)0αiC,i=1nαiyi=0(2)
其中 α i α_i αi是拉格朗日乘子。

3. 优化算法:

对偶问题通常通过 SMO(序列最小优化) 或其他数值方法求解。

补充:对偶函数推导:

式(1)的拉格朗日函数为:
L ( ω , α , β ) = 1 2 ∥ w ⃗ ∥ 2 − C ∑ i = 1 n ξ i + ∑ i = 1 n α i ( 1 + ξ i − y i ω T ϕ ( x i ) − y i b ) + ∑ i = 1 n β i ξ i (3) \begin{aligned} L(\omega, \alpha, \beta) = & \frac{1}{2} \|\vec{w}\|^2 - C\sum\limits_{i=1}^n ξ_i + \sum\limits_{i=1}^n \alpha_i(1 + ξ_i - y_i \omega^T \red{\phi(x_i)} - y_i b) \\ & + \sum\limits_{i=1}^n \beta_iξ_i \\ \end{aligned}\tag{3} L(ω,α,β)=21w 2Ci=1nξi+i=1nαi(1+ξiyiωTϕ(xi)yib)+i=1nβiξi(3)

在给定 α , β \alpha,\beta α,β 对偶函数的值,实质上就是对于多有 ( ω , ξ i , b ) (\omega,ξ_i, b) (ω,ξi,b) 求最小值。即对偶问题为:
max ⁡ α , β θ ( α , β ) = inf ⁡ ω , ξ i , b L ( ω , α , β ) s . t α i ≥ 0 , β i ≥ 0 , i = 1 , 2 , … , n (4) \begin{aligned} \max\limits_{\alpha, \beta} \quad & \theta(\alpha,\beta) = \inf\limits_{\omega,ξ_i, b} L(\omega, \alpha, \beta) \\ {s.t} \quad & \alpha_i \geq 0, \quad \beta_i \geq 0, \quad i = 1, 2, \ldots, n \end{aligned}\tag{4} α,βmaxs.tθ(α,β)=ω,ξi,binfL(ω,α,β)αi0,βi0,i=1,2,,n(4)

其中 i n f inf inf 是极小化的意思。
注意:该问题没有等式约束,这里的 α i , β i \alpha_i, \beta_i αi,βi 都是原始优化问题的不等式约束的拉格朗日乘子。

为了求得拉格朗日函数(式子3)的最小值,需要在对应变量求一阶偏导等于0 即可,可得:
∂ L ∂ ω = 0 ⇒ ω = ∑ i = 1 n α i y i ϕ ( x i ) ∂ L ∂ ξ i = 0 ⇒ α i + β i = C ∂ L ∂ b = 0 ⇒ ∑ i = 1 n α i y i = 0 \begin{aligned} \frac{\partial L}{\partial \omega} = 0 & \Rightarrow \quad \omega = \sum\limits_{i=1}^n \alpha_iy_i\phi(x_i) \\ \frac{\partial L}{\partial ξ_i} = 0 & \Rightarrow \quad \alpha_i + \beta_i = C \\ \frac{\partial L}{\partial b} = 0 & \Rightarrow \quad \sum\limits_{i=1}^n \alpha_iy_i = 0 \end{aligned} ωL=0ξiL=0bL=0ω=i=1nαiyiϕ(xi)αi+βi=Ci=1nαiyi=0

可得:
1 2 ∥ w ⃗ ∥ 2 = 1 2 ω T ω = 1 2 ( ∑ i = 1 n α i y i ϕ ( x i ) ) T ( ∑ j = 1 n α j y j ϕ ( x j ) ) = 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j ϕ ( x i ) T ϕ ( x j ) \begin{aligned} \frac{1}{2} \|\vec{w}\|^2 & = \frac{1}{2} \omega^T\omega \\ &=\frac{1}{2} (\sum\limits_{i=1}^n \alpha_iy_i\phi(x_i))^T(\sum\limits_{j=1}^n \alpha_jy_j\phi(x_j)) \\ &= \frac{1}{2}\sum\limits_{i=1}^n\sum\limits_{j=1}^n \alpha_i\alpha_jy_iy_j\red{\phi(x_i)^T\phi(x_j)} \end{aligned} 21w 2=21ωTω=21(i=1nαiyiϕ(xi))T(j=1nαjyjϕ(xj))=21i=1nj=1nαiαjyiyjϕ(xi)Tϕ(xj)

又有:
− ∑ i = 1 n α i y i ω T ϕ ( x i ) = − ∑ i = 1 n α i y i ( ∑ j = 1 n α j y j ϕ ( x j ) ) T ϕ ( x i ) = − ∑ i = 1 n ∑ j = 1 n α i α j y i y j ϕ ( x j ) T ϕ ( x i ) \begin{aligned} -\sum\limits_{i=1}^n \alpha_iy_i \omega^T \phi(x_i) & = -\sum\limits_{i=1}^n \alpha_iy_i (\sum\limits_{j=1}^n \alpha_jy_j\phi(x_j))^T \phi(x_i) \\ & = - \sum\limits_{i=1}^n\sum\limits_{j=1}^n \alpha_i\alpha_jy_iy_j\red{\phi(x_j)^T\phi(x_i)} \end{aligned} i=1nαiyiωTϕ(xi)=i=1nαiyi(j=1nαjyjϕ(xj))Tϕ(xi)=i=1nj=1nαiαjyiyjϕ(xj)Tϕ(xi)

注意红色部分可以用核函数 K ( x i , x j ) K(x_i, x_j) K(xi,xj) 替换。(妙啊)

带入到式子(4)中,得:
θ ( α , β ) = ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j K ( x i , x j ) \theta(\alpha,\beta) = \sum\limits_{i=1}^n \alpha_i - \frac{1}{2} \sum\limits_{i=1}^n\sum\limits_{j=1}^n \alpha_i\alpha_jy_iy_j\red{K(x_i,x_j)} θ(α,β)=i=1nαi21i=1nj=1nαiαjyiyjK(xi,xj)

即推导出了对偶问题的目标函数式子(2)。

四、求解

对偶问题通常通过 SMO(序列最小优化) 或其他数值方法求解。

到这里思考一个问题:
我们的目标是求分割平面的 ω , b \omega,b ω,b ,但是求对偶问题得到的是 α \alpha α, 这要怎么办?

目前已经有对偶问题得到了其解 α \alpha α, 我们又有
ω = ∑ i = 1 n α i y i ϕ ( x i ) \omega = \sum\limits_{i=1}^n \alpha_iy_i\phi(x_i) ω=i=1nαiyiϕ(xi)
是否可以推出 ω \omega ω 呢? 答案是否定的,因为这里又出现了一个 ϕ ( x i ) \phi(x_i) ϕ(xi),大前提是我们并不知道 ϕ ( x i ) \phi(x_i) ϕ(xi) 的具体显示表达。

测试流程(a)

测试样本 x x x 输入,有

  • ω T ϕ ( x ) + b ≥ 0 \omega^T\phi(x) + b \geq 0 ωTϕ(x)+b0 则 y = +1 ,属于第一类,或正例;
  • ω T ϕ ( x ) + b < 0 \omega^T\phi(x) + b \lt 0 ωTϕ(x)+b<0 则 y = -1, 属于第二类,或负例;

对于实际场景,我们并不需要具体的 ω \omega ω, 如果知道 ω T ϕ ( x ) + b \omega^T\phi(x) + b ωTϕ(x)+b 也是可以的,这样就跳过了具体的 ϕ ( x ) \phi(x) ϕ(x)

那么我们继续看,上述中我们已经求得了 ω \omega ω的表达式, 带入可得:
ω T ϕ ( x ) = ( ∑ i = 1 n α i y i ϕ ( x i ) ) ϕ ( x ) = ∑ i = 1 n α i y i ϕ ( x i ) ϕ ( x ) = ∑ i = 1 n α i y i K ( x i , x ) \begin{aligned} \omega^T\phi(x) &= (\sum\limits_{i=1}^n \alpha_iy_i\phi(x_i))\phi(x) \\ &= \sum\limits_{i=1}^n \alpha_iy_i\red{\phi(x_i)\phi(x)} \\ &= \sum\limits_{i=1}^n \alpha_iy_i\red{K(x_i, x)} \end{aligned} ωTϕ(x)=(i=1nαiyiϕ(xi))ϕ(x)=i=1nαiyiϕ(xi)ϕ(x)=i=1nαiyiK(xi,x)

问题又来了, ω T ϕ ( x ) + b \omega^T\phi(x) + b ωTϕ(x)+b 中的 b 怎么得到?

我们继续看,回到对偶问题上,对偶问题的解一定满足 KKT 条件,而 KKT 条件中的互补松弛 条件:
∑ i = 1 n λ i f i = 0 , λ ≥ 0 , f i ≤ 0 \sum\limits_{i=1}^n \lambda_if_i = 0, \quad \lambda \geq 0, f_i \leq 0 i=1nλifi=0,λ0,fi0

对应本示例(结合式子3)表明:
对于 ∀ i = 1 , 2 , … , n \forall i = 1, 2, \ldots, n i=1,2,,n

  1. 要么 α i = 0 \alpha_i=0 αi=0,要么 1 + ξ i − y i ω T ϕ ( x i ) − y i b = 0 1 + ξ_i - y_i \omega^T \red{\phi(x_i)} - y_i b = 0 1+ξiyiωTϕ(xi)yib=0
  2. 要么 β i = 0 \beta_i = 0 βi=0,要么 ξ i = 0 \xi_i = 0 ξi=0

那么我们可以取一个 α i \alpha_i αi 满足 0 < α i < C 0 \lt \alpha_i \lt C 0<αi<C,则 β i = C − α i > 0 \beta_i = C - \alpha_i \gt 0 βi=Cαi>0,此时有:
β i = C − α i > 0 ⇒ ξ i = 0 \beta_i = C - \alpha_i \gt 0 \quad \Rightarrow \quad \xi_i = 0 βi=Cαi>0ξi=0
同样的:
α i ≠ 0 ⇒ 1 + ξ i − y i ω T ϕ ( x i ) − y i b = 0 \alpha_i \neq 0 \quad \Rightarrow \quad 1 + ξ_i - y_i \omega^T \red{\phi(x_i)} - y_i b = 0 αi=01+ξiyiωTϕ(xi)yib=0

可以得到 b 的表达式为:
b = 1 − y i ω T ϕ ( x i ) y i = 1 − y i ∑ j = 1 n α j y j K ( x j , x i ) y i \begin{aligned} b &= \frac{1 - y_i \red{\omega^T\phi(x_i)} }{y_i} \\ &= \frac{1 - y_i \red{\sum\limits_{j=1}^n \alpha_jy_j\red{K(x_j, x_i)} }}{y_i} \end{aligned} b=yi1yiωTϕ(xi)=yi1yij=1nαjyjK(xj,xi)

至此 b 就算出来了。实际中可以把所有的 满足 0 < α i < C 0 \lt \alpha_i \lt C 0<αi<C 中的 α i \alpha_i αi, 按照上面方法求出对应的 b, 然后求平均。

测试流程(b)

有了上面的推论,我们可以得到最终的测试流程:

输入测试样本 x x x,

  • ∑ i = 1 n α i y i K ( x i , x ) + b ≥ 0 \sum\limits_{i=1}^n \alpha_iy_iK(x_i, x) + b \geq 0 i=1nαiyiK(xi,x)+b0,则 y = +1
  • ∑ i = 1 n α i y i K ( x i , x ) + b < 0 \sum\limits_{i=1}^n \alpha_iy_iK(x_i, x) + b \lt 0 i=1nαiyiK(xi,x)+b<0,则 y = -1

总结:整个算法学习过程和测试流程都无需知道 ϕ ( x ) \phi(x) ϕ(x), 只需要知道 K ( x i , x j ) K(x_i, x_j) K(xi,xj) 就可以完成。

(至此,结束)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档

目录 一、接口测试基础概念 1、什么是接口 2、接口的类型 3、什么是接口测试 4、为什么要做接口测试 5、接口测试的实现方式 6、什么是自动化接口测试&#xff1f; 二、接口返回的数据格式 1、三种格式 2、Json 三、接口协议 1、webservice协议 2、dubbo协议 3、…

HDR视频技术之十一:HEVCH.265 的 HDR 编码方案

前文我们对 HEVC 的 HDR 编码优化技术做了介绍&#xff0c;侧重编码性能的提升。 本章主要阐述 HEVC 中 HDR/WCG 相关的整体编码方案&#xff0c; 包括不同应用场景下的 HEVC 扩展编码技术。 1 背景 HDR 信号一般意味着使用更多比特&#xff0c;一般的 HDR 信号倾向于使用 10…

ThinkPHP 8开发环境安装

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 1. 安装PHP8 Windows系统用户可以前往https://windows.php.net/downloads/releases/archives/下载PHP 8.0版本&am…

CAN201 Introduction to Networking(计算机网络)Pt.2 传输层

文章目录 3. Transport Layer&#xff08;传输层&#xff09;3.1 Multiplexing and demultiplexing&#xff08;多路复用和多路分解&#xff09;3.2 Connectionless transport&#xff1a;UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…

linux系统上SQLPLUS的重“大”发现

SQL plus版本&#xff1a; [oraclepg-xc2 ~]$ sqlplus -v SQL*Plus: Release 19.0.0.0.0 - Production Version 19.3.0.0.0 操作系统&#xff1a;CentOS Linux 7 (Core) 数据库&#xff1a;Oracle 19c Version 19.3.0.0.0 同样的SQL脚本在windos CMD sqlplus 执行没问题。…

Unity中实现人物残影效果

今天火柴人联盟3公测了&#xff0c;看到一个残影的效果&#xff0c;很有意思&#xff0c;上网查询了一下实现方式&#xff0c; 实现思路&#xff1a; 将角色的网格复制出来&#xff0c;然后放置到新建的物体的MeshFilter组件上&#xff0c;每隔几十毫秒在玩家的位置生成一个&a…

mysql mmm和mha对比

本文简单介绍MySQL的两个high availability方案&#xff0c;MMM和MHA。 MMM MMM(Master-Master replication managerfor Mysql)的基本组成如下&#xff0c; 主节点master1&#xff1a;承载写流量备主节点master2&#xff1a;replicate主节点master1的写流量&#xff0c;在主节…

探秘“香水的 ChatGPT”:AI 开启嗅觉奇幻之旅!

你没有看错&#xff0c;AI也能闻到味道了&#xff01;这是一家名为Osmo公司公布的信息&#xff0c;他们成功创造出了由AI生成的李子味道&#xff0c;快跟着小编一探究竟吧~ 【图片来源于网络&#xff0c;侵删】 Osmo公司的这项技术&#xff0c;通过分析香味的化学成分和人类嗅…

uniapp实现为微信小程序扫一扫的功能

引言 随着微信小程序的快速发展,越来越多的开发者开始关注和学习微信小程序的开发。其中,微信小程序的扫一扫功能是非常常用且实用的功能之一。通过扫描二维码,用户可以获取到相关的信息或者实现特定的功能。 正文 在过去,开发者需要使用微信开发者工具以及相关的开发文档…

网络ip地址改成什么比较好

在数字化时代&#xff0c;网络IP地址作为设备在网络中的唯一标识&#xff0c;扮演着至关重要的角色。然而&#xff0c;随着网络环境的日益复杂和网络安全问题的频发&#xff0c;许多用户开始考虑更改自己的网络IP地址&#xff0c;以期获得更好的网络体验和安全保障。那么&#…

iOS从Matter的设备认证证书中获取VID和PID

设备认证证书也叫 DAC, 相当于每个已经认证的设备的标识。包含了 VID 和 PID. VID: Vendor ID &#xff0c;标识厂商 PID: Product ID&#xff0c; 标识设备的 根据 Matter 对于设备证书的规定&#xff0c;DAC证书subject应该包含VID 和 PID. 可通过解析 X509 证书读取subject…

聊一聊 C#线程池 的线程动态注入

提高注入速度的两种方法 1. 降低GateThread的延迟时间 上一篇跟大家聊过 Result 默认情况下GateThread每秒会注入4个&#xff0c;底层逻辑是由 Blocking.MaxDelayMs250ms 变量控制的&#xff0c;言外之意就是能不能减少这个变量的值呢&#xff1f;当然可以的&#xff0c;这里我…

【嵌入式C语言】指针数组结构体

指针与数组 指针与数组指针数组数组指针 多维数组数组名的保存 结构体定义结构体定义结构体变量使用typedef简化结构体声明访问结构体成员结构体内存分配字节对齐位域定义位域位域的限制示例 指针与数组 指针数组和数组指针是两个不同的概念&#xff0c;它们涉及到指针和数组的…

HarmonyOS NEXT 实战之元服务:静态案例效果(二)

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图代码案例如下&#xff1a; Index里面实现 import { authent…

Android Studio超级详细讲解下载、安装配置教程(建议收藏)

博主介绍&#xff1a;✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神&#xff0c;答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战&#xff0c;深受全网粉丝喜爱与支持✌有…

从安全角度看 SEH 和 VEH

从安全角度看 SEH 和 VEH 异常处理程序是处理程序中不可预见的错误的基本方法之一 https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/exceptions/ SEH——结构化异常处理程序 就其工作方式而言&#xff0c;异常处理程序与其他处理程序相比相当基础&#xff0…

运行Zr.Admin项目(前端)

1.确认环境信息 我这里装的是node16.17版本的 官网16版本的最新为v16.20.2&#xff0c;下载链接https://nodejs.org/dist/v16.20.2/node-v16.20.2-x64.msi 2.去掉ssl 进入到Zr.Admin项目根目录&#xff0c;进入到ZR.vue 打开package.json 文件&#xff0c;删除启动命令配置中…

uniapp登录

第一步整登录 先整个appid APPID和APPSecret https://developers.weixin.qq.com/community/develop/article/doc/000ca4601b8f70e379febac985b413 一个账号只能整一个小程序 正确流程 调用uni.login https://juejin.cn/post/7126553599445827621 https://www.jb51.net/a…

esp32学习:用虫洞ESP32S3-EYE开发板快速实现USB摄像头(UVC免驱)

直接上干货&#xff1a;实现一个USB摄像头&#xff0c;免驱UVC设备。 硬件准备&#xff1a; 乐官方推荐的Cam开发板就是乐鑫带摄像头OV2604的esp32-s3-eye&#xff0c;我们虫洞esp32-s3-eye完全兼容这个板子哦&#xff0c;虫洞ESP32-S3-EYE 人脸识别 esp-cam升级 OpenCV LVGL …

CMake 构建项目并整理头文件和库文件

本文将介绍如何使用 CMake 构建项目、编译生成库文件&#xff0c;并将头文件和库文件整理到统一的目录中以便在其他项目中使用。 1. 项目结构 假设我们正在构建一个名为 rttr 的开源库&#xff0c;初始的项目结构如下&#xff1a; D:\WorkCode\Demo\rttr-master\|- src\ …