支持向量机 SVM:最大间隔、支持向量与核方法
支持向量机(Support Vector Machine, SVM)是经典监督学习算法之一。
它最核心的思想不是简单地"找到一条能把两类分开的线",而是:
在能够正确分开训练样本的候选决策边界中,寻找分类间隔最大的那一个。
这个思想带来了非常漂亮的几何解释,也让 SVM 在中小规模、高维数据问题中长期保持竞争力。
1. 线性分类器
对于二分类问题,设输入为:
x∈Rp\mathbf{x}\in\mathbb{R}^px∈Rp
类别标签为:
y∈{−1,+1}y\in\{-1,+1\}y∈{−1,+1}
线性分类器定义一个超平面:
wTx+b=0\mathbf{w}^T\mathbf{x}+b=0wTx+b=0
预测规则为:
y^=sign(wTx+b)\hat{y}=sign(\mathbf{w}^T\mathbf{x}+b)y^=sign(wTx+b)
2. 为什么仅仅"分开"还不够
很多直线都可能把两类训练数据分开,但它们的泛化能力不一定相同。
SVM 希望找到离两类最近样本都尽可能远的决策边界。

与决策边界距离最近的训练样本称为支持向量。
这些样本决定了最终的分类超平面。
3. 几何间隔
决策超平面为:
wTx+b=0\mathbf{w}^T\mathbf{x}+b=0wTx+b=0
对于规范化后的硬间隔 SVM,可以定义两条边界:
wTx+b=1\mathbf{w}^T\mathbf{x}+b=1wTx+b=1
wTx+b=−1\mathbf{w}^T\mathbf{x}+b=-1wTx+b=−1
两条边界之间的距离为:
2∥w∥\frac{2}{\|\mathbf{w}\|}∥w∥2
因此最大化间隔等价于最小化:
12∥w∥2\frac{1}{2}\|\mathbf{w}\|^221∥w∥2
4. Hard-Margin SVM
对于完全线性可分的数据,约束为:
yi(wTxi+b)≥1y_i(\mathbf{w}^T\mathbf{x}_i+b)\ge 1yi(wTxi+b)≥1
优化问题为:
minw,b12∥w∥2\min_{\mathbf{w},b} \frac{1}{2}\|\mathbf{w}\|^2w,bmin21∥w∥2
满足:
yi(wTxi+b)≥1y_i(\mathbf{w}^T\mathbf{x}_i+b)\ge1yi(wTxi+b)≥1
这就是硬间隔 SVM。
问题在于真实数据往往存在:
- 噪声;
- 异常点;
- 类别重叠。
因此完全不允许误分类通常不现实。
5. Soft-Margin SVM
软间隔 SVM 引入松弛变量:
ξi≥0\xi_i\ge0ξi≥0
优化问题变为:
minw,b,ξ12∥w∥2+C∑i=1nξi\min_{\mathbf{w},b,\boldsymbol{\xi}} \frac{1}{2}\|\mathbf{w}\|^2+C\sum_{i=1}^{n}\xi_iw,b,ξmin21∥w∥2+Ci=1∑nξi
约束:
yi(wTxi+b)≥1−ξiy_i(\mathbf{w}^T\mathbf{x}_i+b) \ge 1-\xi_iyi(wTxi+b)≥1−ξi
参数 C 控制:
更大的间隔与更少的训练错误之间的权衡。
一般而言:
C较大:更强调训练样本分类正确;C较小:允许更多训练误差,以获得更宽间隔和更强正则化。
6. Hinge Loss
SVM 也可以从损失函数角度理解。
经典 hinge loss:
L(y,f(x))=max(0,1−yf(x))L(y,f(x))=\max(0,1-yf(x))L(y,f(x))=max(0,1−yf(x))
其中:
f(x)=wTx+bf(x)=\mathbf{w}^T\mathbf{x}+bf(x)=wTx+b
如果一个样本不仅分类正确,而且距离边界足够远,则损失为 0。
如果样本:
- 分类错误;
- 或虽然分类正确但离边界过近;
都会产生损失。
因此线性 SVM 的目标可以写成:
minw,b12∥w∥2+C∑i=1nmax(0,1−yi(wTxi+b))\min_{\mathbf{w},b} \frac{1}{2}\|\mathbf{w}\|^2+C \sum_{i=1}^{n} \max\left( 0,1-y_i(\mathbf{w}^T\mathbf{x}_i+b) \right)w,bmin21∥w∥2+Ci=1∑nmax(0,1−yi(wTxi+b))
7. 支持向量为什么重要
在最优超平面附近的样本决定了分类边界。
远离边界的大量样本,对最终超平面的影响可能很小。
这就是"Support Vector Machine"这个名字的来源。
可以把支持向量理解为:
最接近决策边界、最有资格决定边界位置的关键样本。
8. 当数据不是线性可分时
现实数据可能呈现环形、弯曲或更复杂的类别结构。
例如:

在原始二维空间中,这种数据无法被一条直线很好地分开。
一种思想是把样本映射到更高维空间:
x→ϕ(x)\mathbf{x} \rightarrow \phi(\mathbf{x})x→ϕ(x)
然后在新的特征空间中寻找线性超平面。
9. Kernel Trick
如果直接计算高维映射,计算成本可能非常高。
核技巧的关键是:
K(xi,xj)=ϕ(xi)Tϕ(xj)K(\mathbf{x}_i,\mathbf{x}_j)=\phi(\mathbf{x}_i)^T \phi(\mathbf{x}_j)K(xi,xj)=ϕ(xi)Tϕ(xj)
只要能够计算核函数,就可以避免显式构造高维特征。
线性核
K(x,z)=xTzK(\mathbf{x},\mathbf{z})=\mathbf{x}^T\mathbf{z}K(x,z)=xTz
多项式核
K(x,z)=(γxTz+r)dK(\mathbf{x},\mathbf{z})=(\gamma\mathbf{x}^T\mathbf{z}+r)^dK(x,z)=(γxTz+r)d
RBF 核
K(x,z)=exp(−γ∥x−z∥2)K(\mathbf{x},\mathbf{z})=\exp \left(-\gamma \|\mathbf{x}-\mathbf{z}\|^2 \right)K(x,z)=exp(−γ∥x−z∥2)
RBF 是最常用的非线性核之一。
10. C 与 Gamma
使用 RBF 核时,最常调节的两个参数是 C 和 gamma。
C
控制错误惩罚。
- 大
C:更关注训练误差; - 小
C:正则化更强。
Gamma
控制单个训练样本影响范围。
- 大
gamma:影响范围较小,边界可能更加复杂; - 小
gamma:影响范围较大,边界更平滑。
如果 C 和 gamma 都过大,很容易得到过度复杂的决策边界。
11. Python 实现
线性 SVM
python
from sklearn.svm import SVC
model = SVC(
kernel="linear",
C=1.0
)
model.fit(X_train, y_train)
pred = model.predict(X_test)
RBF SVM
python
from sklearn.svm import SVC
model = SVC(
kernel="rbf",
C=1.0,
gamma="scale"
)
model.fit(X_train, y_train)
pred = model.predict(X_test)
12. 为什么 SVM 通常需要标准化
SVM 的核心涉及样本距离和内积。
如果不同特征量纲差异巨大,例如:
text
温度:0 ~ 1500
碳含量:0 ~ 1
压力:0 ~ 2
大尺度特征可能主导距离计算。
因此通常先标准化:
python
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
model = make_pipeline(
StandardScaler(),
SVC(kernel="rbf", C=1.0)
)
13. SVM 的优点
SVM 的优势包括:
- 最大间隔具有明确几何解释;
- 中小样本问题中表现稳定;
- 能处理高维特征;
- 核技巧能够表达非线性边界;
- 正则化思想自然融入优化目标。
14. SVM 的局限
主要局限包括:
- 大规模样本时训练成本可能较高;
- 对
C、gamma等参数比较敏感; - 特征通常需要标准化;
- 非线性核模型的解释性弱于线性模型;
- 原始 SVM 输出不是天然概率。
15. 总结
SVM 可以沿着下面这条思路理解:
text
线性分类
↓
不仅要分开
↓
还要最大化间隔
↓
边界由支持向量决定
↓
允许少量错误形成软间隔
↓
核函数进一步处理非线性问题
因此,SVM 最关键的三个概念是:
- maximum margin;
- support vectors;
- kernel trick。
掌握这三个概念,基本就抓住了支持向量机的核心。