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

SVM 支持向量机

Owner: 潘达斯奈基

#数据科学/机器学习/SVM

一 支持向量机简介

支持向量机(Support Vector Machine, SVM)是一个二元分类算法,是对感知器算法模型的一种拓展,现在的SVM算法支持线性分类和非线性分类应用,并且能够直接将SVM应用于回归应用中,通过OvR或者OvO的方式也可以将SVM应用在多分类领域中。在不考虑集成学习算法,不考虑特定的数据集的时候,在分类算法中SVM是非常优秀的

SVM的基本思想是:找到集合边缘上若干数据(称为支持向量(Support Vector)),用这些点找出一个平面(称为决策面),使得支持向量到该平面的距离最大

1.1 适用范围

  1. 二分类问题
  2. 高纬空间问题:SVM在高纬空间中变现出色,当特征维度较高时,SVM可以更好地处理数据,避免维度灾难
  3. 小样本问题:当训练样本数量较少时,SVM可以避免过拟合问题,具有较好的泛化能力
  4. 非线性问题:通过核函数将输入空间映射到高维特征空间,从而可以处理非线性问题
  5. 异常检测:SVM可以用于异常检测,通过找到与其它样本差异较大的样本点,可以有效地识别异常数据

1.2 SVM模型分类— 线性可分、线性、非线性

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机
  • 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机
  • 当训练样本线性不可分时,通过核函数和软间隔最大化,学习一个非线性支持向量机

image.png

image.png

二 感知机

理解SVM之前先了解一下感知机,感知机算法是最古老的分类算法之一,原理比较简单,不过模型的泛化能力弱,不过感知器模型是 SVM、神经网络、深度学习等算法的基础。感知机的思想很简单:在任意空间中,感知机模型寻找一个超平面,能够把所有的二分类别分割开。感知机模型的前提是:数据是线性可分的。

对于m个样本,每个样本有n维特征,以及二元类别输出y,感知机的目标是找到一个超平面
image.png

让一个类别的样本满足:θx>0;让另一个类别满足:θx<0

所以模型为:
image.png

正确分类:yθx>0,错误分类:yθx<0;所以我们可以定义我们的损失函数为:期望
使分类错误的所有样本到超平面的距离之和最小。

2.1 感知机与逻辑回归的损失函数比较

感知机的损失函数是计算错误分类下的样本到超平面的距离之和,期望使其最小

逻辑回归的几何意义也是在向量空间中寻找合适的超平面,但是损失函数不一样,逻辑回归是超平面一侧为正,另一侧为负,根据sigmod函数将分数映射到0-1之间,通过最大似然估计来赋予概率意义

2.2 几何距离与函数距离

感知机的损失函数是计算错误分类样本到超平面的距离,这距离如何算呢?

高中知识,点到直线的距离:点A(xi, yi)到直线ax+by+c=0的距离为
image.png

推广到高维空间中,任意一个点x0其对应标签为y0,到某平面image.png

的距离为:image.png

其中||w||为l2范数。

对那些正确分类的点,y0必然与wx0+b同号,所以可以将距离公式表示为image.png

称这个距离为某点到平面的几何距离,分子部分y0(wtx0+b)为某点到平面的函数距离

三 损失函数

感知机损失函数的定义:期望使分类错误的样本到超平面的距离之和最小

对于那些分类错误的点,由上面的距离公式可知,y0与wtx0+b符号是相反的,要想使损失函数大于0,那些错误分类的点距离在前面加个符号,即:image.png

因为此时分子和分母中都包含θ,当分子扩大N倍,分母也会随之扩大,所以可以固定分子或者分母为1,然后求另一个分子或者分母的倒数的最小化,作为损失函数,简化后为
image.png

直接使用梯度下降法可以对损失函数求解,不过由于这里的m是错误分类的样本,是不固定的,所以我们不能使用批量梯度下降法(BGD)求解,只能使用随机梯度下降(SGD)或者小批量梯度下降(MBGD);一般在感知机模型中使用SGD来求解。image.png

四 SVM算法思想

4.1与感知机对比

  • 相同的地方

    SVM也是通过寻找超平面,解决二分类问题的分类算法

    超平面一侧为负例,一侧为正例

    与感知吉祥通,通过sign给出预测标签,正例为+1, 负例为-1,模式判别式一样

    image.png

  • 不同的地方

    损失函数与感知机和逻辑回归的都不同

    感知机是通过判断错的点寻找超平面,逻辑回归是通过最大似然估计寻找超平面,SVM是通过支持向量寻找超平面,这也是SVM这个名字的由来

    感知机和逻辑回归是直接最小化损失函数得到的θ,或者叫W和b,SVM有两种求解方式,一种是直接最小化损失函数求θ,另一种寻找支持向量,找到支持向量超平面就自然找到了

4.2 高级的地方

感知机可以将可分的样本给分开来,但能给分开的超平面有很多,如何找到一个最好的超平面,这就是SVM要解决的问题

在感知机模型中,我们可以找到对个可以分类的超平面把数据分开,并且优化所有的点都离超平面尽可能的元,但是实际上离超平面足够远的点基本上都是被正确分类的,反而那些离超平面很近的点,是比较容易分错的image.png

假设未来拿到的数据含有一部分噪声,那么不同的超平面对于噪声的容忍度是不同的,显然最右边的图是最robust(健壮性)的

换一种角度看,其实是找到最宽的超平面

SVM是找到距离超平面近的点使其远离超平面。就是在支持向量机中,距离超平面最近的且满足一定条件的几个训练样本点被称为支持向量

五 SVM支持向量机

中心思想是:能正确分类的条件下,距离最近的点越远越好

由第一节知道SVM分为三类:线性可分支持向量机(硬间隔最大化解决);线性支持向量机(软间隔最大化);非线性支持向量机(升维、核函数)

  • 线性可分(Linearly Separable)

    在数据集中,如果数据可找到一个超平面,将其分开,那么这个数据叫做线性可分数据

  • 线性不可分(Learn Inseparable)

    在数据集中,没法找到一个超平面将两组数据分开, 那么数据就叫做线性不可分数据

  • 间隔(Margin)

    数据点到分割超平面的距离成为间隔

  • 支持向量(Support Vector)

    离分割超平面最近的那些点叫做支持向量

5.1 线性可分支持向量机

需要找到一个超平面,实现硬间隔最大化,要求:

  1. 能够完美分类正负例
  2. 距离最近的点越远越好

如何确定超平面:

  1. y = sign(wT x+b)
  2. wT x+b=0表示分割超平面
  3. 只要确认了w和b就确认了分割超平面

目标

转换为有约束的函数最优化问题:

image.png

其中γ’代表支持向量的函数距离

简化目标

一组w,b只能固定一个超平面

一个超平面对应无数多个w,b,只要找到其中任意一个w符合条件的w就可以了

选择最好求的,令γ’=1 则原最优化问题为:

image.png

image.png

等价于,求整体最大,分子固定为1,则分母越小,整体越大,**问题是为何为1/2**

为何是1/2,因为求导后可以将2给约掉

image.png

函数最优化问题

给定一个函数f(x)找到一个x使得f(x)最小,一般使用梯度下降、L-BFGS 、SMO算法解决函数最优化问题

最优化问题分为有约束条件的最优化问题无约束条件的最优化问题

  • 无约束条件的最优化问题

f ( x ) = m i n x ∈ R n f ( x ) f(x)=min_{x\in R^{n}}f(x) f(x)=minxRnf(x)

  上公式对x的取值范围没有做任何限制,所以成文无约束条件的最优化问题
  • 有约束条件的最优化问题

    例子:

    f ( x ) = 4 x 2 + 5 x + 10 f(x)=4x^2+5x+10 f(x)=4x2+5x+10

    最优化问题就是求得x使f(x)最小,结果为x=-5/8

    假定给定约束条件x≥0,则x=0的时候去的最小值

    那么如何通过一种方法求解这种带约束条件的函数最优化问题?

  • 原始问题

    为了解决这种带约束条件的函数最优化问题,我们定义带约束条件的最优化问题泛化表示方法:

    image.png

    可以将约束条件表述为k个不等式约束条件,和L个等式约束条件

    我们命名其为原始最优化问题

  • 拉格朗日函数

    定义某原始最优化问题的拉格朗日函数为:

    其中ci是第i个不等式约束函数(需要整理),hj是第j个等式约束函数

    αi和βi是拉格朗日乘子

  • 拉个朗日函数的特性

    image.png

    若x不满足之前的约束条件:

    image.png

    若x满足约束条件:

    image.png

    image.png

  • 对偶问题

    通过对偶,可以先将x用α、β来表示,进而求出α和β

    对于一个优化问题,我们希望:

    (1)当原问题非凸时能够找到一种办法将其转化为凸优化问题

    (2)给出原问题的解的下界,并用此下界逼近原函数的最小值

    为此,我们定义一个对偶函数:

    定义

    image.png

    此时极大化θD

    image.png

    称为拉格朗日的极大极小问题,也称为原始问题的对偶问题

    image.png

    为对偶最优化问题的最优解

    当f(x)和ci函数为凸函数,hj函数为仿射函数时,有:

    image.png

  • 如何求解

    KKT条件:

    image.png

求解最优化问题

对于原始问题:

image.png

我们构造拉格朗日函数:

image.png

可将原始有约束的最优化问题转换为对拉格朗日函数进行无约束的最优化问题(也叫二次规划问题)

image.png

由于我们的原始问题满足f(x)为凸函数,那么可以将原始问题的极小极大优化转换为对偶函数的极大极小优化进行求解:

对于原始问题:

image.png

对偶函数为:

image.png

下面就开始对求解对偶函数的第一步

image.png

  • 第一步求极小

    对拉格朗日函数分别求w和b的偏导:

    image.png

    image.png

    可以看出:我们已经求得了w和α的关系,下一步将w反代回原来的拉格朗日函数中就可以进行第二步求关于α的极大值

  • 反代

    image.pngimage.png

  • 整理对偶函数

    对偶函数的优化问题

    image.png

    去掉负号转换为求极小问题:

    image.png

    解决此问题,SVM的学习问题就完成了,通常使用SMO算法进行求解,可以求得一组α*是的函数最优化

  • 求得最终的超平面

    假设我们使用SMO算法,求w*很容易得:

    image.png

    b*如何求? 对于任意支持向量,有:

    image.png

    如何找到支持向量?根据KKT条件有:

    image.png

    那么所有α>0时后边的一项需要=0也就是

    image.png

    求b的过程:找到所有支持向量带进去求出所有b,然后求平均

    这样就得到分割超平面

    image.png

硬分割SVM总结

流程

  1. 原始目标:求得一组w和b使得分割margin最大

  2. 转换目标:通过拉格朗日函数构造目标函数,问题由求得n个w和1个b转换为求得m个α

    image.png

  3. 利用smo算法求得m个α*

  4. 利用求得的m个α求得w和b*

    image.png

5.2 线性支持向量机

硬间隔面临的问题

有些时候,线性不可分是由噪声点决定的

image.png

软间隔SVM

对于之前的讲述的线性可分svm可通过构造超平面令硬间隔最大化,从而求得最好的分隔超平面

条件:

  1. 正负例完美分开(体现在约束条件≥1上)
  2. 找到能使间隔最大的点(有约束条件的函数优化问题)

如果数据集线性不可分,意味着找不到一个合格的超平面

体现在优化问题上,任何的w和b都无法满足优化条件

引入松弛变量

对于之前问题,硬间隔不可分,体现在满足不了约束条件上,所以引入松弛变量ξi≥0(每
个数据点自己有一个ξi)

我们将约束条件放松为:

y i ( w ∗ x i + b ) > = 1 − ξ i y_{i}(w*x_{i}+b)>= 1-\xi_{i} yi(wxi+b)>=1ξi

这样就至少肯定有好多的w和b满足条件了,但是这相当于没有约束条件了,只要ξi无穷大,那么所有w和b都满足条件

ξ代表异常点嵌入间隔面的深度,我们要在能选出符合约束条件的最好的w和b的同时,让嵌入间隔面的总深度越少越好

目标函数优化

image.png

  1. 根据f(x)和约束条件构造拉格朗日函数

    image.png

    其中要求μi和αi≥0

  2. 优化原始问题:构造拉格朗日函数,将约束条件加入到其中,转换为凸优化问题

    image.png

  3. 对偶问题

    image.png

    先求L函数对w,b,ξ的极小值,再求其对α和μ的极大值

对偶问题求解,解决极小问题

对3个参数分别求偏导得到的一定的信息,反带回拉格朗日函数

image.png

回带拉格朗日函数

image.pngimage.png

整理约束条件解决极大问题

image.png

与之前的目标函数一模一样,只不过约束条件不同了

由于目标函数中没有出现C,可将约束条件的第2,3,4项合并,消去C,得到最终的待优化函数为:

image.png

与之前相比,知识多了个约束条件而已,仍然可以使用SMO来求解

分析软间隔问题的支持向量

结论:

  • αi=0 —>该点为分类正确的点
  • 0<αi<C—>该点为软边界上的点
  • αi=C—>该点嵌入了软边界内
    • 此时如果ξ<1 ,该点被正确分类
    • 此时如果ξ=1 ,该点刚好落在超平面上
    • 此时如果ξ>1 , 该点被错误分类

总结软间隔最大化算法

  1. 设定惩罚系数C,构造最优化问题

image.png

  1. 用SMO算法求出α*
  2. 计算

image.png

  1. 找到全部的支持向量,计算出

image.png

  1. 计算所有的b*s的平均值得到最终的

image.png

判别函数的另一种表达方式

对于线性SVM来说,判别函数为

image.png

由于

image.png

所以也有下面这种判别函数的形式:

image.png

我们得到一个很好的结论,每一次在计算判别函数结果时需要求得待判断点和所有训练集样本点的内积

5.3 非线性支持向量机

非线性不可分问题是如何处理的?SVM是采用升维,或者使用核函数将非线性问题转化为线性可分

SVM升维

对于线性SVM来说,最优化问题为:

image.png

如果使用φ(x)对训练集升维,最优化问题就变成了

image.png

image.png

升维带来的问题-维度爆炸

看似这种升维方式完美解决了线性不可分问题,但是带来了一个新问题

假设就使用多项式回归的方式进行升维:对于二维x1,x2升维后的结果是:x1,x2,x1*x2,x12,x22。如果是四维,五维…,可想而知,时间和空间的消耗太大

引入核函数

我们发现在SVM学习过程中

image.png

只需要求得φ(xi)·φ(xj)的结果,并不需要知道具体的φ(x)是什么

于是先驱们决定,跳过φ(x)直接定义φ(xi)·φ(xj)的结果,这样既可以达到升维的效果,又可以避免维度爆炸的问题

所以,定义

image.png

此时,对偶问题的目标函数变为了:

image.png

判别函数变为

image.png

常用核函数

  1. 线性核函数

image.png

  1. 多项式核函数

    image.png

  2. 高斯核函数

    image.png

  3. sigmod核函数

    image.png

5.4 SVM算法流程总结

  1. 选择某个核函数及其对应的超参数

  2. 选择惩罚系数C

  3. 构造最优化问题

    image.png

  4. 利用SMO算法求解出一组α*

  5. 根据α计算w

  6. 根据α找到全部支持向量,计算每个支持向量对应的bs

  7. 对bs求均值得到最后的b

学得的超平面为:

image.png

最终的判别函数为:

image.png

六 SMO算法

6.1 SMO思路

回顾下我们要解决的问题,在将SVM原始问题转换为对偶问题之后,我们先求得w和b的值,带回到原式中并化简,得到了如下的最优化问题:

image.png

可以看到,共有N个决策变量需要处理,每两个决策变量还会以乘积的形式出现在目标函数中,那么这个问题如何求解,就要用到SMO算法

其中(xi, yi)表示训练样本数据,xi 为样本特征,yi∈{−1,1}为样本标签,C 为惩罚系数由自己设定。上述问题是要求解 N 个参数(α1,α2,α3,…,αN),其他参数均为已知,有多种算法可以对上述问题求解,但是算法复杂度均很大。但 1998 年,由 Platt 提出的序列最小最优化算法(SMO)可以高效的求解上述 SVM 问题,它把原始求解 N 个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。

概括说,SMO算法主要分为以下两步:

  1. 选择接下来要更新的一对αi和αj,采用启发式的方法进行选择, 以使目标函数最大程度地接近其全局最优值
  2. 将目标函数对αi和αj进行优化,保持其它所有的αk(k<> i, j)不变

6.2 视为一个二元函数

暂时略过,有些难

七 SVM概率化输出

7.1 SVM合页损失

image.png

  • hinge loss function

    image.png

    下标“+”表示以下取正值的函数,我们用z表示中括号中的部分:

    image.png

    也就是说,如果数据分类正确,没有损失,如果分错,损失为z。

    合页损失函数如下图所示:

    image.png

    SVM的损失函数就是合页损失函数加上正则项, 即:

    image.png

    image.png

八 SVM多分类

image.png

one-versus-the-rest

对于K个类别的问题,在训练样本上,采用SVM训练出K个分类器,每个分类器将训练样本分成Ki类和非Ki类,然后采用SVM训练出模型。如上图所示,每个分类器仅仅能回答是否属于Ki的答案。此方法会造成一个样本数据属于多个类别的情况,上左图阴影部分

也能够採用:y(x)=maxk yk(x),即採用最大的函数间隔的那个类别。但不同的分类器有可
能尺度不同样,函数距离自然不能作为推断标准。
同一时候,训练样本的不平衡也可能造成分类器有误差。

one-versus-one

在 K 分类的情况下,训练出 K(K−1)2 个分类器,即每两个类别训练出一个分类器,然后依
据 K(K−1)2 个分类器的结果,採用投票方法给出预測结果。
此种方法依旧造成部分数据不属于任何类的问题,上右图阴影部分所看到的。

九 SVM算法小结

SVM算法是一个优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能之前,SVM算法基本占据了分类模型的统治地位。目前在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,但仍然是一个常用的机器学习算法。

优点

  1. 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果
  2. 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据
  3. 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题
  4. 样本量不是海量数据的时候,分类准确率高,泛化能力强

缺点

  1. 如果特征维度远远大于样本数,则SVM表现一般
  2. SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用
  3. 非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数
  4. SVM对缺失数据敏感

SVM对比逻辑回归

  1. LR采用log损失,SVM采用合页损失
  2. LR对异常值敏感,SVM对异常值不敏感
  3. 在训练集较小时,SVM较使用,而LR需要较多的样本
  4. LR 模型找到的那个超平面,是尽量让所有点都远离它,而 SVM 寻找的那个超平面,是
    只让最靠近中间分割线的那些点尽量远离,即只用到那些支持向量的样本。
  5. 对非线性问题的处理方式不同,LR 主要靠特征构造,必须组合交叉特征,特征离散化。
    SVM 也可以这样,还可以通过 kernel。
  6. SVM 更多的属于非参数模型,而 logistic regression 是参数模型,本质不同。其区别
    就可以参考参数模型和非参模型的区别

如何选择

那怎么根据特征数量和样本量来选择 SVM 和 LR 模型呢?Andrew NG 的课程中给出了以
下建议:

  • 如果 Feature 的数量很大,跟样本数量差不多,这时候选用 LR 或者是 Linear Kernel 的 SVM
  • 如果 Feature 的数量比较小,样本数量一般,不算大也不算小,选用 SVM+Gaussian Kernel
  • 如果 Feature 的数量比较小,而样本数量很多,需要手工添加一些 feature 变成第一种情况。
    (LR 和不带核函数的 SVM 比较类似。)

相关文章:

SVM 支持向量机

Owner: 潘达斯奈基 #数据科学/机器学习/SVM 一 支持向量机简介 支持向量机&#xff08;Support Vector Machine&#xff0c; SVM&#xff09;是一个二元分类算法&#xff0c;是对感知器算法模型的一种拓展&#xff0c;现在的SVM算法支持线性分类和非线性分类应用&#xff0c…...

第1章大型互联网公司的基础架构——1.9 LSM Tree

**LSM Tree&#xff08;Log-Structured Merge Tree&#xff09;是一种对高并发写数据非常友好的键值存储模型&#xff0c;同时兼顾了查询效率。**LSMTree是我们下面将要介绍的NoSQL数据库所依赖的核心数据结构&#xff0c;例如BigTable.、HBase、 Cassandra、TiDB 等。 1.9.1 …...

053 性能压测 单机锁 setnx

文章目录 性能压测-压力测试索引thymeleafnginx减少数据库查询&#xff08;代码有bug&#xff09;缓存 安全单机锁&#xff08;防止缓存击穿&#xff09;setnx pom.xml 性能压测-压力测试 1 响应时间&#xff08;Response Time: RT&#xff09;&#xff1a;响应时间指用户从客…...

眼见不一定为实之MySQL中的不可见字符

目录 前言 一、问题的由来 1、需求背景 2、数据表结构 二、定位问题 1、初步的问题 2、编码是否有问题 3、依然回到字符本身 三、深入字符本身 1、回归本质 2、数据库解决之道 3、代码层解决 四、总结 前言 在开始今天的博客内容之前&#xff0c;正在看博客的您先…...

【Java 面试 八股文】JVM 虚拟机篇

JVM 虚拟机篇 1. JVM组成1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f;1.2 什么是程序计数器&#xff1f;1.3 你能给我详细的介绍Java堆吗?1.4 Java 虚拟机栈1.4.1 Java Virtual machine Stacks (java 虚拟机栈)1.4.2 栈和堆的区别1.4.3 垃圾回收是否涉及栈内…...

达梦数据库学习笔记@1

目录 达梦数据库学习笔记一、表空间管理&#xff08;一&#xff09;默认表空间&#xff08;二&#xff09;相关数据字典&#xff08;三&#xff09;表空间操作&#xff08;四&#xff09;临时表空间管理 二、重做日志管理&#xff08;一&#xff09;系统视图&#xff08;二&…...

条款23:宁以non-member、non-friend替换member函数

1.使用场景举例 网络浏览器类 当然这一功能也可以由一个non-menber函数&#xff08;更好的封装&#xff0c;本条款的核心立意&#xff09;提供&#xff1a; 面向对象守则要求数据应该尽可能的被封装&#xff0c;然而与直观相反地&#xff0c;member函数clearEverything带来的封…...

代码审计初探

学会了基础的代码审计后&#xff0c;就该提高一下了&#xff0c;学一下一些框架的php代码审计 先从一些小众的、已知存在漏洞的cms入手 phpems php的一款开源考试系统 源码下载 https://down.chinaz.com/soft/34597.htm 环境部署 windows审计&#xff0c;把相关文件放到phps…...

2025前端框架最新组件解析与实战技巧:Vue与React的革新之路

作者&#xff1a;飞天大河豚 引言 2025年的前端开发领域&#xff0c;Vue与React依然是开发者最青睐的框架。随着Vue 3的全面普及和React 18的持续优化&#xff0c;两大框架在组件化开发、性能优化、工程化支持等方面均有显著突破。本文将从最新组件特性、使用场景和编码技巧三…...

Eclipse自动排版快捷键“按了没有用”的解决办法

快捷键按了没有用&#xff0c;通常是因为该快捷键方式被其他软件占用了&#xff0c;即别的软件也设置了这个快捷键&#xff0c;导致你按了之后电脑不知道该响应哪个软件。 解决办法&#xff1a;1.将当前软件的这个快捷键改了&#xff1b;2.找到占用的那个软件&#xff0c;把那…...

小型字符级语言模型的改进方向和策略

小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…...

请简述一下Prefab(预制体)的本质是什么?

在 Unity 中&#xff0c;Prefab&#xff08;预制体&#xff09;是一种非常重要的资产类型。 Prefab 本质上是一个可重复使用&#xff08;开发者可以在场景中多次实例化同一个预制体&#xff09;的游戏对象模板&#xff08;预制体就像一个模板&#xff0c;对预制体本身的修改会…...

【开源项目】分布式文本多语言翻译存储平台

分布式文本多语言翻译存储平台 地址&#xff1a; Gitee&#xff1a;https://gitee.com/dreamPointer/zza-translation/blob/master/README.md 一、提供服务 分布式文本翻译服务&#xff0c;长文本翻译支持流式回调&#xff08;todo&#xff09;分布式文本多语言翻译结果存储服…...

使用GPU训练模型

1.说明 本地训练模型可以用CPU和GPU&#xff0c;但是GPU的性能比CPU要好得多&#xff0c;所以如果有独立显卡的&#xff0c;尽量还是用GPU来训练模型。 使用GPU需要安装Cuda和Cudnn 2.安装Cuda 安装cuda之前&#xff0c;首先看一下显卡支持的cuda版本&#xff0c;在命…...

DPVS-3: 双臂负载均衡测试

测试拓扑 双臂模式&#xff0c; 使用两个网卡&#xff0c;一个对外&#xff0c;一个对内。 Client host是物理机&#xff0c; RS host都是虚拟机。 LB host是物理机&#xff0c;两个CX5网卡分别在两个子网。 配置文件 用dpvs.conf.sample作为双臂配置文件&#xff0c;其中…...

Spring Security+JWT+Redis实现项目级前后端分离认证授权

1. 整体概述 权限管理包括用户身份认证和授权两部分&#xff0c;简称认证授权。对于需要访问控制到资源&#xff0c;用户首先经过身份认证&#xff0c;认证通过后用户具有该资源的访问权限方可访问。 1.1 认证概述 认证是确认用户身份的过程&#xff0c;确保用户是谁。 1.1.1 …...

马斯克宣布Grok语音模式正式上线:早期测试版本 可能有一些问题

快科技2月23日消息&#xff0c;据报道&#xff0c;马斯克旗下xAI团队近期动作频频&#xff0c;继2月18日直播发布Grok最新版本Grok3后&#xff0c;马斯克又在社交平台X上宣布&#xff0c;Grok语音模式早期测试版现已在Grok应用程序上线&#xff0c;并对其表现给予了高度评价。 …...

P9631 [ICPC 2020 Nanjing R] Just Another Game of Stones Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 个操作分两种&#xff1a; chmax ⁡ ( l , r , k ) \operatorname{chmax}(l,r,k) chmax(l,r,k)&#xff1a;对每个 i ∈ [ l , r ] i \in [l,r] i∈[l,…...

请求go构建缓存,go clean -cache

go clean -cache go 构建时会产生很多缓存&#xff0c; 一般是目录&#xff1a;/Users/xxx/Library/Caches/go-build 此目录README&#xff1a; This directory holds cached build artifacts from the Go build system. Run "go clean -cache" if the directory …...

安全面试4

文章目录 给的源码是ThinkPHP框架的话&#xff0c;审计起来和没有使用框架的有什么不同&#xff0c;从流程上或者从关注的点上有什么不同框架代码审计的流程无框架代码审计的流程 反序列的时候&#xff0c;unserialize()反序列一个字符串的时候&#xff0c;对象会有一些魔术方法…...

HTML之JavaScript DOM操作元素(1)

HTML之JavaScript DOM操作元素&#xff08;1&#xff09; 3.对元素进行操作1.操作元素的属性 元素名.属性名 ""2.操作元素的样式 元素.style.样式名 "" 样式名 "-" 要进行驼峰转换3.操作元素的文本 元素名.innerText 只识别文本元素名…...

SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当下这个高速发展的时代&#xff0c;网络科技正以令人惊叹的速度不断迭代更新。从 5G …...

【十一】Golang 指针

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 指针指针定义指针初始化& 操作符new 函数初始…...

“conda”不是内部或外部命令,也不是可运行的程序或批处理文件

有的时候&#xff0c;我们发现在cmd黑框中输入conda时&#xff0c;cmd会显示“conda”不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件&#xff0c;那这时候该怎么解决呢&#xff1f; Step01&#xff1a;我们找到Anconda的安装目录。然后找到里面的bin文件夹&am…...

通过LM Studio本地私有化部署DeepSeek-R1模型,无网络也能用

打开LM Studio官网https://lmstudio.ai/ 选择适合自己的操作系统&#xff0c;下载LM Studio安装包 本地电脑安装成功后运行LM Studio&#xff0c;顶部文本框输入deepseek&#xff0c;点击搜索模型 在搜索结果中选择7B参数模型&#xff0c; 如上图右侧提示“No result found”说…...

GPU和FPGA的区别

GPU&#xff08;Graphics Processing Unit&#xff0c;图形处理器&#xff09;和 FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;不是同一种硬件。 我的理解是&#xff0c;虽然都可以用于并行计算&#xff0c;但是GPU是纯计算的硬件…...

CMake管理依赖实战:多仓库的无缝集成

随着软件复杂度的增加&#xff0c;单个项目可能需要依赖多个外部库或模块。这些依赖项可能是来自不同的代码仓库&#xff0c;如ATest和BTest。为了实现高效的依赖管理&#xff0c;CMake提供了多种方式来处理这种多仓库的情况。下面我们将详细介绍几种常见的方法&#xff0c;并通…...

Windows系统第一次运行C语言程序,环境配置,软件安装等遇到的坑及解决方法

明确需要编辑器和编译器&#xff0c;并选择自己要用什么&#xff08;我选的编辑器是VSCode&#xff1a;Visual Studio Code&#xff1b;编译器是gcc&#xff09;下载VSCode并配置环境变量&#xff08;这里没啥问题&#xff09;&#xff0c;安装C/C的拓展安装Cygwin&#xff0c;…...

2025最新版!Fiddler抓包实战:深度解析短视频评论采集技术

2025最新版&#xff01;Fiddler抓包实战&#xff1a;深度解析短视频评论采集技术&#xff08;脱敏&#xff09; 声明&#xff1a; 本文仅供学习交流使用&#xff0c;请勿用于非法用途。 导语&#xff1a; 短视频数据采集又有新突破&#xff01;你是否好奇如何安全、高效地获…...

Linux信号

目录 1. 信号的概念搞定&#xff08;输出结论&#xff0c;支撑我们的理解&#xff09; 补充知识 2.信号的产生 补充知识 3.信号的保存 4.阻塞信号 1. 信号其他相关常见概念 2. 在内核中的表示 3. sigset_t 4. 信号集操作函数 sigprocmask sigpending 5. 信号的…...

git,bash - 从一个远端git库只下载一个文件的方法

文章目录 git,bash - 从一个远端git库只下载一个文件的方法概述笔记写一个bash脚本来自动下载get_github_raw_file_from_url.shreanme_file.shfind_key_value.sh执行命令 END git,bash - 从一个远端git库只下载一个文件的方法 概述 github上有很多大佬上传了电子书库&#xf…...

深度学习(5)-卷积神经网络

我们将深入理解卷积神经网络的原理&#xff0c;以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例&#xff0c;它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过&#xff0c;当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…...

flex布局自定义一行几栏,靠左对齐===grid布局

模板 <div class"content"><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"…...

(五)趣学设计模式 之 建造者模式!

目录 一、 啥是建造者模式&#xff1f;二、 为什么要用建造者模式&#xff1f;三、 建造者模式怎么实现&#xff1f;四、 建造者模式的应用场景五、 建造者模式的优点和缺点六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方…...

【CentOS7】安装MinIO

下载rpm包 wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm 安装 rpm -ivh minio-20230809233022.0.0.x86_64.rpm 运行 server 后面跟着的使minio 的数据目录&#xff1b;console-address 后面跟着的是minio 的管理…...

vLLM学习1

调用方式 一、vLLM 提供的两种调用方式 1. Offline Batched Inference&#xff08;离线批处理&#xff09; 调用特点&#xff1a;一次性传入一批&#xff08;batch&#xff09;的请求&#xff0c;等待所有请求都处理完毕后&#xff0c;一次性返回推理结果。对用户而言&#x…...

ABC 385

目录 C. Illuminate Buildings D. Santa Claus E. Snowflake Tree C. Illuminate Buildings dp[ i ][ j ]&#xff1a;选择的 i 个建筑&#xff0c;间隔为 j。这样只需要两层循环就可以了&#xff0c;o&#xff08;n^2&#xff09; 其实本质只是个一维 dp&#xff0c;但我还需…...

綫性與非綫性泛函分析與應用_1.例題(下)-半母本

第1章 實分析與函數論:快速回顧(下) 五、基數;有限集和無限集相關例題 例題1:集合基數的判斷 判斷集合和集合B=\{a,b,c,d,e\}的基數關係。 解析: 可以構造一個雙射,例如,,,,。 所以,兩個集合具有相同的基數。 例題2:可數集的證明 證明整數集是可數集。 解析: …...

49 set与map的模拟实现

目录 一、源码及框架分析 二、模拟实现map和set &#xff08;一&#xff09;复用红黑树的框架&#xff0c;并支持insert &#xff08;二&#xff09;支持迭代器的实现 &#xff08;三&#xff09;map支持 [ ] &#xff08;四&#xff09;整体代码实现 一、源码及框架分析…...

鸿蒙NEXT应用App测试-通用测试

注意&#xff1a;大家记得学完通用测试记得再学鸿蒙专项测试 https://blog.csdn.net/weixin_51166786/article/details/145768653 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章…...

LangChain 技术入门指南:探索语言模型的无限可能

在当今的技术领域&#xff0c;LangChain 正逐渐崭露头角&#xff0c;成为开发语言模型应用的强大工具。如果你渴望深入了解并掌握这一技术&#xff0c;那么就跟随本文一起开启 LangChain 的入门之旅吧&#xff01; (后续将持续输出关于LangChain的技术文章,有兴趣的同学可以关注…...

UE5销毁Actor,移动Actor,简单的空气墙的制作

1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数&#xff0c;它会立即标记 Actor 为销毁状态&#xff0c;并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程&#xff0c;调用 Destroy() 后&#xff0c;Actor 立即进入销毁过程。具体…...

STM32基础篇(二)------GPIO

GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入…...

亲测Win11电脑可以安装LabVIEW的版本,及2015、2018、2020版本直接的区别

下面是我电脑的信息 设备名称 DESKTOP-04HHS8S 处理器 13th Gen Intel(R) Core(TM) i5-13500H 2.60 GHz 机带 RAM 16.0 GB (15.7 GB 可用) 设备 ID 82798104-C565-4167-A21E-5EB5DEFAA541 产品 ID 00331-20300-00000-AA678 系统类型 64 位操作系统, 基于 …...

Idea2024中搭建JavaFX开发环境并创建运行项目

Idea2024中搭建JavaFX开发环境并创建运行项目 本文以Java语言为例演示如何创建JavaFX开发项目和部署开发环境&#xff0c;读者可以根据个人实际灵活选择相关参数。 一、项目创建与环境搭建步骤 新建JavaFX项目&#xff0c;选择适合项目实际的语言、系统和JDK。 项目设置-设置…...

认知重构 | 自我分化 | 苏格拉底式提问

注&#xff1a;本文为 “认知重构 | 自我分化” 相关文章合辑。 心理学上有一个词叫&#xff1a;认知重构&#xff08;改变 “非黑即白&#xff0c;一分为二” 的思维方式&#xff09; 原创 心理师威叔 心理自救 2024 年 10 月 26 日 19:08 广东 你有没有过这样的时候&#x…...

MFC开发:如何创建第一个MFC应用程序

文章目录 一、概述二、MFC 的主要组件三、创建一个MFC窗口四、控件绑定消息函数 一、概述 MFC 是微软提供的一个 C 类库&#xff0c;用于简化 Windows 应用程序的开发。它封装了 Windows API&#xff0c;提供面向对象的接口&#xff0c;帮助开发者更高效地创建图形用户界面&am…...

nodejs:vue 3 + vite 作为前端,将 html 填入<iframe>,在线查询英汉词典

向 doubao.com/chat/ 提问&#xff1a; node.js js-mdict 作为后端&#xff0c;vue 3 vite 作为前端&#xff0c;编写在线查询英汉词典 后端部分&#xff08;express js-mdict &#xff09; 详见上一篇&#xff1a;nodejs&#xff1a;express js-mdict 作为后端&#xff…...

基于 Python Django 的校园互助平台(附源码,文档)

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…...

玩转 Java 与 Python 交互,JEP 库来助力

文章目录 玩转 Java 与 Python 交互&#xff0c;JEP 库来助力一、背景介绍二、JEP 库是什么&#xff1f;三、如何安装 JEP 库&#xff1f;四、JEP 库的简单使用方法五、JEP 库的实际应用场景场景 1&#xff1a;数据处理场景 2&#xff1a;机器学习场景 3&#xff1a;科学计算场…...