支持向量机SVM
本文介绍支持向量机SVM(Support Vector Machine)
参考:
- https://zhuanlan.zhihu.com/p/49331510
- https://zhuanlan.zhihu.com/p/77750026
- https://blog.csdn.net/Jon_Sheng/article/details/80243365
- https://zhuanlan.zhihu.com/p/480302399
SVM 简介
支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
一个超平面(Hyperplane)由法向量W和截距b决定,其方程为, 可以规定法向量指向的一侧为正类,另一侧为负类。下图画出了三个平行的超平面,法方向取左上方向。
为了找到最大间隔超平面,我们可以先选择分离两类数据的两个平行超平面,使得它们之间的距离尽可能大。在这两个超平面范围内的区域称为“间隔(margin)”,最大间隔超平面是位于它们正中间的超平面。这个过程如上图所示。
SVM 求解W和b
下面介绍函数中W和b如何求解。
目标函数
拉格朗日乘子
拉格朗日乘数再处理不等式问题时,引入松弛变量,这里用(用平方的特性),将不等式问题转换为等式问题
对于上述公式,转换为:
引入拉格朗日常数λ:
这里用到对偶性转化和KKT条件,详见:https://zhuanlan.zhihu.com/p/480302399
SMO优化
我们可以看出来这是一个二次规划问题,问题规模正比于训练样本数,我们常用 SMO(Sequential Minimal Optimization) 算法求解。
SMO(Sequential Minimal Optimization),序列最小优化算法,其核心思想非常简单:每次只优化一个参数,其他参数先固定住,仅求当前这个优化参数的极值。我们来看一下 SMO 算法在 SVM 中的应用。
Soft Margin
在实际应用中,完全线性可分的样本是很少的,如果遇到了不能够完全线性可分的样本,我们应该怎么办?比如下面这个:
解决该问题的一个办法是允许SVM在少量样本上出错,即将之前的硬间隔最大化条件放宽一点,为此引入“软间隔(soft margin)”的概念。为了使不满足上述条件的样本点尽可能少,我们需要在优化的目标函数里面新增一个对这些点的惩罚项。最常用的是hinge损失:。
即若样本点满足约束条件损失就是0, 否则损失就是,则优化目标变成:
其中称为惩罚参数,越小时对误分类惩罚越小,越大时对误分类惩罚越大,当取正无穷时就变成了硬间隔优化。实际应用时我们要合理选取,越小越容易欠拟合,越大越容易过拟合。
如果我们引入“松弛变量”,上式则变为:
s.t.
这时求得w和b的解为:
核函数
在分类问题中会遇到线性不可分的情况,如下图:
对于在有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机,就是非线性 SVM。可以通过非线性变换将它转化为某个维特征空间中的线性分类问题,在高维特征空间中学习线性支持向量机。
通过核函数(Kernel Function) 将原来空间中的点向特征空间中进行投影,公式, 与 在特征空间的内积等于它们在原始样本空间中通过函数 计算的结果,我们就不需要计算高维甚至无穷维空间的内积了。减少了内存消耗和计算量。
常用核函数
常用核函数有以下几种:
-
线性核函数
-
高斯KBF核函数
-
多项式核函数
-
Sigmoid核函数
SVR和SVC
SVM从原理可知只用于二分类,对于分类问题和回归问题,需要用到其扩展SVC和SVR
- SVC:Support Vector Classification, 用于分类
- SVR:Support Vector Regression, 用于回归
Sklearn里支持的svm算法:
- svm.LinearSVC Linear Support Vector Classification.
- svm.LinearSVR Linear Support Vector Regression.
- svm.NuSVC Nu-Support Vector Classification.
- svm.NuSVR Nu Support Vector Regression.
- svm.OneClassSVM Unsupervised Outlier Detection.
- svm.SVC C-Support Vector Classification.
- svm.SVR Epsilon-Support Vector Regression.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具