Lecture 8-10:支持向量机
课程简介
函数间隔与几何间隔、对偶问题、核函数、SMO 算法。
🎬 本课程视频:Stanford CS229 — 斯坦福机器学习
一、支持向量机概述
支持向量机(Support Vector Machine, SVM)是机器学习中最强大、最优雅的分类算法之一。它在小样本、非线性、高维分类问题中表现出色。
1.1 从逻辑回归到 SVM
回顾逻辑回归:$h_\theta(x) = g(\theta^T x)$。当 $\theta^T x \gg 0$ 时,$P(y=1) \approx 1$;当 $\theta^T x \ll 0$ 时,$P(y=0) \approx 1$。
SVM 的核心思想是:不仅要正确分类,还要最大化分类的"信心"——即最大化样本到决策边界的距离。
二、函数间隔与几何间隔
2.1 函数间隔
给定训练样本 $(x^{(i)}, y^{(i)})$,函数间隔(Functional Margin)定义为:
$$\hat{\gamma}^{(i)} = y^{(i)} (\theta^T x^{(i)} + b)$$
当 $y^{(i)} = 1$ 时,希望 $\theta^T x + b \gg 0$;当 $y^{(i)} = -1$ 时,希望 $\theta^T x + b \ll 0$。函数间隔越大,分类越"有信心"。
整个训练集的函数间隔定义为所有样本中最小的那个:$\hat{\gamma} = \min_i \hat{\gamma}^{(i)}$。
2.2 几何间隔
函数间隔的一个问题是:如果按比例缩放 $\theta$ 和 $b$(如 $2\theta, 2b$),函数间隔会翻倍,但决策边界没有变化。因此我们引入几何间隔(Geometric Margin)。
几何间隔是样本到决策边界的欧氏距离:
$$\gamma^{(i)} = y^{(i)} \left( \frac{\theta^T x^{(i)} + b}{|\theta|} \right)$$
几何间隔不受参数缩放的影响——它是真正有意义的"距离"度量。
2.3 最优间隔分类器
SVM 的目标是最大化最小几何间隔:
$$\max_{\gamma, \theta, b} \gamma \quad \text{s.t.} \quad y^{(i)} (\theta^T x^{(i)} + b) \geq \gamma |\theta|, \quad i=1,...,m$$
通过归一化 $|\theta| = 1/\gamma$,可以转化为一个更简洁的优化问题。
三、对偶问题与核技巧
3.1 拉格朗日对偶性
原问题(Primal Problem):
$$\min_{\theta} \frac{1}{2} |\theta|^2 \quad \text{s.t.} \quad y^{(i)} (\theta^T x^{(i)} + b) \geq 1, \quad i=1,...,m$$
构造拉格朗日函数:
$$\mathcal{L}(\theta, b, \alpha) = \frac{1}{2} |\theta|^2 - \sum_{i=1}^{m} \alpha_i [y^{(i)} (\theta^T x^{(i)} + b) - 1]$$
其中 $\alpha_i \geq 0$ 是拉格朗日乘子。
对偶问题(Dual Problem):
$$\max_{\alpha} \sum_{i=1}^{m} \alpha_i - \frac{1}{2} \sum_{i,j=1}^{m} \alpha_i \alpha_j y^{(i)} y^{(j)} \langle x^{(i)}, x^{(j)} \rangle$$
约束条件:$\alpha_i \geq 0$ 和 $\sum_{i=1}^{m} \alpha_i y^{(i)} = 0$。
从对偶解可以恢复原参数:
$$\theta = \sum_{i=1}^{m} \alpha_i y^{(i)} x^{(i)}$$
KKT 条件:$\alpha_i > 0$ 的样本就是支持向量(Support Vectors)——即那些恰好位于间隔边界上的样本。
3.2 为什么需要对偶形式
对偶形式的重要结果是:决策函数只依赖于训练样本之间的内积 $\langle x^{(i)}, x^{(j)} \rangle$:
$$h(x) = \text{sign} \left( \sum_{i=1}^{m} \alpha_i y^{(i)} \langle x^{(i)}, x \rangle + b \right)$$
这意味着我们可以用核技巧(Kernel Trick) 将内积替换为核函数,实现高维甚至无限维空间中的线性分类。
3.3 核函数
核函数 $K(x^{(i)}, x^{(j)}) = \langle \phi(x^{(i)}), \phi(x^{(j)}) \rangle$,其中 $\phi$ 是将原始特征映射到高维空间的函数。
线性核:$K(x, z) = x^T z$
多项式核:$K(x, z) = (x^T z + c)^d$
高斯核(RBF 核):$K(x, z) = \exp\left(-\frac{|x - z|^2}{2\sigma^2}\right)$
RBF 核将数据映射到无限维空间——因为指数函数的泰勒展开包含所有多项式项。
核技巧的美妙之处在于:我们不需要显式计算 $\phi(x)$,只需要计算核函数的值。RBF 核的 $\phi(x)$ 是无限维的,但我们只需要计算一个指数函数,计算量不变。
3.4 核的有效性
Mercer 定理:一个函数 $K$ 是有效核的充要条件是,对于任意有限数据集,核矩阵 $K_{ij} = K(x^{(i)}, x^{(j)})$ 是半正定的。
四、SMO 算法
4.1 坐标上升
在介绍 SMO 之前,先理解坐标上升(Coordinate Ascent)的思想:每次只优化一个变量,固定其他变量,循环直到收敛。
对于 SVM 的对偶问题,约束 $\sum \alpha_i y^{(i)} = 0$ 意味着不能独立地改变单个 $\alpha_i$。
4.2 SMO 算法
SMO(Sequential Minimal Optimization)由 John Platt 在 1998 年提出,每次选择两个 $\alpha_i, \alpha_j$ 优化,固定其他变量。
两个变量的子问题有闭式解,因此 SMO 可以高效求解 SVM。
SMO 算法步骤:
1. 选择一对要优化的 $\alpha_i, \alpha_j$(选择违反 KKT 条件最严重的)
2. 固定其他变量,求解只有 $\alpha_i, \alpha_j$ 的子问题
3. 更新 $\alpha_i, \alpha_j$
4. 更新偏置 $b$
5. 重复直到收敛
选择启发式:
- 外层循环:优先选择违反 KKT 条件的 $\alpha_i$
- 内层循环:选择使 $|E_i - E_j|$ 最大的 $\alpha_j$
4.3 软间隔 SVM
现实中数据往往不是线性可分的。引入松弛变量 $\xi_i$ 允许一些样本被误分类:
$$\min_{\theta, b, \xi} \frac{1}{2} |\theta|^2 + C \sum_{i=1}^{m} \xi_i$$
$$\text{s.t.} \quad y^{(i)} (\theta^T x^{(i)} + b) \geq 1 - \xi_i, \quad \xi_i \geq 0$$
$C$ 是正则化参数——控制间隔大小和分类错误的权衡。$C$ 越大,对错误分类的惩罚越大。
from sklearn.svm import SVC
# 线性 SVM
svm_linear = SVC(kernel='linear', C=1.0)
svm_linear.fit(X_train, y_train)
# RBF 核 SVM
svm_rbf = SVC(kernel='rbf', gamma='scale', C=1.0)
svm_rbf.fit(X_train, y_train)
五、总结
- SVM 通过最大化几何间隔来寻找最优分类超平面
- 函数间隔受参数缩放影响,几何间隔是真正有意义的距离
- 对偶问题将 SVM 转化为仅依赖样本内积的形式
- 核技巧让 SVM 在高效计算的同时实现非线性分类
- SMO 算法高效求解 SVM 对偶问题
- 软间隔通过引入松弛变量处理线性不可分情况
六、SVM 实践指南
6.1 SVM 参数调优
SVM 的主要超参数及其影响:
C(正则化参数):控制对误分类的惩罚力度。
- C 大:更严格的分类,训练误差低但可能过拟合
- C 小:允许更多误分类,但间隔更大,泛化能力更强
γ(gamma,RBF 核参数):控制高斯核的宽度。
- γ 大:核函数衰减快,每个支持向量的影响范围小,决策边界复杂(易过拟合)
- γ 小:核函数衰减慢,每个支持向量的影响范围大,决策边界平滑(易欠拟合)
在实践中,通常使用网格搜索或随机搜索配合交叉验证来选择 C 和 γ。
6.2 特征缩放
SVM 对特征尺度非常敏感——因为决策边界由样本间距离决定。如果不做特征缩放,尺度大的特征会主导距离计算。务必在训练 SVM 前对特征做标准化或归一化。
6.3 SVM 与逻辑回归的选择
| 角度 | SVM | 逻辑回归 |
|---|---|---|
| 特征数 n >> 样本数 m | 效果可能不佳 | 通常更好(正则化效果好) |
| 样本数 m >> 特征数 n | SVM 可以高效处理 | 逻辑回归也表现良好 |
| 特征数 n 小,样本数 m 适中 | 带核函数的 SVM 效果好 | 需要特征工程 |
| 非线性决策边界 | 核技巧自然支持 | 需要手动特征变换 |
| 概率输出 | 需要额外校准 | 直接输出概率 |
| 大规模数据 | SMO 训练较慢 | SGD 训练高效 |
6.4 核函数选择指南
- 线性核:当特征数远大于样本数,或数据接近线性可分。线性核 SVM 和逻辑回归效果类似,但可能更快。
- RBF 核:默认选择,适用于大多数非线性问题。只有一个参数 γ 需要调优。
- 多项式核:参数更多(degree, coef0),通常不比 RBF 好,除非你确切知道数据关系是多项式形式。
- 自定义核:当领域知识提供了独特的相似性度量时,可以设计自定义核函数。
核函数的可容许性条件
并非所有函数 $K(x, z)$ 都可以作为核函数。Mercer 定理给出了核函数的可容许性条件:一个对称函数 $K(x, z)$ 可以表示为某个特征映射 $\phi(x)$ 的内积 $\langle\phi(x), \phi(z)\rangle$ 的充要条件是,对于任意有限个数据点,核矩阵 $K$ 是半正定的。核矩阵定义为 $K_{ij} = K(x^{(i)}, x^{(j)})$。
核函数的一个重要性质是封闭性——两个核函数的和、积、以及常数倍仍然是核函数。最常用的核函数组合包括:
$$K(x, z) = (x^Tz + c)^d \quad \text{(多项式核)}$$
$$K(x, z) = \exp\left(-\frac{||x-z||^2}{2\sigma^2}\right) \quad \text{(RBF核)}$$
$$K(x, z) = \tanh(\kappa x^Tz + \theta) \quad \text{(Sigmoid核)}$$
其中 RBF 核(高斯核)等价于无穷维特征空间的内积,因此可以逼近任意复杂的决策边界。
延伸阅读
- 📺 B 站播放列表:Stanford CS229 — 斯坦福机器学习
- 📚 更多学习资源,请访问 deeplearning.ai 官网