配音

第7周:支持向量机

课程简介

SVM 原理、大间隔分类器、核函数、对偶问题与 SMO 算法。

🎬 本课程视频:吴恩达机器学习 (2014) — 交互式学习笔记


一、从逻辑回归到支持向量机

1.1 逻辑回归的回顾

逻辑回归的代价函数包含两部分:交叉熵损失和正则化项。如果 y=1,我们希望 hθ(x) ≈ 1 即 θᵀx >> 0;如果 y=0,我们希望 hθ(x) ≈ 0 即 θᵀx << 0。

SVM 的核心修改在于将代价函数中的对数损失函数替换为一种更激进的损失——合页损失(Hinge Loss):

对于 y=1 的样本:cost₁(z) = max(0, 1 - z) 其中 z = θᵀx
对于 y=0 的样本:cost₀(z) = max(0, 1 + z)

对比逻辑回归损失和合页损失:逻辑回归的损失总是非零(永远不会完全达到 0 和 1),而合页损失在 z 足够大时损失正好为零。这意味着 SVM 的优化目标更加自信——不仅要求分类正确,还要求正确到一定程度。

1.2 SVM 的代价函数

$$J(\theta) = C \sum_{i=1}^{m} [y^{(i)} \text{cost}1(\theta^T x^{(i)}) + (1-y^{(i)}) \text{cost}_0(\theta^T x^{(i)})] + \frac{1}{2} \sum{j=1}^{n} \theta_j^2$$

其中 C 类似于 1/λ——控制正则化强度的倒数。C 越大,对误分类的惩罚越大;C 越小,允许更多的误分类以获得更大的安全间隔。

二、大间隔分类器

2.1 直观理解

SVM 被称为大间隔分类器(Large Margin Classifier),因为它不仅寻找一个能将数据分开的决策边界,还要求决策边界与最近的数据点之间保持最大的距离——这个距离称为间隔(Margin)。

直观上:如果决策边界与最近的训练样本之间距离很大,那么模型对新的、未见过的数据就更稳健——稍微偏离正常的样本仍然能被正确分类。

在线性可分的数据中,存在无数条线可以将数据分开——但 SVM 选择的是那个具有最大间隔的决策边界。

2.2 数学直觉

考虑向量内积:θᵀx = ||θ|| · p,其中 p 是 x 在 θ 方向上的投影。

SVM 的决策规则:如果 y=1,希望 θᵀx ≥ 1;如果 y=0,希望 θᵀx ≤ -1。

在最小化 ½||θ||² 的目标下,要使所有样本满足约束,正类样本需要 p ≥ 1/||θ||,负类样本需要 p ≤ -1/||θ||。当 ||θ|| 很小时,对 p 的要求就很大——这意味着决策边界必须距离训练样本足够远。这就是 SVM 能够产生大间隔的数学原因。

2.3 对异常值的鲁棒性

当数据线性不可分时(例如存在异常值),严格的大间隔分类器会表现不佳。这时正则化参数 C 发挥作用:较小的 C 允许少量样本位于间隔内部甚至被错误分类,从而获得更大的总体间隔。

三、核函数

3.1 为什么需要核函数

SVM 本质上学习的是线性决策边界。要处理非线性问题,传统方法是手动构造多项式特征——但这会导致特征空间爆炸。

核函数(Kernel)提供了一种优雅的解决方案:在原始特征空间中高效计算高维特征空间中的内积,而无需显式地构造高维特征向量。这就是核技巧(Kernel Trick)。

3.2 高斯核函数

高斯核(Gaussian Kernel)是最常用的核函数:

$$f_i = \text{similarity}(x, l^{(i)}) = \exp\left(-\frac{|x - l^{(i)}|^2}{2\sigma^2}\right)$$

也称为径向基函数(RBF)。参数 σ² 控制核的宽度:
- σ² 很大 → 特征 fi 随 x 变化缓慢→ 高偏差/低方差
- σ² 很小 → 特征 fi 随 x 急剧变化→ 低偏差/高方差

核函数的直观理解:
- 当样本 x 接近标记点 l^{(i)} 时,exp(0) ≈ 1——特征 fi 接近 1
- 当样本 x 远离标记点 l^{(i)} 时,exp(大负数) ≈ 0——特征 fi 接近 0

3.3 标记点的选择

在 SVM 中,每个训练样本的位置都被选为一个标记点。对于 m 个训练样本,我们得到 m 个特征 f₁, f₂, ..., f_m。每个新的特征 fi 衡量的是新样本 x 与训练样本 x^{(i)} 之间的相似度。

因此,给定训练集 (x^{(i)}, y^{(i)}),我们构造新特征向量 f ∈ ℝ^{m+1}(包含 f₀=1),然后在 f 上训练线性 SVM。

3.4 核函数的数学条件

一个有效的核函数必须满足 Mercer 定理——对应的核矩阵 K 是半正定的。

核函数类型 公式 适用场景
线性核 K(x, l) = xᵀl 线性可分数据,n 很大
高斯核(RBF) exp(-
多项式核 (xᵀl + c)^d 图像处理

四、SVM 的使用实践

4.1 参数选择

SVM 有两个关键参数需要调优:
- C(正则化参数的倒数):C 大 → 低偏差、高方差;C 小 → 高偏差、低方差
- σ²(高斯核参数):σ² 大 → 高偏差、低方差;σ² 小 → 低偏差、高方差

from sklearn import svm

# 线性 SVM
model = svm.SVC(C=1.0, kernel='linear')

# 高斯核 SVM
model = svm.SVC(C=1.0, kernel='rbf', gamma=0.5)

# 多项式核 SVM
model = svm.SVC(C=1.0, kernel='poly', degree=3)
model.fit(X_train, y_train)
predictions = model.predict(X_val)

4.2 SVM vs 逻辑回归 vs 神经网络

场景 推荐算法
n 很大(如 10⁴-10⁶),m 较小 逻辑回归 或 线性核 SVM
n 较小,m 中等(如 n=1-1000, m=10-10⁴) 高斯核 SVM
n 较小,m 很大(如 n=1-1000, m > 10⁵) 神经网络/逻辑回归
n 中等,m 很大 神经网络

第 7 周学习了支持向量机——一个理论上优雅、实践中强大的分类算法。SVM 通过大间隔优化和核技巧,在线性不可分的数据上也能表现出色。虽然在大规模数据上神经网络逐渐成为主流,但 SVM 在中小规模数据和特征维度高的场景中仍然是强有力的选择。

SVM 的大间隔数学推导

SVM 的优化问题可以写成标准形式:

最小化:½||θ||²
约束条件:
- 对于正类样本:θᵀx^{(i)} ≥ 1
- 对于负类样本:θᵀx^{(i)} ≤ -1

这个优化问题的拉格朗日函数为:

$$L(\theta, \alpha) = \frac{1}{2}||\theta||^2 - \sum_{i=1}^{m} \alpha_i [y^{(i)}(\theta^T x^{(i)}) - 1]$$

其中 α_i ≥ 0 是拉格朗日乘子。通过对 θ 求导并令导数为零,得到对偶问题:

最大化:∑α_i - ½∑∑α_i α_j y^{(i)} y^{(j)} x^{(i)ᵀ}x^{(j)}
约束条件:α_i ≥ 0 且 ∑α_i y^{(i)} = 0

对偶问题中出现了内积项 x^{(i)ᵀ}x^{(j)}——这正是核函数发挥作用的地方。

支持向量的含义

只有拉格朗日乘子 α_i > 0 的训练样本被称为支持向量(Support Vectors)。这些是距离决策边界最近的样本——它们"支撑"着决策边界。其他距离更远的样本(α_i = 0)对决策边界没有影响。

支持向量的这个性质非常优雅:最终的决策函数只依赖于少量"关键"训练样本。这使得 SVM 在预测时非常高效——只需要计算新样本与支持向量的内积。

SVM 核函数的对比

不同核函数的适用场景:

线性核:特征数量远大于样本数量时使用(n >> m)
- 优点:参数少(只有 C),训练快,可解释性好
- 缺点:不能处理非线性决策边界

高斯核(RBF):特征数量少、样本数量适中时使用(n 小,m 中等)
- 优点:可以拟合任意形状的决策边界
- 缺点:需要调两个参数(C 和 σ),训练较慢

多项式核:通常在图像处理中表现好
- 优点:可以捕捉特征交互
- 缺点:参数多(d, c, γ),数值不稳定

SVM 和逻辑回归的关系

SVM 和逻辑回归在数学上有密切联系。逻辑回归的损失函数是交叉熵损失,而 SVM 的损失函数是合页损失。两种损失函数的形状相似但合页损失更加"激进"——它在分类正确且有足够置信度时直接给出零损失。

两者的根本区别:
- 逻辑回归输出概率,SVM 输出类别
- 逻辑回归使用所有样本估计参数,SVM 只依赖支持向量
- 逻辑回归天然支持多分类,SVM 需要通过一对多扩展

SVM 的实践指南

实际使用 SVM 时需要注意:

  1. 特征缩放对于 SVM 至关重要——尤其是使用高斯核时,特征尺度的差异会影响距离计算
  2. SVM 的代价函数是凸的,保证找到全局最优——不需要担心局部最优问题
  3. C 的选择:C 越小,正则化越强,决策边界越平滑(可能欠拟合)
  4. σ² 的选择:σ² 越小,高斯核越尖锐,决策边界越曲折(可能过拟合)

合页损失函数的深入理解

SVM 使用合页损失(Hinge Loss):
loss = max(0, 1 - y·f(x))

其中 f(x) = θᵀx + b(去掉偏置后的决策函数值),y ∈ {-1, 1}。

合页损失的性质:
- 当样本正确分类且在间隔之外(y·f(x) ≥ 1)时,损失为 0
- 当样本在间隔之内(0 < y·f(x) < 1)或分类错误时,损失为正
- 损失函数是凸的,保证了优化问题的全局最优性

与逻辑回归的交叉熵损失相比,合页损失更"严厉"——它不仅要求分类正确,还要求有足够的置信度(处于分类间隔之外)。这就是为什么 SVM 追求大间隔分类。

核方法的核心理念

核技巧(Kernel Trick)是 SVM 最具创造性的贡献之一。其核心思想是:在高维特征空间中做线性分类等价于在原始空间中做非线性分类——而核函数可以直接计算高维空间中的内积,无需显式构造高维特征映射。

常用核函数:
线性核:K(x, z) = xᵀz
多项式核:K(x, z) = (xᵀz + c)ᵈ
高斯核:K(x, z) = exp(-||x-z||² / (2σ²))
Sigmoid 核:K(x, z) = tanh(κ·xᵀz + c)

核函数 K(x, z) 必须满足 Mercer 条件——即核矩阵是半正定的。这保证了相应的优化问题是凸的。

SVM 与神经网络的对比

在 2014 年 Andrew Ng 授课时,SVM 和神经网络都是主流方法。决策建议:
- n 相对 m 很大(如文本分类):逻辑回归或线性 SVM
- n 较小,m 适中:高斯核 SVM
- n 较小,m 很大:添加更多特征后使用逻辑回归/线性 SVM,或使用神经网络
- 所有情况:神经网络通常可以表现良好,但训练需要更多技巧和经验

随着深度学习的发展(2014 年后),神经网络在实践中逐渐占据了主导地位——尤其是在图像、语音、NLP 等领域。但 SVM 在中小型数据集上、在需要可解释性强的应用场景中仍然很有价值。

延伸阅读