支持向量机(SVM):原理、应用与深入解析

news2025/5/11 11:52:42

内容摘要

本文深入探讨支持向量机(SVM)。阐述其作为分类算法在小样本、非线性及高维模式识别中的优势,详细介绍SVM基本概念、能解决的问题、核函数作用、对偶问题引入及常见核函数等内容,同时分析其优缺点,并与逻辑回归对比,助力读者全面掌握SVM技术。

关键词:支持向量机;分类算法;核函数;对偶问题;非线性分类

一、引言

在机器学习领域,支持向量机(Support Vector Machine,SVM)是一种备受瞩目的分类算法。它在处理小样本、非线性及高维模式识别问题时展现出独特的优势,并且能够推广应用到函数拟合等其他机器学习任务中。本文将全面深入地介绍SVM的原理、应用以及相关的核心概念,帮助读者透彻理解这一强大的机器学习工具。

二、什么是SVM

支持向量机中的支持向量是指在求解过程中,那些能够决定分类器的部分数据。简单来说,在一个二维环境中,如图1所示,点R、S、G和其他靠近中间线的点都可以看作支持向量,它们决定了分类器(即中间线)的具体参数。

在这里插入图片描述

图1 SVM示意图

SVM本质上是通过支持向量运算的分类器,它是一种二分类模型,目标是寻找一个超平面来对样本进行分割。在二维空间中,这个超平面就是一条直线;在高维空间中,它是一个n - 1维的平面。分割的原则是边界最大化,最终转化为一个凸二次规划问题来求解。根据训练样本的不同情况,SVM模型可分为以下几种:

  1. 线性可分支持向量机:当训练样本线性可分时,通过硬边界(Hard Margin)最大化,学习一个线性可分支持向量机。此时,存在一个超平面能够将不同类别的样本完全分开,并且使两类样本到超平面的距离最大化。
  2. 线性支持向量机:当训练样本近似线性可分时,通过软边界(Soft Margin)最大化,学习一个线性支持向量机。在实际应用中,数据往往不是完全线性可分的,软边界允许部分样本位于边界内,通过引入松弛变量来控制这种“容忍度”,从而找到一个合适的超平面。
  3. 非线性支持向量机:当训练样本线性不可分时,通过核技巧和软边界最大化,学习一个非线性支持向量机。核技巧可以将低维空间中线性不可分的数据映射到高维空间,使其变得线性可分,进而找到合适的超平面进行分类。

三、SVM能解决的问题

3.1 线性分类

在训练数据中,每个数据都有n个属性和一个二分类类别标志,可以将这些数据看作在一个n维空间里。我们的目标是找到一个n - 1维的超平面,这个超平面能够将数据分成两部分,每部分数据都属于同一个类别。

然而,这样的超平面可能有很多个,为了找到最佳的超平面,SVM增加了一个约束条件:要求这个超平面到每边最近数据点的距离是最大的,这样的超平面被称为最大边距超平面,对应的分类器即为最大边距分类器。通过最大化边距,可以提高分类器的泛化能力,使其对未知数据的分类更加准确。

3.2 非线性分类

支持向量机的一个显著优势是支持非线性分类。它可以结合使用拉格朗日乘子法(Lagrange Multiplier)、KKT(Karush Kuhn Tucker)条件,以及核函数来生成非线性分类器,进而处理非线性数据的分类问题。

核函数的作用是把原坐标系里线性不可分的数据投影到另一个空间,尽量使得数据在新的空间里线性可分。通过这种方式,SVM能够有效地处理复杂的非线性数据分布,在图像识别、文本分类等领域有着广泛的应用。

四、核函数特点及其作用

4.1 核函数的引入目的

引入核函数的主要目的是解决数据在原空间中线性不可分的问题。通过将数据投影到高维空间,使得原本在低维空间中无法用线性超平面分开的数据,在高维空间中变得线性可分。例如,对于一些复杂的数据集,在二维平面上可能无法找到一条直线将不同类别的数据完全分开,但通过核函数将其映射到三维或更高维空间后,就可能存在一个超平面能够实现准确分类。

4.2 核函数的特点

  1. 避免维数灾难:核函数的引入避免了“维数灾难”,大大减少了计算量。在传统的方法中,将数据映射到高维空间会导致计算量呈指数级增长,但核函数方法中,输入空间的维数n对核函数矩阵无影响,因此可以有效处理高维输入,使得在高维空间中进行数据处理变得可行。
  2. 无需知道变换函数细节:使用核函数无需知道非线性变换函数的形式和参数。只需要选择合适的核函数,就可以实现数据的映射和分类,降低了使用门槛,提高了算法的通用性。
  3. 影响特征空间性质:核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。不同的核函数适用于不同类型的数据和问题,选择合适的核函数能够显著提升SVM的分类效果。
  4. 可与多种算法结合:核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。这种灵活性使得核函数在机器学习领域得到了广泛的应用和拓展。

五、SVM为什么引入对偶问题

在SVM中引入对偶问题主要有以下几个重要原因:

  1. 简化求解过程:对偶问题将原始问题中的约束转为对偶问题中的等式约束,使得对偶问题往往更加容易求解。在原始问题中,约束条件可能较为复杂,而通过对偶变换,可以将问题转化为更容易处理的形式,降低求解难度。
  2. 自然引入核函数:可以很自然地引用核函数。因为拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的。在对偶问题中引入核函数,能够方便地处理非线性分类问题,进一步拓展了SVM的应用范围。
  3. 利用对偶问题的良好性质:在优化理论中,每个线性规划问题都有一个与之对应的对偶问题,对偶问题具有许多良好的性质。例如,对偶问题的对偶是原问题;无论原始问题是否是凸的,对偶问题都是凸优化问题;对偶问题可以给出原始问题一个下界;当满足一定条件时,原始问题与对偶问题的解是完全等价的。这些性质为SVM的求解和分析提供了有力的理论支持。

六、如何理解SVM中的对偶问题

在硬边界支持向量机中,问题的求解可以转化为凸二次规划问题。假设优化目标为 min ⁡ w , b 1 2 ∥ w ∥ 2 \min_{w,b} \frac{1}{2}\|w\|^2 w,bmin21w2,则约束条件为 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , ⋯   , m s.t. y_{i}(w^{T}x_{i}+b) \geq 1, i = 1,2,\cdots,m s.t.yi(wTxi+b)1,i=1,2,,m,其中w、b是模型参数。

SVM中的对偶问题求解步骤如下:

  1. 转化问题:将原问题转化为 min ⁡ w , b max ⁡ a i ≥ 0 { 1 2 ∥ w ∥ 2 + ∑ i = 1 m a i ( 1 − y i ( w T x i + b ) ) } \min_{w,b} \max_{a_{i} \geq 0}\left\{\frac{1}{2}\|w\|^2+\sum_{i = 1}^{m}a_{i}(1 - y_{i}(w^{T}x_{i}+b))\right\} w,bminai0max{21w2+i=1mai(1yi(wTxi+b))},这个式子与原问题等价。若满足原问题中的不等式约束,则在求max时, ∑ i = 1 m a i ( 1 − y i ( w T x i + b ) ) \sum_{i = 1}^{m}a_{i}(1 - y_{i}(w^{T}x_{i}+b)) i=1mai(1yi(wTxi+b))必须取0,此时与原问题等价;若不满足不等式约束,则在求max时,会得到无穷大。交换min和max获得其对偶问题: max ⁡ a i ≥ 0 min ⁡ w , b { 1 2 ∥ w ∥ 2 + ∑ i = 1 m a i ( 1 − y i ( w T x i + b ) ) } \max_{a_{i} \geq 0} \min_{w,b}\left\{\frac{1}{2}\|w\|^2+\sum_{i = 1}^{m}a_{i}(1 - y_{i}(w^{T}x_{i}+b))\right\} ai0maxw,bmin{21w2+i=1mai(1yi(wTxi+b))}。需要注意的是,交换之后的对偶问题和原问题并不相等,对偶问题的解小于或等于原问题的解。
  2. 寻找最优值下界:为了找到原问题最优值中最好的下界,通过一系列推导和分析,得出若满足一定条件,则可以通过求解对偶问题来得到原问题的一个下界。
    具体来说,若 1 2 ∥ w ∥ 2 < v \frac{1}{2}\|w\|^2 < v 21w2<v 1 − y i ( w T x i + b ) ≤ 0 1 - y_{i}(w^{T}x_{i}+b) \leq 0 1yi(wTxi+b)0无解,则v是问题的一个下界。通过进一步推导和转化,最终得到通过最大化 max ⁡ a i ≥ 0 min ⁡ w , b { 1 2 ∥ w ∥ 2 + ∑ i = 1 m a i ( 1 − y i ( w T x i + b ) ) } \max_{a_{i} \geq 0} \min_{w,b}\left\{\frac{1}{2}\|w\|^2+\sum_{i = 1}^{m}a_{i}(1 - y_{i}(w^{T}x_{i}+b))\right\} ai0maxw,bmin{21w2+i=1mai(1yi(wTxi+b))}可以求得原问题的一个较好下界。
  3. 求解对偶问题:令 L ( w , b , a ) = 1 2 ∥ w ∥ 2 + ∑ i = 1 m a i ( 1 − y i ( w T x i + b ) ) L(w,b,a)=\frac{1}{2}\|w\|^2+\sum_{i = 1}^{m}a_{i}(1 - y_{i}(w^{T}x_{i}+b)) L(w,b,a)=21w2+i=1mai(1yi(wTxi+b)) p ∗ p^{*} p为原问题的最小值,对应的w,b分别为 w ∗ w^{*} w b ∗ b^{*} b。对于任意的 a > 0 a > 0 a>0,有 p ∗ = 1 2 ∥ w ∗ ∥ 2 ≥ L ( w ∗ , b , a ) ≥ min ⁡ w , b L ( w ∗ , b , a ) p^{*}=\frac{1}{2}\|w^{*}\|^2 \geq L(w^{*},b,a) \geq \min_{w,b}L(w^{*},b,a) p=21w2L(w,b,a)w,bminL(w,b,a)。此时,取最大值即可求得好的下界,即 max ⁡ a i ≥ 0 min ⁡ w , b L ( w , b , a ) \max_{a_{i} \geq 0} \min_{w,b}L(w,b,a) ai0maxw,bminL(w,b,a),通过求解这个对偶问题,可以得到原问题的解或近似解。

七、常见的核函数

常见的核函数有多种,它们各自具有不同的特点和适用场景,如下表所示:

核函数表达式说明
Linear Kernel(线性核) k ( x , y ) = x T y k(x,y)=x^{T}y k(x,y)=xTy适用于数据线性可分的情况,计算简单
Polynomial Kernel (多项式核) k ( x , y ) = ( a x T y + c ) d k(x,y)=(ax^{T}y + c)^{d} k(x,y)=(axTy+c)d d ≥ 1 d \geq 1 d1为多项式的次数,可用于处理具有多项式关系的数据
Exponential Kernel (指数核) k ( x , y ) = exp ⁡ ( − ∣ x − y ∣ 2 σ 2 ) k(x,y)=\exp(-\frac{|x - y|}{2\sigma^{2}}) k(x,y)=exp(2σ2xy) σ > 0 \sigma > 0 σ>0,对数据的局部特征比较敏感
Gaussian Kernel (高斯核) k ( x , y ) = exp ⁡ ( − ∣ x − y ∣ 2 2 σ 2 ) k(x,y)=\exp(-\frac{|x - y|^{2}}{2\sigma^{2}}) k(x,y)=exp(2σ2xy2) σ \sigma σ为高斯核的带宽, σ > 0 \sigma > 0 σ>0,是最常用的核函数之一,能将数据映射到无限维空间,适用于数据分布复杂的情况
Laplacian Kernel(拉普拉斯核) k ( x , y ) = exp ⁡ ( − ∣ x − y ∣ σ ) k(x,y)=\exp(-\frac{|x - y|}{\sigma}) k(x,y)=exp(σxy) σ > 0 \sigma > 0 σ>0,与高斯核类似,但对数据的局部特征响应更迅速
ANOVA Kernel (方差分析核) k ( x , y ) = exp ⁡ ( − σ ( x 2 − y 2 ) 2 ) d k(x,y)=\exp(-\sigma(x^{2}-y^{2})^{2})^{d} k(x,y)=exp(σ(x2y2)2)d适用于特定的数据分析场景,如方差分析相关的问题
sigmoid Kernel (sigmoid核) k ( x , y ) = tanh ⁡ ( a x T y + c ) k(x,y)=\tanh(ax^{T}y + c) k(x,y)=tanh(axTy+c) tanh ⁡ \tanh tanh为双曲正切函数, a > 0 , c < 0 a > 0, c < 0 a>0,c<0,常用于神经网络等领域,可模拟神经元的激活函数

在实际应用中,需要根据数据的特点和问题的性质选择合适的核函数,以达到最佳的分类效果。

八、SVM的主要特点

  1. 非线性映射理论基础:SVM算法的理论基础是非线性映射,它利用内积核函数向高维空间进行非线性映射,从而能够处理非线性分类问题,突破了线性分类器的局限性。
  2. 最大化分类边界:SVM的目标是对特征空间划分得到最优超平面,其算法的核心是最大化分类边界。通过最大化分类边界,可以提高分类器的泛化能力,使分类结果更加稳定和可靠。
  3. 支持向量决定结果:支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量。这些支持向量位于分类边界附近,它们的位置和数量决定了分类器的性能,其他数据点的变化对分类结果的影响较小。
  4. 适用小样本学习:SVM是一种有坚实理论基础的新颖的适用小样本学习方法。它基本上不涉及概率测度及大数定律等问题,也简化了通常的分类和回归等问题,在小样本情况下能够有效地进行学习和分类。
  5. 避免维数灾难:SVM的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”,使得SVM在高维数据处理中具有优势。
  6. 鲁棒性较好:少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了SVM算法简单,具有较好的“鲁棒性”。增删非支持向量样本对模型没有影响,支持向量样本集具有一定的鲁棒性,在有些成功的应用中,SVM对核的选取不敏感。
  7. 凸优化问题求解:SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。而其他分类方法(如基于规则的分类器和人工神经网络)都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。
  8. 控制模型能力:SVM通过最大化决策边界的边缘来控制模型的能力。尽管如此,用户必须提供其他参数,如使用核函数类型和引入松弛变量等,以调整模型的性能。
  9. 小样本性能优异:SVM在小样本训练集上能够得到比其他算法好很多的结果。SVM优化目标是结构化风险最小,而不是经验风险最小,避免了过拟合问题,通过得到对数据分布的结构化描述,降低了对数据规模和数据分布的要求,有优秀的泛化能力。
  10. 全局最优解:SVM是一个凸优化问题,因此具有局部最优解一定是全局最优解的优点,保证了模型求解的准确性和稳定性。

九、SVM的主要缺点

  1. 大规模训练样本难以实施:SVM算法对大规模训练样本难以实施。SVM的空间消耗主要是存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量的,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时,该矩阵的存储和计算将耗费大量的机器内存和运算时间。如果数据量很大,SVM的训练时间就会比较长,例如垃圾邮件的分类检测没有使用SVM分类器,而是使用简单的朴素贝叶斯分类器,或者是使用逻辑回归模型分类。
  2. 多分类问题存在困难:用SVM解决多分类问题存在困难。经典的SVM算法只给出了二类分类的算法,而在实际应用中,一般可以通过多个二类SVM的组合来解决多类的分类问题,主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决多类的分类问题,但这些方法都存在一定的复杂性和局限性。
  3. 对缺失数据和参数敏感:SVM对缺失数据敏感,对参数和核函数的选择敏感。SVM性能的优劣主要取决于核函数的选取,目前比较成熟的核函数及其参数的选择都是人为根据经验来选取的,带有一定的随意性。在不同的问题领域,核函数应当具有不同的形式和参数,所以在选取时应该引入领域知识,但是目前还没有好的方法来解决核函数的选取问题。

十、逻辑回归与SVM的异同

10.1 相同点

  1. 分类算法:逻辑回归和SVM都是分类算法,用于将数据分类到不同的类别中。
  2. 监督学习算法:它们都属于监督学习算法,需要使用带有标签的训练数据进行模型训练。
  3. 判别模型:逻辑回归和SVM都是判别模型,通过学习数据的特征来直接预测样本的类别。
  4. 线性分类特性:如果不考虑核函数,那么逻辑回归和SVM都是线性分类算法,也就是说它们的分类决策面都是线性的。不过需要注意的是,逻辑回归通常不采用核函数的方法。

10.2 不同点

  1. 损失函数不同:逻辑回归采用log损失,其损失函数为 J ( θ ) = − 1 m ∑ i = 1 m [ y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ] J(\theta)=-\frac{1}{m} \sum_{i = 1}^{m}\left[y^{i} \log h_{\theta}\left(x^{i}\right)+(1 - y^{i}) \log (1 - h_{\theta}\left(x^{i}\right))\right] J(θ)=m1i=1m[yiloghθ(xi)+(1yi)log(1hθ(xi))];SVM采用合页(Hinge)损失,目标函数为 L ( w , b , a ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 n a i ( y i ( w T x i + b ) − 1 ) L(w,b,a)=\frac{1}{2}\|w\|^2-\sum_{i = 1}^{n}a_{i}(y_{i}(w^{T}x_{i}+b)-1) L(w,b,a)=21w2i=1nai(yi(wTxi+b)1)。逻辑回归方法基于概率理论,假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法接上文,逻辑回归通过极大似然估计的方法估计出参数的值;SVM基于几何边界最大化原理,认为存在最大几何边界的分类面为最优分类面。

  2. 对异常值敏感度不同:逻辑回归对异常值敏感,它考虑全局,试图让所有点都远离分类超平面,模型找到的超平面会尽量平衡所有样本点的位置关系。而SVM对异常值不敏感,只考虑局部的边界线附近的点,即支持向量,找到的超平面仅让最靠近中间分割线的那些点尽量远离,改变非支持向量样本并不会引起决策面的变化。例如在数据集中存在个别离群点时,逻辑回归的决策面可能会因这些点而发生较大改变,而SVM的决策面则相对稳定。

  3. 计算复杂度不同:对于海量数据,SVM的效率较低。因为SVM在求解时涉及二次规划问题,计算量与样本数量的平方相关,当样本量很大时计算负担沉重。而逻辑回归效率比较高,其计算复杂度相对较低。当样本较少,特征维数较低时,SVM和LR的运行时间均比较短,且SVM的运行时间更短一些,此时逻辑回归的准确率明显比SVM高。但当样本稍微增加时,SVM的运行时间开始增长,不过准确率赶超了逻辑回归,其运行时间仍在可接受范围内。当数据量增长到20000,特征维数增长到200时,SVM的运行时间剧烈增加,远远超过了逻辑回归的运行时间,而准确率却和逻辑回归相差无几,这主要是大量非支持向量参与计算,造成SVM的二次规划问题。

  4. 对非线性问题的处理方式不同:逻辑回归主要靠特征构造,必须组合交叉特征、进行特征离散化来处理非线性问题。当特征空间维度很高时,逻辑回归表现较差。SVM不仅可以像逻辑回归一样进行特征工程,还可以通过核函数来处理非线性问题。利用核函数,SVM可以通过对偶求解高效处理非线性数据,在处理复杂的非线性关系时具有优势。

  5. 损失函数与风险最小化方式不同:SVM的损失函数自带正则项,其 1 2 ∥ w ∥ 2 \frac{1}{2}\|w\|^2 21w2项被认为是结构风险最小化算法的主要体现。而逻辑回归的正则化必须另外在损失函数上添加正则项。从风险最小化角度来看,SVM自带结构风险最小化,更注重对数据分布结构的学习,以避免过拟合;逻辑回归则是经验风险最小化,侧重于在训练数据上的表现。

  6. 核函数使用差异:SVM会用核函数,通过核函数将数据映射到高维空间,从而实现非线性分类。逻辑回归一般不用核函数,虽然理论上逻辑回归也可以使用核函数,但实际应用中较少采用这种方式。

十一、总结

支持向量机(SVM)作为机器学习领域的重要算法,在小样本、非线性及高维模式识别等方面的优势,使其在众多领域得到了广泛应用,如生物医学、图像识别、文本分类等。通过引入核函数和对偶问题,SVM巧妙地解决了非线性分类和高维数据处理的难题,为复杂数据的分类和分析提供了有效的解决方案。

然而,SVM也并非完美无缺。其在大规模数据处理和多分类问题上的局限性,以及对参数和核函数选择的敏感性,都需要在实际应用中谨慎考虑。与逻辑回归等其他分类算法相比,SVM在损失函数、对异常值的敏感度、计算复杂度和处理非线性问题等方面存在差异,各有优劣。

在实际应用场景中,对于小样本、非线性的数据,SVM可能是一个很好的选择;而对于大规模数据和对计算效率要求较高的场景,逻辑回归等算法或许更为合适。

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

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

相关文章

chapter32_SpringMVC与DispatcherServlet

一、简介 从本章节开始进入SpringMVC的学习&#xff0c;SpringMVC最重要的类就是DispatcherServlet DispatcherServlet的本质是一个Servlet&#xff0c;回顾一下Servlet JavaWeb就是基于Servlet的Servlet接口有5个方法Servlet实现类是HttpServlet&#xff0c;自定义的Servle…

spring security解析

Spring Security 中文文档 :: Spring Security Reference 1. 密码存储 最早是明文存储&#xff0c;但是攻击者获得数据库的数据后就能得到用户密码。 于是将密码单向hash后存储&#xff0c;然后攻击者利用彩虹表&#xff08;算法高级&#xff08;23&#xff09;-彩虹表&…

STM32单片机C语言

1、stdint.h简介 stdint.h 是从 C99 中引进的一个标准 C 库的文件 路径&#xff1a;D:\MDK5.34\ARM\ARMCC\include 大家都统一使用一样的标准&#xff0c;这样方便移植 配置MDK支持C99 位操作 如何给寄存器某个值赋值 举个例子&#xff1a;uint32_t temp 0; 宏定义 带参…

多模态融合(十一): SwinFusion——武汉大学马佳义团队(二)

目录 一.摘要 二. Introduction 三. Related Work A. 特定任务图像融合方法 B. 通用图像融合方法 C. 视觉 Transformer 四.方法 A. 整体框架 B. 损失函数 C.解析 1. 整体框架 2. 特征提取 3. 注意力引导的跨域融合 五. 实验结果与讨论 A. 实验配置 B. 实现…

IDEA202403常用快捷键【持续更新】

文章目录 一、全局搜索二、美化格式三、替换四、Git提交五、代码移动六、调试运行 在使用IDEA进行程序开发&#xff0c;快捷键会让这个过程更加酸爽&#xff0c;下面记录各种快捷键的功能。 一、全局搜索 快捷键功能说明Shift Shift全局搜索Ctrl N搜索Java类 二、美化格式 …

从 LabelImg 到 Label Studio!AI 数据标注神器升级,Web 版真香

视频讲解&#xff1a; 从 LabelImg 到 Label Studio&#xff01;AI 数据标注神器升级&#xff0c;Web 版真香 Label Studio 支持图像、文本、音频、视频、时间序列等多类型数据标注&#xff0c;覆盖计算机视觉&#xff08;目标检测、语义分割&#xff09;、自然语言处理&#x…

【ESP32】ESP-IDF开发 | 低功耗蓝牙开发 | GAP协议 + 设备扫描例程

1. 简介 1.1 GAP协议 GAP&#xff08;General Access Protocol&#xff09;&#xff0c;全称通用访问协议&#xff0c;它定义了低功耗蓝牙设备的发现流程&#xff0c;设备管理和设备连接的建立。 低功耗蓝牙设备定义了4种角色&#xff1a; 广播者&#xff08;Broadcaster&…

网络开发基础(游戏)之 Socket API

Socket简介 Socket (套接字)是网络编程的基础&#xff0c;在 C# 中通过 System.Net.Sockets 命名空间提供了一套完整的 API 来实现网络通信。 网络上的两个程序通过一个双向的通信连接实现数据交换&#xff0c; 这个连接的一端称为一个Socket。 一个Socket包含了进行网络通信必…

行为审计软件:企业合规与内部监控的数字守门人

在当今高度数字化的商业环境中&#xff0c;企业运营产生的电子数据呈指数级增长&#xff0c;员工行为也日益复杂多样。行为审计软件应运而生&#xff0c;成为现代企业管理不可或缺的工具。这类软件通过系统化记录、分析和报告组织内部用户活动&#xff0c;帮助企业管理风险、确…

bat脚本转换为EXE应用程序文件

很多时候,我们使用电脑时会编辑bat脚本文件 很多时候&#xff0c;我们制作的玩笑&#xff0c;病毒也会使用这个格式. 但这个格式也有很多缺点 1,如果是需要管理员运行的程序,需要费劲的自己使用管理员身份运行 2,文件并不为大家所熟知,认同度不高 3,可以非常轻松的看到原代…

细说STM32单片机FreeRTOS任务管理API函数vTaskList()的使用方法

目录 一、函数vTaskList() 1、 函数说明 2、返回的字符串表格说明 3、函数的使用方法 二、 vTaskList()的应用示例 1、示例功能、项目设置 2、软件设计 &#xff08;1&#xff09;main.c &#xff08;2&#xff09;freertos.c &#xff08;3&#xff09;FreeRTOSConf…

DNS主从同步

安装软件 主配置中完成DNS解析&#xff1a;192.168.131.134 [rootlocalhost ~]# mount /dev/sr0 /mnt [rootlocalhost ~]# vim /etc/yum.repos.d/myrepo.repo [base] namebase baseurl/mnt/BaseOS gpgchcek0 enable1 [base2] namebase2 baseurl/mnt/AppStream gpgchcek0 enab…

双指针算法(部分例题解析)

快慢指针左右指针 前言 双指针&#xff0c;它通过设置两个指针来遍历数据&#xff0c;从而实现高效的查找、排序、去重等操作。双指针算法的核心在于通过合理地移动这两个指针&#xff0c;减少不必要的遍历&#xff0c;提高算法的效率。 283. 移动零 - 力扣&#xff08;LeetCo…

解决Windows打印问题的集成软件

家里或公司电脑经常为连不上打印机而烦恼&#xff0c;今天给大家推荐一款修复打印工具&#xff0c;该工具是采用易语言开发的集成化打印机故障修复软件&#xff0c;专为解决 Windows 系统&#xff08;含 32/64 位 Windows 7/10/11&#xff09;中因权限配置、服务异常、补丁缺失…

警惕阿里云中的yum update操作不当导致:/sbin/init被清空导致Linux无法正常启动

由于使用阿里云进行部署测试&#xff0c;因而会对yum update进行操作&#xff0c;这两天更新了systemd-239-82.0.3.4.al8.2.x86_64&#xff0c;但存在报错&#xff0c;然后进行yum history undo和清空yum cache&#xff0c;但出现操作Linux命令行无效。具体来说&#xff0c;几个…

关系型数据库MYSQL(续)

目录 三.MySQL事务原理分析 1.事务是什么&#xff1f; 2.执行事务的目的是什么&#xff1f; 3.事务是由什么组成的&#xff1f; 4.事务的特征是什么&#xff1f; 5.事务控制语句 6.ACID特性 6.1原子性&#xff08;A&#xff09; 6.2隔离性&#xff08;I&#xff09; …

WInform当今技术特性分析

Windows Forms (WinForms) 技术特性分析 引言 Windows Forms (WinForms) 作为微软最早推出的基于.NET的图形用户界面开发框架&#xff0c;已经存在了20多年。在如今充满了各种现代UI框架的软件开发生态系统中&#xff0c;WinForms仍然保持着其独特的地位。本文将深入分析WinF…

运筹学之模拟退火

目录 一、历史二、精髓思想三、案例与代码实现 一、历史 问&#xff1a;谁在什么时候提出模拟退火&#xff1f;答&#xff1a;模拟退火算法&#xff08;Simulated Annealing&#xff0c;SA&#xff09;是由斯图尔特柯尔斯基&#xff08;Scott Kirkpatrick&#xff09; 等人在 …

树莓派5-开发应用笔记

0.树莓派系统目录 /home&#xff1a;用户目录。 除了root用户外&#xff0c;其他所有的使用者的数据都存放在这个目录下&#xff0c;在树莓派的系统中&#xff0c;/home目录中有一个pi的子目录,这个就是pi用户的默认目录。 /bin&#xff1a; 主要放置系统的必备执行文件目录。 …

8.5/Q1,Charls最新文章解读

文章题目&#xff1a;Atherogenic index of plasma, high sensitivity C-reactive protein and incident diabetes among middle-aged and elderly adults in China: a national cohort study DOI&#xff1a;10.1186/s12933-025-02653-4 中文标题&#xff1a;中国中老年人群血…