SVM 是 support vector machine(支持向量机)的缩写,它是一种分类器,会在类别之间选择一个具有尽可能大间隔的分界面。如果你在搜索“什么是 SVM”,核心思想就是这一点:不仅要把不同组分开,还要在它们之间留下尽可能宽、尽可能可靠的空隙。
离这条边界最近的点叫作支持向量。它们最重要,因为它们决定了分隔面最终能放在哪里。
为什么间隔很重要
想象有两簇点,一簇来自 A 类,另一簇来自 B 类。很多直线都可能把它们分开。SVM 更偏好那条在两侧都留下最大安全缓冲区的直线。
更宽的间隔通常会让分类器对训练数据中的微小变化不那么敏感。这并不保证它在真实场景中一定表现更好,但这正是理解 SVM 的主要直觉。
SVM 的决策边界长什么样
在线性 SVM 中,决策边界是一个超平面:
当 时,分类器预测为一类;当 时,预测为另一类。
在可分数据的标准最大间隔缩放下,SVM 会选择 和 ,使得
对每一个训练点都成立,同时让间隔尽可能大。在这种缩放下,完整的间隔宽度是
比起公式,更重要的实际理解是:在这种归一化设定中, 越小,间隔就越宽。
例题:一维 SVM
一维例子最容易看清“间隔”这个想法。
假设负类的点在 和 ,正类的点在 和 。
任何位于 和 之间的阈值都能把两类分开。比如, 可以, 也可以,但这些选择在两侧留下的缓冲并不一样。
在这个一维可分的设定中,SVM 会选取最近异类点之间的中点,因此决策阈值是
最近的负类点是 ,最近的正类点是 。这两个点就是支持向量。它们到边界的距离都是 ,所以间隔以尽可能宽且对称的方式被确定下来。
这里你可以把分类器写成:“当 时预测为正类,当 时预测为负类。” 这个简单例子抓住了真正的核心:边界是由那些最难分的邻近样本决定的,而不是由那些本来就很容易分类的远处样本决定的。
硬间隔 SVM 与软间隔 SVM
硬间隔 SVM 只适用于训练数据能够被完美线性分开的情况。只要有一个点破坏了这个条件,硬间隔设定就无法很好地适配数据。
这也是为什么很多实际中的 SVM 会使用软间隔。软间隔 SVM 仍然偏好更宽的间隔,但它允许一些点落在间隔内部,甚至落到边界的错误一侧,不过会为此付出惩罚。
参数 控制这种权衡。 越大,对违例的惩罚越强。 越小,模型允许的灵活性越大。哪一种都不是天然更好;这取决于数据,并且应该通过验证集表现来检查。
什么时候核 SVM 有帮助
有时,在原始特征空间里,一条直的边界并不够用。核 SVM 通过核函数来比较样本,从而在不显式写出巨大变换特征向量的情况下,实现弯曲边界。
关键在于,只有当数据模式确实需要这种额外灵活性时,它才有帮助。核方法可能提升模型效果,但也可能让调参更困难,所以不应默认使用,而应通过验证来判断。
SVM 的常见错误
以为每个点都同样重要
在 SVM 中,最近的点最重要。离边界很远的点,往往对最终分隔面影响很小。
忘记硬间隔成立的前提条件
完美线性可分是一个真实条件,不是默认假设。如果类别之间有重叠,你就需要软间隔,或者换一种模型。
忽略特征缩放
SVM 依赖距离和点积。如果某个特征的量纲远大于另一个特征,那么在你先做缩放之前,它可能会主导决策边界。
认为核函数一定更好
更灵活的边界也许能更好地拟合训练数据,但这并不自动意味着它的泛化能力更强。
SVM 用在哪里
SVM 常用于分类问题,尤其是在类别之间的边界可能比较清晰、并且基于间隔的思路很有帮助时。它在中小规模的表格数据问题中尤其常见,也常用于文本分类,因为那类任务往往具有高维特征空间。
它也可以用于回归,对应的方法叫作支持向量回归(support vector regression),但那与这里讲解的二分类设定不同。
试试一个类似的 SVM 问题
把例子中的一维点保留不变,再新增一个负类点,位置在 。这样一来,原本干净而宽的间隔就消失了。想一想:如果你坚持使用硬间隔,会发生什么变化?如果允许软间隔,又会发生什么变化?这种对比通常是最快帮助你真正理解 SVM 的方式。