SVM分类算法

article/2025/10/6 11:51:47

1.基本概念

支持向量机(SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。 实际应用中一般要解决觉得是多分类问题,SVM也可以用了来解决多分类,可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式等。

一般SVM有下面三种:

  1. 硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。
  2. 软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。(可以这么说,只是弱化了硬间隔支持向量机的条件)
  3. 非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

2.什么是SVM?

这里通过一个有趣的故事来介绍

SVM之大侠与反派:
在很久以前,大侠的心上人被反派囚禁,大侠想要去他的心上人,于是便去和反派谈判。反派说只要你能顺利通过三关,我就放了你的心上人。

现在大侠的闯关正式开始:

第一关:反派在桌子上似乎有规律地放了两种颜色的球,说:你用一根棍子分离它们。要求是尽量再放更多的球之后,仍然适用。
在这里插入图片描述
大侠很利索地放了一根棍子如下:
在这里插入图片描述
第二关:反派在桌子上放了更多的球,似乎有一个红球站错了阵营

图一
在这里插入图片描述
SVM就是试图把棍子放在最佳位置,好让在棍的两边有尽可能大的间隙!!!

于是大侠调整如下,现在即使反派放很多的球,棍子依然是一个很好的分界线

图二
在这里插入图片描述
由于反派放球的局限性或噪声的因素,放进的球可能更接近图一两个类的分隔界,这将使划分出现错误,而图二分隔界受影响最小.换言之,图二分隔界(划分超平面)所产生的分类结果是最鲁棒的,对未见实例的泛化能力强。

第三关:反派看大侠又解决了,心生一计给大侠一个更难的挑战,反派将球散乱地放在桌子上。
在这里插入图片描述
现在大侠已经没有办法用一根棍子将这些球分开了,怎么办呢?大侠灵机一动,使出三成内力拍向桌子,然后桌子上的球被震到空中,说时迟那时快,大侠瞬间抓起一张纸,插到了两种球的中间。
在这里插入图片描述
现在从反派的角度看,这些球像是被一条曲线分开了,于是他放了大侠的心上人。
在这里插入图片描述
在这里插入图片描述
概述一下:

当一个分类问题,数据是线性可分(linearly separable)的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东西就是核函数(kernel),用于切分小球的纸,就是超平面(hyperplane)。 如果数据集是N维的,那么超平面就是N-1维的。

3.硬间隔支持向量机

给定数据集D= {(x1, y1), (x2,y3),…,(xm,ym)},yi∈{ -1,+1 },进行二分类。

1.目标函数

在样本空间中,划分超平面可通过线性方程ωTx+b = 0来描述。其中 ω决定了超平面的方向,b决定了超平面的位置。

这里还要知道,一个向量到一个超平面的距离计算公式(不难理解的,和点到直线距离公式很像):
在这里插入图片描述

在这里插入图片描述
如图6.2所示,距离超平面最近的这几个训练样本点使式ωTx+b = -1(+1);它们被称为"支持向量",两个异类支持向量到超平面的距离为
在这里插入图片描述
也被称为间隔,所以我们要将间隔最大化,只要(为了方便后面求导,进行一点点的变形)
在这里插入图片描述
【注:上面直接取ωTx+b = -1(+1)实际上并不草率,取-+100,甚至-+1000都是可以的,只是将ω和b进行相应的放缩,仍表示同一个超平面。这里取 -1(+1)是为了方便计算】

2.约束条件

上面的目标函数是建立在一定的约束条件的基础上的

  1. 我们如何判断一条直线能够将所有的样本点都正确分类?

  2. 超平面的位置应该是在间隔区域的中轴线上,所以确定超平面位置的b参数也不能随意的取值

  3. 对于一个给定的超平面,我们如何找到对应的支持向量,来计算距离d?

如果(ω,b)能正确分类,则即对于(xi,yi)∈D,若yi= -1, ωTx+b<0; 若yi= +1, ωTx+b>0。

现在要求在高点,超平面的位置在间隔区域的中轴线上,则即对于(xi,yi)∈D,若yi= -1, ωTx+b<-1; 若yi= +1, ωTx+b>1。

所以呢,约束条件最终用一个不等式来表示(这里不等式取等号时,xi是一个支持向量)
在这里插入图片描述
【这里就可以体会到了 yi取 -1 or +1 和 ωTx+b = -1(+1)的好处了,把约束条件糅合到一个不等式中】

3.线性SVM优化基本描述

所以线性SVM优化数学的描述是
在这里插入图片描述
s. t. 表示约束条件,在这个不等式条件下,最小化 1 / 2 *ω2
这就是支持向量机(SupportVector Machine,简称SVM)的基本型

4.SVM的对偶问题

上面已经得到了SVM的基本型,那下一步怎么求呢?我们将利用拉格朗日乘子法得到对偶问题。这样做更高效;后面也可以自然的引入核函数,进而推广到非线性分类问题。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实际上,拉格朗日乘子法也是想把约束条件添加到目标函数里去构建一个新函数,结果虽然有了一些其他的条件,但此时的w,b已经不受限制,已经转移到我们加的一些参数身上。

现在开始SVM的拉格朗日对偶函数求解(这里没有等式约束条件,所以只考虑不等式即可):
在这里插入图片描述
第一步,我们就先求括号里的min部分
在这里插入图片描述
求min进行w,b的求偏导很容易得到:
在这里插入图片描述
再将结果带入前面的式子
在这里插入图片描述
最后求解模型(一般的问题都会转化为求min,所以将上式加个负号进行转化,SMO就类似其他算法利用梯度下降得到参数的算法)
在这里插入图片描述
【注意】

  1. α>0对应的样本是支持向量
  2. 假设我们有S个支持向量,则对应我们求出S个b,理论上这些b都可以作为最终的结果, 但是我们一般采用一种更健壮的办法,即求出所有支持向量所对应的b,然后将其平均值作为最后的结果。对于严格线性可分的SVM,b的值是有唯一解的,也就是这里求出的所有b都是一样的,这里我们仍然这么写是为了和后面加入软间隔后的SVM的算法描述一致

4.软间隔支持向量机

在前面的讨论中,我们一直假定训练样本在样本空间或特征空间中是线性可分的,即存在一个超平面能将不同类的样本完全划分开.然而,在现实任务中往往很难确定做到。

硬间隔对离群点也比较敏感,如图
在这里插入图片描述
第二个图加入了一个离群点,超平面发生了很大的变动,形成的间隔也变得很小,这样泛化效果会变弱。缓解该问题的一个办法是允许支持向量机在一些样本上出错.为此,要引入"软间隔"的概念。这样处理也解决了一定程度上的过拟合。如图
在这里插入图片描述
软间隔允许一些样本不满足约束条件 yi*(ωTxi+b)>1,为此对于每个样本引入了松弛变量ξi,优化问题变为:
在这里插入图片描述【注:C>0,被称为惩罚参数,即为 scikit-learn 中的 svm 超参数C。当C设的越大,意味着对离群点的惩罚就越大,最终就会有较少的点跨过间隔边界,模型也会变得复杂。而C设的越小,则较多的点会跨过间隔边界,最终形成的模型较为平滑。】

接下来和硬间隔的求法类似
在这里插入图片描述
再进行和上面一样的求导计算,这里就直接给出结果了
在这里插入图片描述
代入得到
在这里插入图片描述
看到最后的结果,与硬间隔相比,我们仅仅多了一个约束条件
在这里插入图片描述
最后模型求解同样可以用SOM算法

5.非线性支持向量机

现在我们讨论线性不可分的时候,也就是大侠闯的第三关,他无法再单纯的用一根棍子来划分了,所以他往桌子上一拍球飞起来,再用一张纸插到了两种球的中间。大侠把在二维平面的球转化到了三维上从而解决了问题,所以线性不可分的低维特征数据,我们可以将其映射到高维,就能线性可分

1.核函数的引入

回顾我们的线性可分优化目标函数
在这里插入图片描述
注意到上式低维特征仅仅以内积xixj的形式出现,如果我们定义一个低维特征空间到高维特征空间的映射ϕ(如2维到5维的映射),将所有特征映射到一个更高的维度,让数据线性可分。也就是说现在的SVM的优化目标函数变成:
在这里插入图片描述
可以看到,和线性可分SVM的优化目标函数的区别仅仅是将内积xixj替换为ϕ(xi)∙ϕ(xj)。这样子其实并不完美,我们看看,假如是一个2维特征的数据,我们可以将其映射到5维来做特征的内积,如果原始空间是三维,可以映射到到19维空间,似乎还可以处理。但是如果我们的低维特征是100个维度,1000个维度呢?那么我们要将其映射到超级高的维度来计算特征的内积。这时候映射成的高维维度是爆炸性增长的,这个计算量实在是太大了,而且如果遇到无穷维的情况,就根本无从计算了。

好吧,核函数该隆重出场了!

假设ϕ是一个从低维的输入空间χ(欧式空间的子集或者离散集合)到高维的希尔伯特空间的H映射。那么如果存在函数K(x,z),对于任意x,z∈χ,都有:
K(x,z)=ϕ(x)∙ϕ(z)。 那么我们就称K(x,z)K(x,z)为核函数。

K(x,z)K(x,z)的计算是在低维特征空间来计算的,它避免了在刚才我们提到了在高维维度空间计算内积的恐怖计算量。核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上。

2.核函数

在这里插入图片描述

6.分类SVM小结

有了核函数SVM才算是比较完整的。现在我们进行一个总结,不分线性是否可分:

输入是m个样本(x1,y1),(x2,y2),…,(xm,ym),其中x为n维特征向量。y为二元输出,值为1,或者-1。
输出是分离超平面的参数w∗和b∗分类决策函数。

算法过程:

  1. 选择适当的核函数K(x,z)和一个惩罚系数C>0, 构造约束优化问题:
    在这里插入图片描述
  2. 用SMO算法求出上式最小时对应的α向量的值α∗向量。
  3. 利用
    在这里插入图片描述
    得到w∗,其实也可以不算的。
  4. 找出所有的S个支持向量,即满足0<αs<C对应的样本(xs,ys),
    在这里插入图片描述
    5.得到超平面

在这里插入图片描述

7.SMO算法

这是一个二次规划问题,可使用通用的二次规划算法来求解;然而该问题的规模正比于训练样本数,这会在实际任务中造成很大的开销。所以我们使用SMO算法。

像神经网络、线性回归都可以使用到梯度下降法求解参数,但SVM用梯度下降法会相当的复杂,所以这里用到了一个叫‘坐标下降’的方法。简单来说,梯度下降每次是将所有的参数都更新,而坐标下降每次就更新两个参数,这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。

  1. 为什么选择两个变量?
    我们要注意到约束条件:在这里插入图片描述
    每次α的更新上面的条件必须要成立的。这下就清楚了,若改变一个α,肯定会破坏条件
    ;当更新两个时可以起一个调和的作用,就可以保证条件仍成立!

  2. 现在选择两个变量,其他变量固定看做常数
    我们可以得到(看做常数没有α1,α2的乘积项对优化没有影响可以直接去掉)
    在这里插入图片描述

之后的大概想法是消元,消去α1变成一个参数的优化问题,先求出α2,进而求出α1

  1. 两个变量的二次规划
    每次更新α还得注意α的约束条件,αNew是有一个区间范围的
    在这里插入图片描述

  2. 消去α1,得到结果
    在这里插入图片描述
    经过一番后,得到了α2New.unc,这个还得符合α2的定义域
    进行剪辑
    在这里插入图片描述

  3. 更新b,E(每次α1和α2的更新,b和E都会改变。更新b, Ei也为下次计算α更新做准备)
    在这里插入图片描述
    这里更新E时仅仅使用支持向量的集合,而E的定义却是全部样本的。这是因为不是支持向量的样本对应的α都为0。

  4. 选择αi和αj
    还有一个重要的问题:如何选择α1和α2

有里外两层循环。(注意!刚开始α都初始化为零

  1. 外循环想找到违反KKT条件最严重的αi,直到没有再违反的KKT条件的α。
    在这里插入图片描述
    怎么算违反?如下面
    在这里插入图片描述

  2. 内循环想找到 | E1 - E2|最大(使得目标函数减少的最快,更快的达到收敛)的αj,直到小于我们要求的精度 。

暂时草草地介绍到这里吧


http://chatgpt.dhexx.cn/article/CPsbE3UU.shtml

相关文章

SVM分类器详解

SVM入门&#xff08;一&#xff09;至&#xff08;三&#xff09;Refresh 按:之前的文章重新汇编一下,修改了一些错误和不当的说法&#xff0c;一起复习,然后继续SVM之旅. &#xff08;一&#xff09;SVM的八股简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995…

Svm实现多分类

机器学习---Svm实现多分类详解 Svm实现多类分类原理代码实现训练的图片 Svm实现多类分类原理 1.支持向量机分类算法最初只用于解决二分类问题&#xff0c;缺乏处理多分类问题的能力。后来随着需求的变化&#xff0c;需要svm处理多分类分为。目前构造多分类支持向 量机分类器的…

SVM学习(二):线性分类器

1.线性分类器概念 线性分类器(一定意义上,也可以叫做感知机) 是最简单也很有效的分类器形式.在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念。用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示&#xff1a; C1和C2是要区分的两个类别&#x…

机器学习笔记之(5)——SVM分类器

本博客为SVM分类器的学习笔记~由于仅仅是自学的笔记&#xff0c;大部分内容来自参考书籍以及个人理解&#xff0c;还请广大读者多多赐教 主要参考资料如下&#xff1a; 《机器学习实战》《Python机器学习》《机器学习Python实践》《Python机器学习算法》《Python大战机器学习》…

机器学习之SVM分类器介绍——核函数、SVM分类器的使用

系类文章目录 机器学习算法——KD树算法介绍以及案例介绍 机器学习的一些常见算法介绍【线性回归&#xff0c;岭回归&#xff0c;套索回归&#xff0c;弹性网络】 文章目录 一、SVM支持向量机介绍 1.1、SVM介绍 1.2、几种核函数简介 a、sigmoid核函数 b、非线性SVM与核函…

SVM分类器(matlab)

源自&#xff1a;https://blog.csdn.net/lwwangfang/article/details/52351715 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM)&#xff0c;可以完成对数据的分类&#xff0c;包括线性可分情况和线性不可分情况。1、线性可分 首先&#xff0c;对于SVM来说&…

线性分类器(SVM,softmax)

目录 导包和处理数据 数据预处理--减平均值和把偏置并入权重 SVM naive版 向量版 Softmax navie版 向量版 线性分类器--采用SGD算法 SVM版线性分类 Softmax版线性分类 使用验证集调试学习率和正则化系数 画出结果 测试准确率 可视化权重 值得注意的地方 赋值 ran…

SVM多分类的两种方式

以下内容参考&#xff1a;https://www.cnblogs.com/CheeseZH/p/5265959.html http://blog.csdn.net/rainylove1/article/details/32101113 王正海《基于决策树多分类支持向量机岩性波谱分类》 SVM本身是一个二值分类器&#xff0c;SVM算法最初是为二值分类问题设计的&#xff0…

使用SVM分类器进行图像多分类

ResNet backbone SVM分类器 对于样本较为均衡小型数据集&#xff0c;SVM作为分类器的效果与MLP的效果相近。 从经验上看&#xff0c;对于样本不均衡的大型数据集&#xff0c;MLP的效果强于SVM。 本博客在自己的小型数据集上进行实验&#xff0c;本来使用MLP已经达到很好的效果…

SVM分类器原理详解

第一层、了解SVM 支持向量机&#xff0c;因其英文名为support vector machine&#xff0c;故一般简称SVM&#xff0c;通俗来讲&#xff0c;它是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;其学习策略便是间隔最大化&#xff0c…

【CV-Learning】线性分类器(SVM基础)

数据集介绍&#xff08;本文所用&#xff09; CIFAR10数据集 包含5w张训练样本、1w张测试样本&#xff0c;分为飞机、汽车、鸟、猫、鹿、狗、蛙、马、船、卡车十个类别&#xff0c;图像均为彩色图像&#xff0c;其大小为32*32。 图像类型&#xff08;像素表示&#xff09; 二…

支持向量机通俗导论(理解SVM的三层境界)

支持向量机通俗导论(理解SVM的三层境界) 作者:July 。致谢:pluskid、白石、JerryLead。说明:本文最初写于2012年6月,而后不断反反复复修改&优化,修改次数达上百次,最后修改于2016年1月。 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和…

[机器学习] 支持向量机通俗导论节选(一)

本文转载自&#xff1a;http://blog.csdn.net/v_july_v/article/details/7624837 支持向量机通俗导论&#xff08;理解SVM的三层境界&#xff09; 作者&#xff1a; July、pluskid &#xff1b; 致谢&#xff1a;白石、J erryLead 出处&#xff1a;结构之法算法之道 blog …

机器学习之旅---SVM分类器

本次内容主要讲解什么是支持向量&#xff0c;SVM分类是如何推导的&#xff0c;最小序列SMO算法部分推导。 最后给出线性和非线性2分类问题的smo算法matlab实现代码。 一、什么是支持向量机(Support Vector Machine) 本节内容部分翻译Opencv教程&#xff1a; http://docs.open…

人工智能学习笔记 实验五 python 实现 SVM 分类器的设计与应用

学习来源 【机器学习】基于SVM人脸识别算法的一些对比探究&#xff08;先降维好还是先标准化好等对比分析&#xff09;_○( &#xff3e;皿&#xff3e;)っHiahiahia…的博客-CSDN博客 实验原理 有关svm原理 请移步该篇通俗易懂的博客 机器学习算法&#xff08;一&#xff0…

Matlab-SVM分类器

支持向量机&#xff08;Support Vector Machine&#xff0c;SVM)&#xff0c;可以完成对数据的分类&#xff0c;包括线性可分情况和线性不可分情况。 1、线性可分 首先&#xff0c;对于SVM来说&#xff0c;它用于二分类问题&#xff0c;也就是通过寻找一个分类线(二维是直线&…

UGUI——RectTransform详解

什么是RectTransform 创建一个UGUI控件时&#xff0c;查看其Inspector面板&#xff0c;原先熟悉的Transform已经被替换成RectTransform&#xff0c;面板也与原先的Transform的面板相去甚远。 先看看Unity官方对RectTransform的描述&#xff1a; Position, size, anchor and pi…

【Unity3D】UGUI之Button

1 Button属性面板 在 Hierarchy 窗口右键&#xff0c;选择 UI 列表里的 Button 控件&#xff0c;即可创建 Button 控件&#xff0c;选中创建的 Button 控件&#xff0c;按键盘【T】键&#xff0c;可以调整 Button 控件的大小和位置。创建 Button 控件时&#xff0c;系统会自动给…

UGUI基础

UGUI基础 ##1、UGUI概述 1.1、Unity界面发展史 【老版本界面onGUI】>【GUI插件NGUI】>【新版本界面UGUI】 1.2、UGUI特点 新的UI系统是从Unity4.6开始被集成到Unity编译器中的。Unity官方给这个新的UI系统赋予的标签是&#xff1a;灵活&#xff0c;快速和可视化。 对…

【Unity基础】ugui的案例篇(个人学习)

文章目录 前言案例1、点击游戏物体改变一次颜色&#xff0c;被UI遮挡的情况下点击无效1.动态图演示2.实现方式I.实现方案1 通过射线检测实现 3.源码演示Lua部分代码CSharp部分代码 案例2、圆形图片的制作1.图演示2.实现方式I.实现方案1 使用Mask组件实现II.实现方案2 通过重写G…