机器学习基础

SVM:找一条最宽的分界线

14 分钟

如果两类数据能被一条直线分开,可以画出无数条。支持向量机问的问题是:哪一条最好?


答案:留出最宽「街道」的那条

SVM 不满足于「分开」,它要找间隔最大的那条分界线。

想象在两类点之间修一条尽可能宽的街道,分界线就是街道的中线。街道越宽,对新数据的容错就越大——这直接对应更好的泛化能力。

支持向量就是恰好压在街道边缘上的那几个样本。

一个重要事实:只有支持向量决定分界线的位置。 把其他样本删掉,模型完全不变。这让 SVM 在小样本场景下特别有效。


数学形式

分界线是 ,间隔宽度是 。最大化间隔等价于:

这是一个凸二次规划问题——意味着它有唯一的全局最优解,不像神经网络那样可能陷入局部最优。这是 SVM 理论上的一大优点。


软间隔:允许犯错

真实数据往往线性不可分,或者有噪声点。硬性要求全部分对,会让分界线被一个离群点带偏。

引入松弛变量,允许一些样本越界,但要付出代价

是最重要的超参数

C 含义 结果
C 大 犯错代价高 街道窄,尽量分对,容易过拟合
C 小 容忍犯错 街道宽,容易欠拟合

本质上就是正则化强度的倒数。


核技巧:SVM 最精彩的部分

如果数据根本不能用直线分开怎么办?比如一类在圆心、另一类在圆环上。

思路:升到更高维,让它在高维空间里线性可分。 二维分不开的圆环,映射到三维(加一维 )就能用一个平面切开。

问题:显式做高维映射,计算量会爆炸。

核技巧的巧妙之处:SVM 的求解过程中,特征只以内积 的形式出现。所以我们根本不需要真的把数据映射上去,只需要一个能直接算出「高维空间中内积」的函数——这就是核函数。

高维映射从未真正发生,但效果达到了。

三个常用核

表达式 用途
线性 特征多、样本少(如文本)
RBF(高斯) 默认首选,能拟合复杂边界
多项式 特定结构

RBF 的 :越大,单个样本影响范围越小,边界越弯曲,越容易过拟合。 通常一起用网格搜索调。

from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
grid = GridSearchCV(SVC(kernel='rbf'),
                    {'C': [0.1, 1, 10, 100], 'gamma': [0.001, 0.01, 0.1, 1]}, cv=5)

别忘了 SVM 也必须做特征缩放(它同样依赖距离和内积)。


SVM 今天的位置

2012 年之前,SVM 是分类任务的王者。深度学习兴起后,在图像、语音、文本上被全面超越。

但它在小样本、中等维度的表格数据上依然很有竞争力,而且理论优美——最大间隔、凸优化、核技巧这三个思想,值得每个学机器学习的人理解一次。

练习:解释核技巧为什么能「不做高维映射却达到高维的效果」。

小纸条

SVM 找的是什么样的分界线?核技巧的精妙之处在哪里?参数 C 大和小分别意味着什么?

登录 后可看答案