支持向量机(SVM)

算法简介

支持向量机(SVM)是种二类分类模型。 它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机:支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题。支持向量机的学习算法是求解凸二次规划的最优化算法。
支持向量机学习方法包含构建由简至繁的模型:线性可分支持向量机以及非线性可分支持向量机。简单模型是复杂模型的基础,也是复杂模型的特殊情况。当训练数据线性可分时,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机。当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。

算法思想及公式推导

线性可分的SVM

什么是线性可分?

对于二维空间来说,我们可以找到一条线,将两个不同类别的样本划分开来,我们就说这个样本集是线性可分的,如下图所示。

相反,如果这些样本混在一起,我们找不到这样一条线将两个不同类别的样本划分开来,我们就说这个样本集是线性不可分的。

什么是线性模型

在机器学习的过程中,我们需要找到这样一种线性模型,帮我们把不同类别的样本分离开来。显然,在上面的例子中,我们的线性模型就是将两个不同类别的样本划分开来的那条线。
但这只是在二维空间中的情况,如果在三维空间中呢?显然,我们可以找一个面将不同类别的样本划分开来。那如果在四维空间中,五维空间中呢?我们想象不出来,因为人类是三维的生物,我们无法想象出更高维空间的样子。但是我们可以通过数学的方法将其推导出来,这就是数学的魅力所在。
在数学中,我们将超过三维的曲面统称为超平面,超平面的公式为:
在这里插入图片描述
总而言之,SVM算法的目的就是找到这样一个超平面wx+b=0,使得在超平面上方的点x代入函数y=wT x+b,y全部大于0,在超平面下方的点x代入函数y=wx+b,y全部小于0。
现在,我们用纯数学的方式将上面所讲的内容表示出来:
在这里插入图片描述

线性可分SVM核心思想

SVM所做的工作就是找这样个超平面,能够将两个不同类别的样本划分开来,问题是这种平面是不唯一的,即可能存在无数个超平面都可以将两种样本分开,那么我们如何才能确定一个分类效果最好的超平面呢?
Vapnik提出了一种方法,对每一种可能的超平面,我们将它进行平移,直到它与空间中的样本向量相交。我们称这两个向量为支持向量,之后我们计算支持向量到该超平面的距离d,分类效果最好的超平面应该使d最大。
在这里插入图片描述
那么这个d要如何求呢?我们可以借助点到面的距离公式进行计算。
为了方便计算,我们找一个实数a对(w,b)进行放缩,
在这里插入图片描述
至此,我们SVM求解的目标从最大化距离d成功转化成了:
最小化: 1/2||w||2
限制条件:s.t. yi(wTxi+b)>=1, i=1,2,…,m
这就是支持向量机的基本模型

线性不可分的SVM

然而,上面的方法只适用于线性可分的情况。对于线性不可分的数据集,我们无法找到这样一种直线,将不同类型的样本分割开来,SVM的方法好像就不适用了。
但是Vapnik提出了一种观点,我们所认为的线性不可分,只是在当前维度下线性不可分,别不代表它在高维空间中线性不可分。比如有一组样本在二维空间线性不可分,但是在三维空间中,我们是有可能找到这样一条直线将其分隔开来的,Vapnik还认为,当维数趋于无穷时,一定存在这样一条线,可以将不同类型的样本分割开来。
然而,理论是美好的,现实是残酷的。摆在我们面前的一个十分困难的问题就是:我们无法处理无限维的向量!!!好在,天才的数学家们提出了核技巧(核函数),可以帮助我们解决这个问题。

核函数

xi和xj在特征空间中的内积等于他们在原始样本空间中通过和函数K() 计算的结果,有了这样的函数,我们就不必直接去计算高维甚至无限维特征空间中的内积。
在这里插入图片描述
能使用核函数的充要条件如下:
在这里插入图片描述
常见的和核函数有高斯核、拉普拉斯核、多项式核等。
在这里插入图片描述
值得一提的是,我们希望样本在特征空间内线性可分,因此特征空间的好坏对支持向量机的性能至关重要,需要注意的是,在不知道特征映射的形式时,我们并不知道什么样的核函数是合适的,而核函数也仅是隐式的定义了这个特征空间。于是,核函数的选择就成为了SVM最大的变数,如果核函数选择的不合适,则意味着将样本映射到了一个不合适的特征空间,很可能导致性能不佳。

软间隔与正则化

在前面的讨论中我们提到,在现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分。此外,即便恰好找到了某个核函数使训练集在特征空间中线性可分,也很难断定这个貌似线性可分的结果是不是由于过拟合所造成的。缓解这一问题的办法是使用软间隔的方法,即我们允许最终找到的超平面发生少量的分类错误,只要它能够保证将大多数样本分类正确就可以了。
回顾我们之前得到的SVM模型,我们的限制条件是yi(wTxi+b)>=1
至此,我们SVM求解的目标从最大化距离d成功转化成了:
最小化: 1/2||w||2
限制条件:s.t. yi(wTxi+b)>=1, i=1,2,…,m
这就是支持向量机的基本模型

现在,因为我们允许最终找到的超平面发生少量的分类错误,所以我们可以将限制条件适当放宽,经过改进后的软间隔SVM模型如下:
在这里插入图片描述
我们加入一个正则项,正则项由惩罚系数C和松弛变量组成。其中,惩罚系数C是一个超参数,是由我们自己设置的。每个样本都有一个对应的松弛变量,用来表征该样本不满足约束的程度。
注意到,使用软间隔的SVM问题是一个凸二次规划问题,我们可以使用拉格朗日乘子法得到其对偶问题然后求解。

化为对偶问题求解

关于原问题和对偶问题相关的知识,可以去看另一篇文章,这里不再详细展开。原问题与对偶问题
在这里插入图片描述
至此,SVM模型成功推导出来了,我们可以使用SMO算法对该问题进行求解,由于篇幅关系,这里就不再讲解SMO算法是如何做的了。

SVM算法的流程总结

在这里插入图片描述

### 支持向量机SVM)的概念 支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,在分类和回归任务中均有广泛应用。它特别擅长处理高维数据,因此在诸如图像识别、文本分类等领域表现优异[^1]。 SVM 的核心思想在于通过构建一个超平面来区分不同类别的数据点。这个超平面不仅能够有效分离两类数据,还力求最大化两类别之间的间隔,从而提升模型的泛化性能[^2]。 --- ### 基本原理 #### 超平面与分类 在一个线性可分的数据集中,SVM 寻找的是一个最佳的超平面 \( w \cdot x + b = 0 \),其中 \( w \) 是法向量,\( b \) 是偏置项。该超平面可以将训练集中的正负样本完全分开,并使距离超平面最近的样本点(即支持向量)到超平面的距离尽可能大。 #### 最大间隔原则 为了提高模型的鲁棒性和泛化能力,SVM 追求的最大化目标是最小化以下函数: \[ L(w,b,\xi)=\frac{1}{2}||w||^{2}+C\sum_{i=1}^{n}\xi_i, \] 这里 \( C > 0 \) 表示惩罚参数,用于平衡误分类误差和间隔大小的关系;\( \xi_i \geq 0 \) 则表示松弛变量,允许部分样本被错误分类或位于边界内部。 当数据不可线性分割时,可以通过引入核函数 (Kernel Function) 将原始输入映射至更高维度的空间,进而实现复杂模式的学习。 --- ### 应用场景 由于其优秀的理论基础以及实际效果,SVM 已经成为解决许多现实世界问题的重要工具之一。典型的应用领域包括但不限于: - 图像识别:自动检测物体或者人脸识别; - 文本挖掘:情感分析、主题建模等自然语言处理任务; - 生物信息学:基因表达数据分析、蛋白质结构预测等等。 ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC # 加载鸢尾花数据集作为例子 iris = datasets.load_iris() X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3) # 创建并拟合SVC模型 clf = SVC(kernel='linear') # 使用线性核函数 clf.fit(X_train, y_train) # 输出测试分数 print(f"Test Accuracy: {clf.score(X_test, y_test)}") ``` 上述代码展示了如何利用 scikit-learn 实现简单的二元/多元分类器。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值