SVM 是 support vector machine(支持向量机)的缩写,它是一种分类器,会在类别之间选择一个具有尽可能大间隔的分界面。如果你在搜索“什么是 SVM”,核心思想就是这一点:不仅要把不同组分开,还要在它们之间留下尽可能宽、尽可能可靠的空隙。

离这条边界最近的点叫作支持向量。它们最重要,因为它们决定了分隔面最终能放在哪里。

为什么间隔很重要

想象有两簇点,一簇来自 A 类,另一簇来自 B 类。很多直线都可能把它们分开。SVM 更偏好那条在两侧都留下最大安全缓冲区的直线。

更宽的间隔通常会让分类器对训练数据中的微小变化不那么敏感。这并不保证它在真实场景中一定表现更好,但这正是理解 SVM 的主要直觉。

SVM 的决策边界长什么样

在线性 SVM 中,决策边界是一个超平面:

wx+b=0w \cdot x + b = 0

wx+b>0w \cdot x + b > 0 时,分类器预测为一类;当 wx+b<0w \cdot x + b < 0 时,预测为另一类。

在可分数据的标准最大间隔缩放下,SVM 会选择 wwbb,使得

yi(wxi+b)1y_i(w \cdot x_i + b) \ge 1

对每一个训练点都成立,同时让间隔尽可能大。在这种缩放下,完整的间隔宽度是

2w.\frac{2}{\|w\|}.

比起公式,更重要的实际理解是:在这种归一化设定中,w\|w\| 越小,间隔就越宽。

例题:一维 SVM

一维例子最容易看清“间隔”这个想法。

假设负类的点在 x=0x=0x=1x=1,正类的点在 x=4x=4x=5x=5

任何位于 1144 之间的阈值都能把两类分开。比如,x=2x=2 可以,x=3x=3 也可以,但这些选择在两侧留下的缓冲并不一样。

在这个一维可分的设定中,SVM 会选取最近异类点之间的中点,因此决策阈值是

x=2.5.x = 2.5.

最近的负类点是 x=1x=1,最近的正类点是 x=4x=4。这两个点就是支持向量。它们到边界的距离都是 1.51.5,所以间隔以尽可能宽且对称的方式被确定下来。

这里你可以把分类器写成:“当 x>2.5x > 2.5 时预测为正类,当 x<2.5x < 2.5 时预测为负类。” 这个简单例子抓住了真正的核心:边界是由那些最难分的邻近样本决定的,而不是由那些本来就很容易分类的远处样本决定的。

硬间隔 SVM 与软间隔 SVM

硬间隔 SVM 只适用于训练数据能够被完美线性分开的情况。只要有一个点破坏了这个条件,硬间隔设定就无法很好地适配数据。

这也是为什么很多实际中的 SVM 会使用软间隔。软间隔 SVM 仍然偏好更宽的间隔,但它允许一些点落在间隔内部,甚至落到边界的错误一侧,不过会为此付出惩罚。

参数 CC 控制这种权衡。CC 越大,对违例的惩罚越强。CC 越小,模型允许的灵活性越大。哪一种都不是天然更好;这取决于数据,并且应该通过验证集表现来检查。

什么时候核 SVM 有帮助

有时,在原始特征空间里,一条直的边界并不够用。核 SVM 通过核函数来比较样本,从而在不显式写出巨大变换特征向量的情况下,实现弯曲边界。

关键在于,只有当数据模式确实需要这种额外灵活性时,它才有帮助。核方法可能提升模型效果,但也可能让调参更困难,所以不应默认使用,而应通过验证来判断。

SVM 的常见错误

以为每个点都同样重要

在 SVM 中,最近的点最重要。离边界很远的点,往往对最终分隔面影响很小。

忘记硬间隔成立的前提条件

完美线性可分是一个真实条件,不是默认假设。如果类别之间有重叠,你就需要软间隔,或者换一种模型。

忽略特征缩放

SVM 依赖距离和点积。如果某个特征的量纲远大于另一个特征,那么在你先做缩放之前,它可能会主导决策边界。

认为核函数一定更好

更灵活的边界也许能更好地拟合训练数据,但这并不自动意味着它的泛化能力更强。

SVM 用在哪里

SVM 常用于分类问题,尤其是在类别之间的边界可能比较清晰、并且基于间隔的思路很有帮助时。它在中小规模的表格数据问题中尤其常见,也常用于文本分类,因为那类任务往往具有高维特征空间。

它也可以用于回归,对应的方法叫作支持向量回归(support vector regression),但那与这里讲解的二分类设定不同。

试试一个类似的 SVM 问题

把例子中的一维点保留不变,再新增一个负类点,位置在 x=2.2x=2.2。这样一来,原本干净而宽的间隔就消失了。想一想:如果你坚持使用硬间隔,会发生什么变化?如果允许软间隔,又会发生什么变化?这种对比通常是最快帮助你真正理解 SVM 的方式。

需要解题帮助?

上传你的问题,几秒钟内获得经过验证的分步解答。

打开 GPAI Solver →