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

SVM理论推导

本文介绍支持向量机(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) 就可以完成。

(至此,结束)

相关文章:

SVM理论推导

本文介绍支持向量机&#xff08;SVM&#xff09;的理论推导。 一、SVM 的基本思想 SVM 的目标是找到一个最优超平面&#xff0c;将样本分为不同的类别&#xff0c;并最大化类别间的间隔。 1. 线性可分情况下&#xff1a; 在特征空间中找到一个超平面&#xff0c;使得&#…...

如何永久解决Apache Struts文件上传漏洞

Apache Struts又双叒叕爆文件上传漏洞了。 自Apache Struts框架发布以来&#xff0c;就存在多个版本的漏洞&#xff0c;其中一些漏洞涉及到文件上传功能。这些漏洞可能允许攻击者通过构造特定的请求来绕过安全限制&#xff0c;从而上传恶意文件。虽然每次官方都发布补丁进行修…...

【Java数据结构与算法】第10-14章

第10章 树结构的基础部分 10.1 二叉树 10.1.1 为什么需要树这种数据结构 10.1.2 树示意图 10.1.3 二叉树的概念 10.1.4 二叉树遍历的说明 10.1.5 二叉树遍历应用实例(前序,中序,后序) 10.1.6 二叉树-查找指定节点 思路图解 10.1.7 二叉树-删除节点 package com.atguigu.tree;…...

MacOS M3源代码编译Qt6.8.1

编译时间过长&#xff0c;如果不想自己编译&#xff0c;可以通过如果网盘进行下载&#xff1a; 链接: https://pan.baidu.com/s/17lvF5jQ-vR6vE-KEchzrVA?pwdts26 提取码: ts26 在macOS上编译Qt 6需要一些前置步骤和工具。以下是编译Qt 6的基本步骤&#xff1a; 安装Xcode和…...

3.银河麒麟V10 离线安装Nginx

1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖&#xff0c;前往 官网下载 pcre2依赖下载&#xff0c;前往Git下载 zlib依赖下载&#xff0c;前往Git下载 下载完成后完整的包如下&#xff1a; 如果网速下载不到请使用网盘下载 通过网盘分享的文件…...

实现 QTreeWidget 中子节点勾选状态的递归更新功能只影响跟节点的状态父节点状态不受影响

在 Qt 开发中&#xff0c;QTreeWidget 提供了树形结构的显示和交互功能。为了实现某个子节点勾选或取消勾选时&#xff0c;只影响当前节点及其子节点的状态&#xff0c;同时递归更新父节点的状态以正确显示 Qt::PartiallyChecked 或 Qt::Checked&#xff0c;我们可以借助 Qt 的…...

ubuntu24.04使用opencv4

ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…...

R语言数据分析案例46-不同区域教育情况回归分析和探索

一、研究背景 教育是社会发展的基石&#xff0c;对国家和地区的经济、文化以及社会进步起着至关重要的作用。在全球一体化进程加速的今天&#xff0c;不同区域的教育发展水平呈现出多样化的态势。这种差异不仅体现在教育资源的分配上&#xff0c;还表现在教育成果、教育投入与…...

flink sink doris

接上文&#xff1a;一文说清flink从编码到部署上线 网上关于flink sink drois的例子较多&#xff0c;大部分不太全面&#xff0c;故本文详细说明&#xff0c;且提供完整代码。 flink doris版本对照表 1.添加依赖 <!--doris cdc--><!-- 参考&#xff1a;"https…...

《探索 Apache Spark MLlib 与 Java 结合的卓越之道》

在当今大数据与人工智能蓬勃发展的时代&#xff0c;Apache Spark MLlib 作为强大的机器学习库&#xff0c;与广泛应用的 Java 语言相结合&#xff0c;为数据科学家和开发者们提供了丰富的可能性。那么&#xff0c;Apache Spark MLlib 与 Java 结合的最佳实践究竟是什么呢&#…...

Net9解决Spire.Pdf替换文字后,文件格式乱掉解决方法

官方文档 https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Text/Find-and-replace-text-on-PDF-document-in-C.html C# 在 PDF 中查找替换文本 原文件如下图&#xff0c;替换第一行的新编码&#xff0c;把41230441044替换为41230441000 替换代码如下&#xff…...

Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)

数据的存储是基于 主题&#xff08;Topic&#xff09; 和 分区&#xff08;Partition&#xff09; 的 Kafka是一个高可靠性的分布式消息系统&#xff0c;广泛应用于大规模数据处理和实时, 为了更方便地管理和监控Kafka集群&#xff0c;开发人员和运维人员经常需要使用可视化工具…...

青少年编程与数学 02-004 Go语言Web编程 21课题、应用部署

青少年编程与数学 02-004 Go语言Web编程 21课题、应用部署 一、应用部署二、GoWeb部署到WINDOWS系统中1. 安装Go环境2. 创建并编写Go Web应用3. 初始化Go模块4. 编译Go Web应用5. 配置和运行Nginx6. 运行Go Web应用7. 访问应用总结 三、GoWeb部署到LINUX系统中1. 准备Linux服务…...

009-spring-bean的实例化流程

1 spring容器初始化时&#xff0c;将xml配置的bean 信息封装在 beandefinition对象 2 所有的beandefinition存储在 beandefinitionMap的map集合中 3 spring对map进行遍历&#xff0c;使用反射创建bean实例对象 4 创建好的bean存在名为singletonObjects的map集合中 5 调用ge…...

Timsort算法

Timsort算法是一种混合、稳定且高效的排序算法&#xff0c;源自归并排序和插入排序。它通过将已识别的子序列&#xff08;称为“run”&#xff09;与现有run合并直到满足某些条件来完成排序。以下是对Timsort算法的详细解释及举例说明&#xff1a; Timsort算法概述 混合性&…...

uniapp+vue 前端防多次点击表单,防误触多次请求方法。

最近项目需求写了个uniappvue前端H5,有个页面提交表单的时候发现会有用户乱点导致数据库多条重复脏数据。故需要优化&#xff0c;多次点击表单只请求一次。 思路: 直接调用uni.showToast&#xff0c;点完按钮跳一个提交成功的提示。然后把防触摸穿透mask设置成true就行&#…...

八、Hbase

Hbase 一、NoSQL非关系型数据库简介1.NoSQL 的起因2.NoSQL 的特点3.NoSQL 面临的挑战4.NoSQL 的分类 二、HBase数据库概述1.HBase数据库简介2.HBase数据模型简介3.HBase数据模型基本概念4.Hbase概念视图(逻辑视图)5.Hbase物理视图6.Hbase主要组件7.Hbase安装8.Hbase的数据读写流…...

ubuntu安装sublime安装与免费使用

1. ubuntu安装sublime 参考官网: Linux Package Manager Repositories 2. 破解过程 打开如下网址,打开/opt/sublime_text/sublime_text https://hexed.it/ 3. 替换在hexed打开的文件中查找并替换: 4180激活方法 使用二进制编辑器 8079 0500 0f94 c2替换为 c641 05…...

Onedrive精神分裂怎么办(有变更却不同步)

Onedrive有时候会分裂&#xff0c;你在本地删除文件&#xff0c;并没有同步到云端&#xff0c;但是本地却显示同步成功。 比如删掉了一个目录&#xff0c;在本地看已经删掉&#xff0c;onedrive显示已同步&#xff0c;但是别的电脑并不会同步到这个删除操作&#xff0c;在网页版…...

图像裁剪与批量推理:解决分割和变化检测中的大图处理问题

引言 在分割、变化检测等任务中&#xff0c;我们经常会遇到一个问题&#xff1a;模型的输入尺寸是固定且较小的&#xff08;如256256或512512&#xff09;。当需要处理分辨率较高的大图时&#xff0c;直接输入到模型中显然是不切实际的。那么&#xff0c;如何高效地解决这个问…...

第4章 函数

2024年12月25日一稿 4.1 函数的定义 4.1.1 函数和像 4.1.2 函数的性质 4.1.3 常用函数 4.2 复合函数和反函数 4.2.1 复合函数 4.2.2 反函数 4.3 特征函数与模糊子集 4.4 基数的概念 4.4.1 后继与归纳集 4.4.2 自然数&#xff0c;有穷集&#xff0c;无穷集 4.4.3 基数 4.5 可数…...

【JavaEE进阶】Spring传递请求参数

目录 &#x1f38d;序言 &#x1f334;传递单个参数 &#x1f340;传递多个参数 &#x1f384;传递对象 &#x1f333;后端参数重命名&#xff08;后端参数映射&#xff09; &#x1f6a9;ReuqestParam注解 &#x1f38d;序言 访问不同的路径,就是发送不同的请求.在发送…...

在跨平台开发环境中构建高效的C++项目:从基础到最佳实践20241225

在跨平台开发环境中构建高效的C项目&#xff1a;从基础到最佳实践 引言 在现代软件开发中&#xff0c;跨平台兼容性和高效开发流程是每个工程师追求的目标。尤其是对于 C 开发者&#xff0c;管理代码的跨平台构建以及调试流程可能成为一项棘手的挑战。在本文中&#xff0c;我…...

无人零售及开源 AI 智能名片 S2B2C 商城小程序的深度剖析

摘要&#xff1a;本文聚焦无人零售这一新兴零售模式及其发展浪潮中崛起的开源 AI 智能名片 S2B2C 商城小程序。深入阐述无人零售的发展态势&#xff0c;细致剖析其驱动因素、现存问题&#xff0c;全面详细介绍小程序的功能特性、应用优势以及对无人零售的潜在价值&#xff0c;旨…...

PCL点云库入门——PCL库点云滤波算法之直通滤波(PassThrough)和条件滤波(ConditionalRemoval)

0、滤波算法概述 PCL点云库中的滤波算法是处理点云数据不可或缺的一部分&#xff0c;它们能够有效地去除噪声、提取特征或进行数据降维。例如&#xff0c;使用体素网格滤波&#xff08;VoxelGrid&#xff09;可以减少点云数据量&#xff0c;同时保留重要的形状特征。此外&#…...

v语言介绍

V 语言是一种多用途的编程语言&#xff0c;可以用于前端开发、后端开发、系统编程、游戏开发等多个领域。它的设计哲学是提供接近 C 语言的性能&#xff0c;同时简化开发过程并提高代码的安全性和可读性。接下来我会详细介绍 V 在前后端开发中的应用&#xff0c;并给出一个具体…...

GPT-O3:简单介绍

GPT-O3&#xff1a;人工智能领域的重大突破 近日&#xff0c;OpenAI发布了其最新的AI模型GPT-O3&#xff0c;这一模型在AGI评估中取得了惊人的成绩&#xff0c;展现出强大的能力和潜力。GPT-O3的出现标志着人工智能领域的重大进步&#xff0c;预计将在2025年实现更大的突破。 …...

重温设计模式--适配器模式

文章目录 适配器模式&#xff08;Adapter Pattern&#xff09;概述适配器模式UML图适配器模式的结构目标接口&#xff08;Target&#xff09;&#xff1a;适配器&#xff08;Adapter&#xff09;&#xff1a;被适配者&#xff08;Adaptee&#xff09;&#xff1a; 作用&#xf…...

API部署大模型

由于生产测试环境的服务器配置较低 不能够支撑大模型运行的配置 所以需要将大模型封装部署在A服务器上 在B服务器上进行调用 封装时可以使用FastAPI与Websocket两种通信方式进行通信 Websocket 在A服务器端部署大模型&#xff08;服务端&#xff09; import asyncio import …...

Linux -- 同步与条件变量

目录 同步 条件变量 pthread_cond_t pthread_cond_init&#xff08;初始化条件变量&#xff09; pthread_cond_destroy&#xff08;销毁条件变量&#xff09; pthread_cond_wait&#xff08;线程等待条件变量&#xff09; 重要提醒 pthread_cond_boardcast&#xff08…...

Linux之ARM(MX6U)裸机篇----1.开发环境搭建

下载开启FTP服务 作用&#xff1a;用于电脑与linux系统之前文件传输 如上&#xff0c;编辑完成后重启 Window下FTP客户端安装使用http://www.filezilla.cn/download网址下载 新建网络连接站点 主机后写虚拟机的ip地址&#xff0c;用ifconfig查出ipv4的地址 笔记本电脑中虚拟…...

【C语言】结构体模块化编程

在模块化编程中&#xff0c;结构体作为数据存储的主要方式之一&#xff0c;它不仅用于存储数据&#xff0c;还帮助实现代码的封装与隐私保护。通过将结构体定义放在 .c 文件中并使用 get_ 和 set_ 函数进行访问&#xff0c;我们可以实现对结构体数据的保护&#xff0c;同时降低…...

SpringCloudAlibaba技术栈-Nacos

1、什么是Nacos&#xff1f; Nacos是个服务中心&#xff0c;就是你项目每个功能模块都会有个名字&#xff0c;比如支付模块,我们先给这个模块起个名字就叫paymentService,然后将这个名字和这个模块的配置放到Nacos中&#xff0c;其他模块也是这样的。好处是这样能更好地管理项…...

Windows11家庭版启动Hyper-V

Hyper-V 是微软的硬件虚拟化产品&#xff0c;允许在 Windows 上以虚拟机形式运行多个操作系统。每个虚拟机都在虚拟硬件上运行&#xff0c;可以创建虚拟硬盘驱动器、虚拟交换机等虚拟设备。使用虚拟化可以运行需要较旧版本的 Windows 或非 Windows 操作系统的软件&#xff0c;以…...

《信管通低代码信息管理系统开发平台》Linux环境安装说明

1 简介 信管通低代码信息管理系统应用平台提供多环境软件产品开发服务&#xff0c;包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发&#xff0c;满足其独特需求。无论是简单的应用还是复杂的系统&#xff…...

第一节:电路连接【51单片机-L298N-步进电机教程】

摘要&#xff1a;本节介绍如何搭建一个51单片机L298N步进电机控制电路&#xff0c;所用材料均为常见的模块&#xff0c;简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机模块 ②恒流模块 ③开关电源 ④L298N模块 ⑤二相四线步进电机 ⑥电线若干 二、接线 三、L298N模…...

YoloDotNet 识别图像中特定关键点的位置

文章目录 1、初始化 Yolo 对象2、加载图像与检测关键点3、处理检测结果4、自定义关键点绘制和处理5、注意事项1、初始化 Yolo 对象 设置 YoloOptions,包括模型路径、模型类型(如果有专门的关键点检测模型类型则指定)、GPU 使用相关参数等。例如: var yoloOptions = new Yo…...

山景BP1048增加AT指令,实现单片机串口控制播放音乐(一)

1、设计目的 山景提供的SDK是蓝牙音箱demo&#xff0c;用户使用ADC按键或者IR遥控器&#xff0c;进行人机交互。然而现实很多场景&#xff0c;需要和单片机通信&#xff0c;不管是ADC按键或者IR接口都不适合和单片机通信。这里设计个AT指令用来和BP1048通信。AT指令如下图所示…...

Leetcode3218. 切蛋糕的最小总开销 I

题目描述&#xff1a; 有一个 m x n 大小的矩形蛋糕&#xff0c;需要切成 1 x 1 的小块。 给你整数 m &#xff0c;n 和两个数组&#xff1a; horizontalCut 的大小为 m - 1 &#xff0c;其中 horizontalCut[i] 表示沿着水平线 i 切蛋糕的开销。verticalCut 的大小为 n - 1 …...

基于自然语言处理(NLP)的智能客服系统

基于自然语言处理&#xff08;NLP&#xff09;的智能客服系统是现代客户服务领域的一项重要技术&#xff0c;它通过模拟人类对话的方式&#xff0c;为用户提供及时、准确和个性化的服务。以下是关于基于NLP的智能客服系统的一些关键要素和功能&#xff1a; 1. 自然语言理解&am…...

RAG实战:构建基于本地大模型的智能问答系统

RAG实战&#xff1a;构建基于本地大模型的智能问答系统 引言 在当今AI快速发展的时代&#xff0c;如何构建一个既智能又可靠的问答系统是一个重要课题。本文将介绍如何使用RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;结合本地大模型&#xff0c;构建一个高效的智…...

三维扫描在汽车/航空行业应用

三维扫描技术应用范围广泛&#xff0c;从小型精密零件到大型工业设备&#xff0c;都能实现快速、准确的测量。 通过先进三维扫描技术获取产品和物体的形面三维数据&#xff0c;建立实物的三维图档&#xff0c;满足各种实物3D模型数据获取、三维数字化展示、3D多媒体开发、三维…...

基于AI IDE 打造快速化的游戏LUA脚本的生成系统

前面写了一篇关于使用AI IDE进行C安全开发的博客《使用AI IDE 助力 C 高性能安全开发&#xff01;》&#xff0c; 得到许多同学们的喜欢&#xff0c;今天我们来继续在游戏开发中扩展一下AI的能力&#xff0c;看看能不能给游戏研发团队一些启发。 在游戏研发中&#xff0c;Lua曾…...

http的访问过程或者访问页面会发生什么

1. 建立连接 客户端与服务器之间需要建立 TCP 连接&#xff0c;常用步骤如下&#xff1a; DNS解析&#xff1a;客户端将目标 URL 转换为服务器的 IP 地址。三次握手&#xff1a;TCP 协议通过三次握手建立可靠连接&#xff0c;确保双方具备通信能力。传输层连接建立&#xff1…...

Lua 函数

Lua 函数 1. 概述 Lua是一种轻量级的编程语言&#xff0c;常用于游戏开发、脚本编写和嵌入式系统。在Lua中&#xff0c;函数是一等公民&#xff0c;意味着它们可以作为变量传递&#xff0c;也可以作为参数传递给其他函数。本文将详细介绍Lua中的函数&#xff0c;包括函数的定…...

产品升级!Science子刊同款ARGs-HOST分析,get!

凌恩生物明星chanpin 抗性宏基因-宿主分析 Science子刊同款分析 数据挖掘更进一步&#xff01; 抗生素的大量使用与滥用使微生物体内编码抗生素抗性的基因在环境中选择性富集&#xff0c;致病菌通过基因突变或者水平基因转移获得抗生素抗性基因后&#xff0c;导致抗生素治疗…...

Kubernetes PV及PVC的使用

前提条件 拥有Kubernetes集群环境&#xff0c;可参考&#xff1a;Kubernetes集群搭建理解Kubernetes部署知识&#xff0c;可参考&#xff1a;使用Kubernetes部署第一个应用 、Deloyment控制器拥有NFS服务&#xff0c;可参考&#xff1a;Linux环境搭建NFS服务 概述 Persistent…...

struct udp_sock

这个struct udp_sock结构体是Linux内核网络栈中用于表示一个UDP套接字的数据结构。它继承自struct inet_sock,这意味着它包含了所有IPv4或IPv6套接字共享的基础信息和函数指针。下面是对struct udp_sock中一些关键成员的解释: struct inet_sock inet;:这是udp_sock结构体的第…...

《机器学习》数据预处理简介

目录 1. 数据清洗&#xff08;Data Cleaning&#xff09; &#xff08;1&#xff09;处理缺失值 &#xff08;2&#xff09;处理异常值 &#xff08;3&#xff09;处理重复数据 2. 数据转换&#xff08;Data Transformation&#xff09; &#xff08;1&#xff09;特征缩…...

USB接口实现CDC(usb转串口功能)

主控&#xff1a;stm32f429 PHY芯片&#xff1a;usb3320 Cubemx System Core-RCC connectivity-USB_OTG_HS Middleware and Software Packs-USB_DEVICE 时钟配置&#xff1a;根据自己使用的MCU工作频率设置 Generate Code Keil5 打开工程 usbd_cdc_if.c这个文件&…...