支持向量机

概述

支持向量机(Support Vector Machine, SVM)是一种二分类模型,它的基本思想是:在特征空间中找到一个最优的分离超平面,使得不同类别的样本被正确分开,并且分离超平面到两类样本的间隔最大

为什么叫”支持向量”?

想象你要在平面上画一条线,把圆圈和叉叉分开。你会发现:

  • 大部分点离这条线很远,移动它们不会影响这条线的位置
  • 只有最靠近分界线的几个点,才真正决定了这条线的位置
  • 这些关键的点就叫做**”支持向量”**(Support Vectors)

SVM 的三种情况

根据训练数据的特点,SVM 可以分为三种:

  1. 线性可分支持向量机:当数据线性可分时,使用硬间隔最大化
  2. 线性支持向量机:当数据近似线性可分时,使用软间隔最大化
  3. 非线性支持向量机:当数据线性不可分时,使用核技巧将数据映射到高维空间

学习方法

SVM 的学习策略是间隔最大化,可以形式化为一个凸二次优化问题

学习的基本步骤:

  1. 构造最优化问题(原始问题)
  2. 转化为对偶问题(更容易求解)
  3. 使用 SMO 等算法求解
  4. 得到分离超平面和分类决策函数

线性可分支持向量机与硬间隔最大化

线性可分支持向量机

基本概念

线性可分:给定训练数据集 $T = {(x_1, y_1), (x_2, y_2), \cdots, (x_N, y_N)}$,其中 $x_i \in \mathbb{R}^n$, $y_i \in {+1, -1}$。如果存在某个超平面 $S$ 能够将正负样本完全正确地划分到超平面的两侧,则称数据集线性可分。

分离超平面:超平面可以用线性方程表示:

$$
w \cdot x + b = 0
$$

其中:

  • $w$ 是超平面的法向量,决定了超平面的方向
  • $b$ 是截距,决定了超平面与原点的距离

分类决策函数

$$
f(x) = \text{sign}(w \cdot x + b)
$$

  • 当 $w \cdot x + b > 0$ 时,预测 $y = +1$
  • 当 $w \cdot x + b < 0$ 时,预测 $y = -1$

通俗理解

想象你在平面上有红球和蓝球:

  • 超平面就是分界线(在 3 维空间就是一个平面,高维就是超平面)
  • 法向量 $w$ 就像一个箭头,指向超平面的”正面”
  • 截距 $b$ 决定了分界线在坐标系中的位置

函数间隔和几何间隔

为了找到”最好的”分离超平面,我们需要定义样本点到超平面的”距离”。

函数间隔

对于给定的训练数据集 $T$ 和超平面 $(w, b)$,定义超平面关于样本点 $(x_i, y_i)$ 的函数间隔为:

$$
\hat{\gamma}_i = y_i(w \cdot x_i + b)
$$

超平面关于训练数据集的函数间隔是所有样本点函数间隔的最小值:

$$
\hat{\gamma} = \min_{i=1,\cdots,N} \hat{\gamma}_i
$$

理解函数间隔

  • $w \cdot x_i + b$ 的绝对值表示点到超平面的”距离”
  • 乘以 $y_i$ 是为了统一正负类:
    • 如果分类正确,$y_i(w \cdot x_i + b) > 0$,函数间隔为正
    • 如果分类错误,$y_i(w \cdot x_i + b) < 0$,函数间隔为负
  • 函数间隔越大,分类越确信

问题:函数间隔不是真正的距离!

  • 如果把 $(w, b)$ 成比例地改变为 $(2w, 2b)$,超平面不变,但函数间隔变成 2 倍
  • 所以需要对法向量加以约束,引出几何间隔

几何间隔

对于给定的训练数据集 $T$ 和超平面 $(w, b)$,定义超平面关于样本点 $(x_i, y_i)$ 的几何间隔为:

$$
\gamma_i = y_i \left( \frac{w}{|w|} \cdot x_i + \frac{b}{|w|} \right) = \frac{\hat{\gamma}_i}{|w|}
$$

超平面关于训练数据集的几何间隔是所有样本点几何间隔的最小值:

$$
\gamma = \min_{i=1,\cdots,N} \gamma_i = \frac{\hat{\gamma}}{|w|}
$$

理解几何间隔

  • 几何间隔 = 函数间隔 / $|w|$,相当于对 $w$ 进行了规范化
  • $|w|$ 是 $w$ 的 $L_2$ 范数:$|w| = \sqrt{w_1^2 + w_2^2 + \cdots + w_n^2}$
  • 几何间隔就是点到超平面的真实欧氏距离
  • 几何间隔不随 $(w, b)$ 的成比例缩放而改变

两种间隔的关系

函数间隔和几何间隔的关系:

$$
\gamma = \frac{\hat{\gamma}}{|w|}
$$

如果令 $|w| = 1$,则两者相等。

间隔最大化

最大间隔分离超平面

支持向量机的核心思想:不仅要正确分类所有样本,还要让分类的”确信度”最大化

具体来说,就是要找到几何间隔最大的超平面。这可以表示为约束最优化问题:

$$
\begin{aligned}
\max_{w, b} \quad & \gamma \
\text{s.t.} \quad & y_i \left( \frac{w}{|w|} \cdot x_i + \frac{b}{|w|} \right) \geq \gamma, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

约束条件的含义:每个样本点的几何间隔都要不小于 $\gamma$(即最小几何间隔)。

转化为更简单的形式

由于 $\gamma = \frac{\hat{\gamma}}{|w|}$,上述问题等价于:

$$
\begin{aligned}
\max_{w, b} \quad & \frac{\hat{\gamma}}{|w|} \
\text{s.t.} \quad & y_i (w \cdot x_i + b) \geq \hat{\gamma}, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

关键技巧:函数间隔 $\hat{\gamma}$ 的大小不影响最优化问题的解(因为可以通过等比例缩放 $w, b$ 来改变 $\hat{\gamma}$)。因此,我们不妨令 $\hat{\gamma} = 1$,这样最优化问题变成:

$$
\begin{aligned}
\max_{w, b} \quad & \frac{1}{|w|} \
\text{s.t.} \quad & y_i (w \cdot x_i + b) \geq 1, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

最大化 $\frac{1}{|w|}$ 等价于最小化 $\frac{1}{2}|w|^2$(加 $\frac{1}{2}$ 是为了求导时的方便)。

最终的优化问题(原始问题)

$$
\begin{aligned}
\min_{w, b} \quad & \frac{1}{2}|w|^2 \
\text{s.t.} \quad & y_i (w \cdot x_i + b) - 1 \geq 0, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

这是一个凸二次规划问题

  • 目标函数是二次的
  • 约束条件是线性的
  • 一定存在全局最优解

支持向量

在线性可分情况下,训练数据集的样本点中:

  • 距离超平面最近的点使等号成立:$y_i(w \cdot x_i + b) - 1 = 0$
  • 这些点就是支持向量(Support Vector)

支持向量在两个平行超平面上:

  • $H_1: w \cdot x + b = 1$(正类支持向量所在超平面)
  • $H_2: w \cdot x + b = -1$(负类支持向量所在超平面)

两个超平面之间的距离(即间隔)为 $\frac{2}{|w|}$。

重要性质

  • 只有支持向量决定了分离超平面,其他训练样本不起作用
  • 如果移动非支持向量,分离超平面不变
  • 支持向量的个数一般很少,这使得 SVM 很高效

正例点: $x_1=(3,3)^T,x_2=(4,3)^T$,负例点:$x_3=(1,1)^T$,求最大间隔分离超平面

![[images/截屏2026-04-13 13.46.29.png]]

$$
\begin{aligned}
\min_{w,b}\quad\frac{1}{2}(\omega_1^2+\omega_2^2)
\newline
\text{s.t.}\quad 3\omega_1+3\omega_2+b\geq1
\newline
4\omega_1+3\omega_2+b\geq1
\newline
-\omega_1-\omega_2-b\geq1
\end{aligned}
$$

对 $\frac{1}{2}(\omega_1^2+\omega_2^2)$ 求导,取极小值点(局部最优为全局最优),解得:$\omega_1=\omega_2=\frac{1}{2},b=-2$,于是最大间隔分离超平面为:

$$
\frac{1}{2}x^{(1)}+\frac{1}{2}x^{(2)}-2=0
$$

$x_1=(3,3)^T$ 和 $x_3=(1,1)^T$ 为支持向量

学习的对偶算法

为什么要用对偶算法?

  1. 对偶问题往往更容易求解:将原始问题的约束条件变成了对偶问题的等式约束
  2. 引入核函数:在对偶问题中,训练样本只以内积形式出现,便于使用核技巧
  3. 支持向量直接体现:通过对偶变量 $\alpha_i$ 可以直接看出哪些是支持向量

构造拉格朗日函数

对每个不等式约束引入拉格朗日乘子 $\alpha_i \geq 0$,定义拉格朗日函数:

$$
L(w, b, \alpha) = \frac{1}{2}|w|^2 - \sum_{i=1}^{N} \alpha_i [y_i(w \cdot x_i + b) - 1]
$$

其中 $\alpha = (\alpha_1, \alpha_2, \cdots, \alpha_N)^T$ 是拉格朗日乘子向量。

原始问题

原始问题可以表示为:

$$
\min_{w, b} \max_{\alpha} L(w, b, \alpha)
$$

其中 $\alpha_i \geq 0$。

对偶问题

根据拉格朗日对偶性,原始问题的对偶问题是:

$$
\max_{\alpha} \min_{w, b} L(w, b, \alpha)
$$

求解步骤

第一步:求 $\min_{w, b} L(w, b, \alpha)$

对 $w, b$ 求偏导并令其为 0:

$$
\nabla_w L(w, b, \alpha) = w - \sum_{i=1}^{N} \alpha_i y_i x_i = 0
$$

$$
\nabla_b L(w, b, \alpha) = -\sum_{i=1}^{N} \alpha_i y_i = 0
$$

得到:

$$
w = \sum_{i=1}^{N} \alpha_i y_i x_i
$$

$$
\sum_{i=1}^{N} \alpha_i y_i = 0
$$

第二步:将上述结果代入拉格朗日函数

代入后得到对偶问题:

$$
\begin{aligned}
\max_{\alpha} \quad & \sum_{i=1}^{N} \alpha_i - \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) \
\text{s.t.} \quad & \sum_{i=1}^{N} \alpha_i y_i = 0 \
& \alpha_i \geq 0, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

通常改写为最小化问题:

$$
\begin{aligned}
\min_{\alpha} \quad & \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) - \sum_{i=1}^{N} \alpha_i \
\text{s.t.} \quad & \sum_{i=1}^{N} \alpha_i y_i = 0 \
& \alpha_i \geq 0, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

求解对偶问题

假设 $\alpha^* = (\alpha_1^, \alpha_2^, \cdots, \alpha_N^*)^T$ 是对偶问题的解,则:

  1. 计算 $w^*$

$$
w^* = \sum_{i=1}^{N} \alpha_i^* y_i x_i
$$

  1. 计算 $b^*$

选择 $\alpha^$ 的一个正分量 $\alpha_j^ > 0$(对应的 $x_j$ 是支持向量),计算:

$$
b^* = y_j - \sum_{i=1}^{N} \alpha_i^* y_i (x_i \cdot x_j)
$$

实际计算时,通常取所有支持向量对应的 $b$ 的平均值以提高数值稳定性。

  1. 构造分离超平面和决策函数

分离超平面:

$$
\sum_{i=1}^{N} \alpha_i^* y_i (x \cdot x_i) + b^* = 0
$$

分类决策函数:

$$
f(x) = \text{sign}\left( \sum_{i=1}^{N} \alpha_i^* y_i (x \cdot x_i) + b^* \right)
$$

KKT 条件

最优解 $(w^, b^, \alpha^*)$ 必须满足 KKT(Karush-Kuhn-Tucker)条件:

$$
\begin{aligned}
\nabla_w L(w^, b^, \alpha^) &= 0 \
\nabla_b L(w^
, b^, \alpha^) &= 0 \
\alpha_i^* [y_i(w^* \cdot x_i + b^) - 1] &= 0, \quad i = 1, \cdots, N \
y_i(w^
\cdot x_i + b^) - 1 &\geq 0, \quad i = 1, \cdots, N \
\alpha_i^
&\geq 0, \quad i = 1, \cdots, N
\end{aligned}
$$

重要性质:第三个条件 $\alpha_i^* [y_i(w^* \cdot x_i + b^) - 1] = 0$ 称为*互补松弛条件,它表明:

  • 若 $\alpha_i^* > 0$,则 $y_i(w^* \cdot x_i + b^) = 1$,$x_i$ 是*支持向量
  • 若 $\alpha_i^* = 0$,则 $y_i(w^* \cdot x_i + b^*) > 1$,$x_i$ 不是支持向量

这说明:只有支持向量对应的 $\alpha_i^ > 0$,其余样本的 $\alpha_i^ = 0$**。


线性支持向量机与软间隔最大化

线性支持向量机

为什么需要软间隔?

在实际问题中,训练数据往往不是完全线性可分的,原因可能是:

  1. 存在噪声或异常点:个别异常点导致数据不可分
  2. 类别本身有重叠:在某些特征值下,两类样本本质上无法完全分开

如果仍然使用硬间隔(要求所有点都被正确分类),可能会出现:

  • 无解:不存在能正确分类所有样本的超平面
  • 过拟合:为了迁就个别异常点,分离超平面过于复杂

软间隔的思想:允许某些样本点不满足约束条件 $y_i(w \cdot x_i + b) \geq 1$,但要付出代价

软间隔最大化

对每个样本点 $(x_i, y_i)$,引入松弛变量 $\xi_i \geq 0$,使约束条件变为:

$$
y_i(w \cdot x_i + b) \geq 1 - \xi_i
$$

松弛变量的含义

  • $\xi_i = 0$:样本点在间隔边界上或外侧(满足硬间隔约束)
  • $0 < \xi_i < 1$:样本点在间隔内,但分类正确
  • $\xi_i = 1$:样本点在分离超平面上
  • $\xi_i > 1$:样本点被误分类

同时,目标函数需要加上对松弛变量的惩罚

$$
\frac{1}{2}|w|^2 + C \sum_{i=1}^{N} \xi_i
$$

其中 $C > 0$ 是惩罚参数

  • $C$ 越大,对误分类的惩罚越大,倾向于减少误分类(但可能过拟合)
  • $C$ 越小,对误分类的惩罚越小,倾向于增大间隔(但可能欠拟合)
  • $C$ 是需要通过交叉验证等方法选择的超参数

线性支持向量机的学习问题(原始问题)

$$
\begin{aligned}
\min_{w, b, \xi} \quad & \frac{1}{2}|w|^2 + C \sum_{i=1}^{N} \xi_i \
\text{s.t.} \quad & y_i(w \cdot x_i + b) \geq 1 - \xi_i, \quad i = 1, 2, \cdots, N \
& \xi_i \geq 0, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

这仍然是一个凸二次规划问题

软间隔支持向量

在软间隔情况下,支持向量包括:

  1. 在间隔边界上的样本点:$y_i(w \cdot x_i + b) = 1$, $\xi_i = 0$
  2. 在间隔内但分类正确的样本点:$0 < y_i(w \cdot x_i + b) < 1$, $0 < \xi_i < 1$
  3. 被误分类的样本点:$y_i(w \cdot x_i + b) < 0$, $\xi_i > 1$

所有满足 $\alpha_i > 0$ 的样本都是支持向量。

学习的对偶算法

软间隔的拉格朗日函数

类似于硬间隔,我们引入拉格朗日乘子 $\alpha_i \geq 0$ 和 $\mu_i \geq 0$,构造拉格朗日函数:

$$
L(w, b, \xi, \alpha, \mu) = \frac{1}{2}|w|^2 + C\sum_{i=1}^{N}\xi_i - \sum_{i=1}^{N}\alpha_i[y_i(w \cdot x_i + b) - 1 + \xi_i] - \sum_{i=1}^{N}\mu_i\xi_i
$$

对偶问题的推导

第一步:求 $\min_{w,b,\xi} L(w, b, \xi, \alpha, \mu)$

对 $w, b, \xi$ 分别求偏导并令其为 0:

$$
\nabla_w L = w - \sum_{i=1}^{N} \alpha_i y_i x_i = 0 \Rightarrow w = \sum_{i=1}^{N} \alpha_i y_i x_i
$$

$$
\nabla_b L = -\sum_{i=1}^{N} \alpha_i y_i = 0 \Rightarrow \sum_{i=1}^{N} \alpha_i y_i = 0
$$

$$
\nabla_{\xi_i} L = C - \alpha_i - \mu_i = 0 \Rightarrow \alpha_i + \mu_i = C
$$

第二步:将上述结果代入拉格朗日函数

得到对偶问题:

$$
\begin{aligned}
\min_{\alpha} \quad & \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) - \sum_{i=1}^{N} \alpha_i \
\text{s.t.} \quad & \sum_{i=1}^{N} \alpha_i y_i = 0 \
& 0 \leq \alpha_i \leq C, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

注意:与硬间隔的区别在于约束条件变成了 $0 \leq \alpha_i \leq C$,这是因为 $\alpha_i + \mu_i = C$ 且 $\mu_i \geq 0$。

求解对偶问题

求得最优解 $\alpha^*$ 后:

  1. 计算 $w^*$

    $$
    w^* = \sum_{i=1}^{N} \alpha_i^* y_i x_i
    $$

  2. 计算 $b^*$

选择一个满足 $0 < \alpha_j^* < C$ 的分量(对应的样本在间隔边界上),计算:

$$
b^* = y_j - \sum_{i=1}^{N} \alpha_i^* y_i (x_i \cdot x_j)
$$

KKT 条件

软间隔的 KKT 条件:

$$
\begin{aligned}
\nabla_w L &= 0 \
\nabla_b L &= 0 \
\nabla_{\xi_i} L &= 0 \
\alpha_i[y_i(w \cdot x_i + b) - 1 + \xi_i] &= 0 \
\mu_i \xi_i &= 0 \
y_i(w \cdot x_i + b) - 1 + \xi_i &\geq 0 \
\xi_i &\geq 0 \
\alpha_i &\geq 0 \
\mu_i &\geq 0
\end{aligned}
$$

由于 $\alpha_i + \mu_i = C$,可以分析:

  • 若 $\alpha_i = 0$,则 $\mu_i = C$,从而 $\xi_i = 0$,样本不是支持向量
  • 若 $0 < \alpha_i < C$,则 $\mu_i > 0$,从而 $\xi_i = 0$,样本在间隔边界上
  • 若 $\alpha_i = C$,则 $\mu_i = 0$,$\xi_i$ 可能大于 0,样本在间隔内或被误分类

合页损失函数

从损失函数角度理解软间隔 SVM

线性支持向量机的原始问题可以改写为无约束优化问题:

$$
\min_{w, b} \left[ \frac{1}{2}|w|^2 + C \sum_{i=1}^{N} \max(0, 1 - y_i(w \cdot x_i + b)) \right]
$$

其中 $\max(0, 1 - y_i(w \cdot x_i + b))$ 称为合页损失函数(Hinge Loss):

$$
L(y(w \cdot x + b)) = \max(0, 1 - y(w \cdot x + b))
$$

合页损失函数的特点

几何意义

  • 当样本被正确分类且函数间隔 $\geq 1$ 时,损失为 0
  • 当函数间隔 $< 1$ 时,损失线性增长

与其他损失函数的比较

  • 0-1 损失:$L_{0-1}(y(w \cdot x + b)) = \begin{cases} 1, & y(w \cdot x + b) < 0 \ 0, & y(w \cdot x + b) \geq 0 \end{cases}$,不连续,难以优化
  • 合页损失:连续,是 0-1 损失的上界,便于优化
  • logistic 损失:$L_{\text{log}}(y(w \cdot x + b)) = \log(1 + e^{-y(w \cdot x + b)})$,处处可导

优化目标

$$
\min_{w, b} \sum_{i=1}^{N} [1 - y_i(w \cdot x_i + b)]_+ + \lambda |w|^2
$$

其中 $[z]_+ = \max(0, z)$ 是合页损失,$\lambda$ 是正则化参数,与 $C$ 的关系为 $\lambda = \frac{1}{2C}$。


非线性支持向量机与核函数

核技巧

为什么需要核函数?

对于非线性可分的数据,一个自然的想法是:将数据从原始空间映射到更高维的特征空间,在高维空间中数据可能变成线性可分的。

例子:二维平面上的同心圆问题

  • 在原始的 $(x_1, x_2)$ 空间,内圆和外圆无法用直线分开
  • 映射到 $(x_1, x_2, x_1^2 + x_2^2)$ 空间,可以用平面分开

映射函数

设原始空间为 $\mathcal{X} \subset \mathbb{R}^n$,特征空间为 $\mathcal{H}$(通常是高维甚至无穷维的希尔伯特空间)。定义映射:

$$
\phi: \mathcal{X} \rightarrow \mathcal{H}
$$

将 $x$ 映射为 $\phi(x)$。

核函数的定义

在对偶问题中,训练样本只以内积形式 $x_i \cdot x_j$ 出现。如果直接计算 $\phi(x_i) \cdot \phi(x_j)$,当特征空间维度很高时,计算量会非常大。

核函数的思想:定义函数 $K(x, z)$ 使得:

$$
K(x, z) = \phi(x) \cdot \phi(z)
$$

不需要显式计算映射 $\phi(x)$,就能直接计算高维空间中的内积。这称为核技巧(Kernel Trick)。

核函数的条件

正定核定理:设 $K: \mathcal{X} \times \mathcal{X} \rightarrow \mathbb{R}$ 是对称函数,则 $K(x, z)$ 为正定核函数的充要条件是:对任意 $x_i \in \mathcal{X}$ $(i=1,\cdots,m)$,对应的 Gram 矩阵:

$$
K = [K(x_i, x_j)]_{m \times m}
$$

是半正定的。

常用核函数

1. 多项式核函数

$$
K(x, z) = (x \cdot z + 1)^p
$$

其中 $p$ 是多项式的次数。

特例:当 $p=1$ 时,退化为线性核 $K(x, z) = x \cdot z$。

对应的映射:例如二维情况下 $p=2$:

$$
\phi(x_1, x_2) = (1, \sqrt{2}x_1, \sqrt{2}x_2, \sqrt{2}x_1x_2, x_1^2, x_2^2)
$$

2. 高斯核函数(RBF 核)

$$
K(x, z) = \exp\left( -\frac{|x - z|^2}{2\sigma^2} \right)
$$

其中 $\sigma > 0$ 是带宽参数。

特点:

  • 对应无穷维的特征空间
  • $\sigma$ 越小,模型越复杂(可能过拟合)
  • $\sigma$ 越大,模型越简单(可能欠拟合)
  • 最常用的核函数之一

性质:

  • $K(x, z) \in (0, 1]$
  • 当 $x = z$ 时,$K(x, x) = 1$
  • 当 $|x - z| \rightarrow \infty$ 时,$K(x, z) \rightarrow 0$

3. 字符串核函数

用于文本分类,基于字符串的子序列匹配。

核函数的组合

若 $K_1, K_2$ 是核函数,则下列函数也是核函数:

  • 线性组合:$\gamma_1 K_1 + \gamma_2 K_2$ (其中 $\gamma_1, \gamma_2 > 0$)
  • 乘积:$K_1 \cdot K_2$
  • 直积:$K_1 \otimes K_2$

非线性支持向量机

学习算法

给定训练数据集 $T = {(x_1, y_1), \cdots, (x_N, y_N)}$,选择适当的核函数 $K(x, z)$ 和惩罚参数 $C$,求解对偶问题:

$$
\begin{aligned}
\min_{\alpha} \quad & \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j K(x_i, x_j) - \sum_{i=1}^{N} \alpha_i \
\text{s.t.} \quad & \sum_{i=1}^{N} \alpha_i y_i = 0 \
& 0 \leq \alpha_i \leq C, \quad i = 1, 2, \cdots, N
\end{aligned}
$$

求得最优解 $\alpha^* = (\alpha_1^, \cdots, \alpha_N^)^T$。

分类决策函数

选择 $\alpha^$ 的一个正分量 $0 < \alpha_j^ < C$,计算:

$$
b^* = y_j - \sum_{i=1}^{N} \alpha_i^* y_i K(x_i, x_j)
$$

构造决策函数:

$$
f(x) = \text{sign}\left( \sum_{i=1}^{N} \alpha_i^* y_i K(x, x_i) + b^* \right)
$$

注意:

  • 只有支持向量对应的 $\alpha_i^* > 0$
  • 决策函数实际上只依赖于支持向量
  • 预测时,只需计算新样本与支持向量的核函数值

序列最小最优化算法(SMO)

算法概述

SMO(Sequential Minimal Optimization)算法是一种高效求解 SVM 对偶问题的算法,由 John Platt 于 1998 年提出。

基本思想

SVM 的对偶问题是一个凸二次规划问题,变量个数等于训练样本数。当样本数很大时,通用的二次规划算法会非常慢。

SMO 算法的思想:

  1. 如果所有变量都满足 KKT 条件,则优化问题已解决
  2. 否则,选择两个变量,固定其他变量,构造一个二变量的二次规划问题
  3. 这个子问题有解析解,可以快速求解
  4. 不断迭代,直到收敛

为什么选择两个变量?

由于约束条件 $\sum_{i=1}^{N} \alpha_i y_i = 0$,如果只选择一个变量 $\alpha_i$,它的值由其他变量唯一确定,无法优化。因此至少要选择两个变量。

两个变量的子问题

问题设定

假设选择变量 $\alpha_1, \alpha_2$,固定其他变量,则优化问题变为:

$$
\begin{aligned}
\min_{\alpha_1, \alpha_2} \quad & W(\alpha_1, \alpha_2) = \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 + y_1y_2K_{12}\alpha_1\alpha_2 \
& \quad - (\alpha_1 + \alpha_2) + y_1\alpha_1\sum_{i=3}^{N}y_i\alpha_iK_{i1} + y_2\alpha_2\sum_{i=3}^{N}y_i\alpha_iK_{i2} \
\text{s.t.} \quad & \alpha_1 y_1 + \alpha_2 y_2 = -\sum_{i=3}^{N} y_i \alpha_i = \zeta \
& 0 \leq \alpha_1, \alpha_2 \leq C
\end{aligned}
$$

其中 $K_{ij} = K(x_i, x_j)$,$\zeta$ 是常数。

约束条件的几何意义

约束 $\alpha_1 y_1 + \alpha_2 y_2 = \zeta$ 和 $0 \leq \alpha_1, \alpha_2 \leq C$ 将可行域限制在 $[0, C] \times [0, C]$ 正方形中的一条线段上。

设 $\alpha_2$ 的上下界为 $L$ 和 $H$:

  • 若 $y_1 \neq y_2$:

    • $L = \max(0, \alpha_2 - \alpha_1)$
    • $H = \min(C, C + \alpha_2 - \alpha_1)$
  • 若 $y_1 = y_2$:

    • $L = \max(0, \alpha_2 + \alpha_1 - C)$
    • $H = \min(C, \alpha_2 + \alpha_1)$

解析解

定义:

  • $E_i = f(x_i) - y_i$ 为预测值与真实值的误差
  • $\eta = K_{11} + K_{22} - 2K_{12}$

未经剪辑的解:

$$
\alpha_2^{\text{new, unc}} = \alpha_2^{\text{old}} + \frac{y_2(E_1 - E_2)}{\eta}
$$

剪辑后的解:

$$
\alpha_2^{\text{new}} = \begin{cases}
H, & \alpha_2^{\text{new, unc}} > H \
\alpha_2^{\text{new, unc}}, & L \leq \alpha_2^{\text{new, unc}} \leq H \
L, & \alpha_2^{\text{new, unc}} < L
\end{cases}
$$

相应地更新 $\alpha_1$:

$$
\alpha_1^{\text{new}} = \alpha_1^{\text{old}} + y_1 y_2 (\alpha_2^{\text{old}} - \alpha_2^{\text{new}})
$$

更新阈值 $b$

当 $0 < \alpha_1^{\text{new}} < C$ 时:

$$
b_1^{\text{new}} = -E_1 - y_1K_{11}(\alpha_1^{\text{new}} - \alpha_1^{\text{old}}) - y_2K_{21}(\alpha_2^{\text{new}} - \alpha_2^{\text{old}}) + b^{\text{old}}
$$

当 $0 < \alpha_2^{\text{new}} < C$ 时:

$$
b_2^{\text{new}} = -E_2 - y_1K_{12}(\alpha_1^{\text{new}} - \alpha_1^{\text{old}}) - y_2K_{22}(\alpha_2^{\text{new}} - \alpha_2^{\text{old}}) + b^{\text{old}}
$$

若 $b_1$ 和 $b_2$ 都有效,则它们相等;否则取它们的平均值。

变量的选择方法

第一个变量的选择(外层循环)

选择违反 KKT 条件最严重的变量。

KKT 条件:

$$
\begin{aligned}
\alpha_i = 0 &\Rightarrow y_i f(x_i) \geq 1 \
0 < \alpha_i < C &\Rightarrow y_i f(x_i) = 1 \
\alpha_i = C &\Rightarrow y_i f(x_i) \leq 1
\end{aligned}
$$

启发式方法:

  1. 首先遍历所有满足 $0 < \alpha_i < C$ 的样本(在间隔边界上)
  2. 然后遍历整个训练集
  3. 重复上述过程直到收敛

第二个变量的选择(内层循环)

选择使 $|E_1 - E_2|$ 最大的变量,这样能使目标函数下降最快。

启发式方法:

  • 如果 $E_1$ 为正,选择最小的 $E_i$ 作为 $E_2$
  • 如果 $E_1$ 为负,选择最大的 $E_i$ 作为 $E_2$

SMO 算法流程

输入:训练数据集 $T$,精度 $\epsilon$

输出:近似解 $\hat{\alpha}$

步骤:

  1. 初始化 $\alpha = 0$,$b = 0$
  2. 选择第一个变量 $\alpha_1$
  3. 选择第二个变量 $\alpha_2$
  4. 求解两个变量的优化问题,更新 $\alpha_1, \alpha_2, b$
  5. 检验所有样本是否满足 KKT 条件(精度 $\epsilon$ 内)
    • 若满足,结束
    • 否则,转到步骤 2

收敛性:SMO 算法的收敛性已被证明,在有限步内必然收敛。

复杂度:

  • 每次迭代的时间复杂度是 $O(N)$
  • 总体上比通用 QP 求解器快得多,特别是对大规模数据

总结

SVM 的优缺点

优点

  1. 泛化能力强:基于结构风险最小化原理,而非经验风险最小化
  2. 全局最优解:凸优化问题,不存在局部最优
  3. 适用于高维数据:通过核函数可以处理高维甚至无穷维特征
  4. 稀疏性:只有支持向量影响决策,对异常值相对鲁棒
  5. 理论基础扎实:有完备的数学理论支持

缺点

  1. 对参数敏感:核函数的选择和参数 $C, \sigma$ 的调整需要经验
  2. 训练时间长:对大规模数据,训练速度较慢
  3. 多分类问题:原始 SVM 是二分类器,需要构造多分类策略
  4. 对缺失数据敏感:需要预处理
  5. 概率输出困难:SVM 输出的是决策值,不是概率

多分类 SVM

SVM 本身是二分类模型,处理多分类问题有以下策略:

1. 一对多(One-vs-Rest, OvR)

  • 训练 $K$ 个分类器,第 $k$ 个分类器将第 $k$ 类与其余类分开
  • 预测时,选择决策函数值最大的类

2. 一对一(One-vs-One, OvO)

  • 训练 $\frac{K(K-1)}{2}$ 个分类器,每个分类器区分一对类别
  • 预测时,采用投票法,选择获胜次数最多的类

3. 有向无环图(DAG)

  • 构造有向无环图,每个节点是一个二分类器
  • 预测时,从根节点开始,逐步排除类别

应用场景

SVM 广泛应用于:

  1. 文本分类:垃圾邮件识别、情感分析
  2. 图像识别:人脸识别、手写数字识别
  3. 生物信息学:蛋白质分类、基因分类
  4. 时间序列预测:通过 SVR(支持向量回归)
  5. 异常检测:单类 SVM(One-Class SVM)

与其他算法的比较

特性 SVM 神经网络 决策树
训练速度 较慢
预测速度 非常快
可解释性 中等
参数调优 较复杂 复杂 简单
过拟合风险 中等
高维数据

参考资料

  1. 李航. 统计学习方法(第 2 版). 清华大学出版社, 2019.
  2. Vapnik, V. N. (1995). The Nature of Statistical Learning Theory. Springer.
  3. Platt, J. (1998). Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines.
  4. Cortes, C., & Vapnik, V. (1995). Support-vector networks. Machine learning, 20(3), 273-297.