支持向量机 (Support Vector Machine, SVM) 是一种非常强大且流行的监督学习算法,可用于分类和回归任务。它的核心思想是找到一个最优的超平面,使得不同类别的数据点之间的间隔 (margin) 最大化。
1. SVM 是什么?
想象一下,你有一些数据点,属于两个不同的类别。SVM 的目标是找到一条线(二维情况下)或一个超平面(更高维度情况下),这条线/超平面能够最好地将这两个类别分开。
- 超平面 (Hyperplane):在 n 维空间中,一个 n-1 维的子空间。例如,在二维空间中,超平面是一条直线;在三维空间中,超平面是一个平面。
- 间隔 (Margin):超平面与离它最近的任何类别的数据点之间的距离。SVM 的目标是最大化这个间隔。
- 支持向量 (Support Vectors):那些离超平面最近的数据点,它们“支撑”着这个超平面。如果移动支持向量,超平面也会随之改变。其他数据点则不影响超平面的位置。
核心思想: 找到一个具有“最大间隔”的决策边界。
2. 线性SVM (Linear SVM)
我们首先从数据线性可分的情况开始。
2.1. 线性可分SVM (硬间隔SVM)
2.1.1. 超平面的定义
在特征空间中,超平面可以用以下线性方程来描述:
w T x + b = 0 w^T x + b = 0 wTx+b=0
其中:
- w = ( w 1 , w 2 , . . . , w d ) w = (w_1, w_2, ..., w_d) w=(w1,w2,...,wd) 是法向量 (normal vector),决定了超平面的方向。
- x = ( x 1 , x 2 , . . . , x d ) x = (x_1, x_2, ..., x_d) x=(x1,x2,...,xd) 是特征向量。
- b b b 是偏置项 (bias term),决定了超平面与原点之间的距离。
一个样本点 x i x_i xi 被预测的类别 y p r e d y_pred ypred 可以通过以下函数得到:
y p r e d = sign ( w T x i + b ) y_{pred} = \text{sign}(w^T x_i + b) ypred=sign(wTxi+b)
其中 s i g n ( ) sign() sign() 是符号函数。如果 w T x i + b > 0 w^T x_i + b > 0 wTxi+b>0,则预测为正类 (通常用 +1 表示);如果 w T x i + b < 0 w^T x_i + b < 0 wTxi+b<0,则预测为负类 (通常用 -1 表示)。
2.1.2. 函数间隔 (Functional Margin)
对于一个给定的训练样本 ( x i , y i ) (x_i, y_i) (xi,yi) (其中 y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} yi∈{−1,+1}) 和一个超平面 ( w , b ) (w, b) (w,b),我们定义函数间隔为:
γ ^ i = y i ( w T x i + b ) \hat{\gamma}_i = y_i (w^T x_i + b) γ^i=yi(wTxi+b)
- 如果 y i = + 1 y_i = +1 yi=+1,我们希望 w T x i + b w^T x_i + b wTxi+b 是一个大的正数。
- 如果 y i = − 1 y_i = -1 yi=−1,我们希望 w T x i + b w^T x_i + b wTxi+b 是一个大的负数。
- 因此, y i ( w T x i + b ) y_i (w^T x_i + b) yi(wTxi+b) 总是正的 (对于正确分类的点),并且值越大,表示分类的确信度越高。
整个训练集的函数间隔定义为所有样本点中最小的函数间隔:
γ ^ = min i = 1 , . . . , N γ ^ i \hat{\gamma} = \min_{i=1,...,N} \hat{\gamma}_i γ^=i=1,...,Nminγ^i
问题: 函数间隔可以通过等比例缩放 w w w 和 b b b (例如,将它们都乘以2) 来任意增大,而超平面本身并没有改变。这使得函数间隔不适合作为优化的目标。
2.1.3. 几何间隔 (Geometric Margin)
点 x i x_i xi 到超平面 w T x + b = 0 w^T x + b = 0 wTx+b=0 的几何距离为:
distance = ∣ w T x i + b ∣ ∥ w ∥ \text{distance} = \frac{|w^T x_i + b|}{\|w\|} distance=∥w∥∣wTxi+b∣
其中 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣ 是 w w w 的 L2 范数 (欧几里得长度)。
对于一个正确分类的样本 ( x i , y i ) (x_i, y_i) (xi,yi),几何间隔为:
γ i = y i ( w T x i + b ∥ w ∥ ) = γ ^ i ∥ w ∥ \gamma_i = y_i \left( \frac{w^T x_i + b}{\|w\|} \right) = \frac{\hat{\gamma}_i}{\|w\|} γi=yi(∥w∥wTxi+b)=∥w∥γ^i
几何间隔不会因为 w w w 和 b b b 的等比例缩放而改变,因此它更适合作为优化的目标。
整个训练集的几何间隔定义为所有样本点中最小的几何间隔:
γ = min i = 1 , . . . , N γ i \gamma = \min_{i=1,...,N} \gamma_i γ=i=1,...,Nminγi
2.1.4. 最大化间隔 (Maximizing the Margin)
SVM 的目标是找到一个超平面 ( w , b ) (w, b) (w,b),使得几何间隔 γ γ γ 最大化。
即:
max w , b γ \max_{w, b} \gamma w,bmaxγ
约束条件是,对于所有样本 i i i:
y i ( w T x i + b ∥ w ∥ ) ≥ γ y_i \left( \frac{w^T x_i + b}{\|w\|} \right) \ge \gamma yi(∥w∥wTxi+b)≥γ
为了简化问题,我们可以固定函数间隔 γ ^ = 1 \hat{\gamma} = 1 γ^=1 (因为 w w w 和 b b b 可以等比例缩放而不改变超平面,所以我们可以选择一个特定的缩放使得支持向量上的函数间隔为1)。
这时,对于支持向量 x s x_s xs,有 y s ( w T x s + b ) = 1 y_s (w^T x_s + b) = 1 ys(wTxs+b)=1。
那么,几何间隔就变成了 γ = 1 / ∣ ∣ w ∣ ∣ \gamma = 1 / ||w|| γ=1/∣∣w∣∣。
最大化 1 / ∣ ∣ w ∣ ∣ 1 / ||w|| 1/∣∣w∣∣ 等价于最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣,也等价于最小化 ( 1 / 2 ) ∣ ∣ w ∣ ∣ 2 (1/2) ||w||^2 (1/2)∣∣w∣∣2 (为了方便求导)。
所以,原始优化问题 (Primal Problem) 变为:
min w , b 1 2 ∥ w ∥ 2 subject to y i ( w T x i + b ) ≥ 1 , ∀ i = 1 , . . . , N \begin{aligned} \min_{w, b} \quad & \frac{1}{2} \|w\|^2 \\ \text{subject to} \quad & y_i (w^T x_i + b) \ge 1, \quad \forall i = 1, ..., N \end{aligned} w,bminsubject to21∥w∥2yi(wTxi+b)≥1,∀i=1,...,N
这是一个带约束的凸二次规划问题。
那些使得 y i ( w T x i + b ) = 1 y_i (w^T x_i + b) = 1 yi(wTxi+b)=1 的点就是支持向量。
2.2. 线性不可分SVM (软间隔SVM)
在实际应用中,数据往往不是完全线性可分的,或者存在一些噪声点/异常点。硬间隔SVM在这种情况下无法工作。
为了解决这个问题,我们引入软间隔 (Soft Margin) 的概念,允许一些点不满足间隔约束 y i ( w T x i + b ) ≥ 1 y_i (w^T x_i + b) \ge 1 yi(wTxi+b)≥1。
2.2.1. 松弛变量 (Slack Variables)
为每个样本点 x i x_i xi 引入一个松弛变量 ξ i ≥ 0 \xi_i \ge 0 ξi≥0 (读作 “ksi”)。
约束条件变为:
y i ( w T x i + b ) ≥ 1 − ξ i , ∀ i = 1 , . . . , N y_i (w^T x_i + b) \ge 1 - \xi_i, \quad \forall i = 1, ..., N yi(wTxi+b)≥1−ξi,∀i=1,...,N
- 如果 ξ i = 0 \xi_i = 0 ξi=0:点 x i x_i xi 在正确的间隔边界之外(被正确分类且满足间隔)。
- 如果 0 < ξ i < 1 0 < \xi_i < 1 0<ξi<1:点 x i x_i xi 在间隔边界之内,但在正确的分类一侧(被正确分类,但间隔不足)。这些点也是支持向量。
- 如果 ξ i = 1 \xi_i = 1 ξi=1:点 x i x_i xi 恰好在超平面上。
- 如果 ξ i > 1 \xi_i > 1 ξi>1:点 x i x_i xi 在超平面的错误一侧(被错误分类)。
2.2.2. 软间隔的优化问题
我们希望松弛变量 ξ i \xi_i ξi 的值尽可能小。因此,在目标函数中加入对松弛变量的惩罚项:
min w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i subject to y i ( w T x i + b ) ≥ 1 − ξ i , ∀ i = 1 , . . . , N ξ i ≥ 0 , ∀ i = 1 , . . . , N \begin{aligned} \min_{w, b, \xi} \quad & \frac{1}{2} \|w\|^2 + C \sum_{i=1}^N \xi_i \\ \text{subject to} \quad & y_i (w^T x_i + b) \ge 1 - \xi_i, \quad \forall i = 1, ..., N \\ & \xi_i \ge 0, \quad \forall i = 1, ..., N \end{aligned} w,b,ξminsubject to21∥w∥2+Ci=1∑Nξiyi(wTxi+b)≥1−ξi,∀i=1,...,Nξi≥0,∀i=1,...,N
其中:
- C > 0 C > 0 C>0 是惩罚参数或正则化参数。它控制了对误分类样本的惩罚程度。
- C C C 很大时:算法会尝试将尽可能多的点正确分类,即使这意味着间隔会变小。模型可能过拟合。
- C C C 很小时:算法会更容忍误分类,以获得更大的间隔。模型可能欠拟合。
C C C 是一个需要通过交叉验证等方法来调整的超参数。
3. 对偶问题 (Duality)
直接求解上述带约束的优化问题比较困难。通常我们会将其转换为对偶问题 (Dual Problem) 来求解。对偶问题有两个主要好处:
- 更容易求解。
- 自然地引入了核技巧 (Kernel Trick),使得SVM可以处理非线性问题。
3.1. 拉格朗日乘子法
对于软间隔SVM的原始问题:
min w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i s.t. y i ( w T x i + b ) ≥ 1 − ξ i ξ i ≥ 0 \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^T x_i + b) \ge 1 - \xi_i \\ & \xi_i \ge 0 \end{aligned} w,b,ξmins.t.21∥w∥2+Ci=1∑Nξiyi(wTxi+b)≥1−ξiξi≥0
我们可以将其改写为标准形式的不等式约束:
- 1 − ξ i − y i ( w T x i + b ) ≤ 0 1 - \xi_i - y_i (w^T x_i + b) \le 0 1−ξi−yi(wTxi+b)≤0
- − ξ i ≤ 0 -\xi_i \le 0 −ξi≤0
引入拉格朗日乘子 α i ≥ 0 \alpha_i \ge 0 αi≥0 和 μ i ≥ 0 \mu_i \ge 0 μi≥0。构造拉格朗日函数 L ( w , b , ξ , α , μ ) L(w, b, \xi, \alpha, \mu) L(w,b,ξ,α,μ):
L ( w , b , ξ , α , μ ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i − ∑ i = 1 N α i [ y i ( w T x i + b ) − 1 + ξ i ] − ∑ i = 1 N μ i ξ i 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^T x_i + b) - 1 + \xi_i] - \sum_{i=1}^N \mu_i \xi_i L(w,b,ξ,α,μ)=21∥w∥2+Ci=1∑Nξi−i=1∑Nαi[yi(wTxi+b)−1+ξi]−i=1∑Nμiξi
其中 α = ( α 1 , . . . , α N ) \alpha = (\alpha_1, ..., \alpha_N) α=(α1,...,αN) 和 μ = ( μ 1 , . . . , μ N ) \mu = (\mu_1, ..., \mu_N) μ=(μ1,...,μN) 是拉格朗日乘子向量。
原始问题等价于:
min w , b , ξ max α ≥ 0 , μ ≥ 0 L ( w , b , ξ , α , μ ) \min_{w, b, \xi} \max_{\alpha \ge 0, \mu \ge 0} L(w, b, \xi, \alpha, \mu) w,b,ξminα≥0,μ≥0maxL(w,b,ξ,α,μ)
其对偶问题是:
max α ≥ 0 , μ ≥ 0 min w , b , ξ L ( w , b , ξ , α , μ ) \max_{\alpha \ge 0, \mu \ge 0} \min_{w, b, \xi} L(w, b, \xi, \alpha, \mu) α≥0,μ≥0maxw,b,ξminL(w,b,ξ,α,μ)
3.2. 求解对偶问题
首先,固定 α \alpha α 和 μ \mu μ,让 L L L 对 w , b , ξ i w, b, \xi_i w,b,ξi 求偏导并令其为0:
对 w w w 求偏导:
∂ L ∂ w = w − ∑ i = 1 N α i y i x i = 0 ⟹ w = ∑ i = 1 N α i y i x i \frac{\partial L}{\partial w} = w - \sum_{i=1}^N \alpha_i y_i x_i = 0 \quad \implies \quad w = \sum_{i=1}^N \alpha_i y_i x_i ∂w∂L=w−i=1∑Nαiyixi=0⟹w=i=1∑Nαiyixi对 b b b 求偏导:
∂ L ∂ b = − ∑ i = 1 N α i y i = 0 ⟹ ∑ i = 1 N α i y i = 0 \frac{\partial L}{\partial b} = -\sum_{i=1}^N \alpha_i y_i = 0 \quad \implies \quad \sum_{i=1}^N \alpha_i y_i = 0 ∂b∂L=−i=1∑Nαiyi=0⟹i=1∑Nαiyi=0对 ξ i \xi_i ξi 求偏导:
∂ L ∂ ξ i = C − α i − μ i = 0 ⟹ C − α i − μ i = 0 \frac{\partial L}{\partial \xi_i} = C - \alpha_i - \mu_i = 0 \quad \implies \quad C - \alpha_i - \mu_i = 0 ∂ξi∂L=C−αi−μi=0⟹C−αi−μi=0
将这些结果代回到拉格朗日函数 L L L 中:
经过化简(这里省略详细代数步骤,但主要思路是将 w w w 代入 ( 1 / 2 ) ∣ ∣ w ∣ ∣ 2 (1/2)||w||^2 (1/2)∣∣w∣∣2 和 ∑ α i y i w T x i \sum \alpha_i y_i w^T x_i ∑αiyiwTxi,并利用 ∑ α i y i = 0 \sum \alpha_i y_i = 0 ∑αiyi=0 和 C − α i − μ i = 0 C - \alpha_i - \mu_i = 0 C−αi−μi=0),得到对偶问题的目标函数:
max α ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i T x j ) subject to ∑ i = 1 N α i y i = 0 0 ≤ α i ≤ C , ∀ i = 1 , . . . , N \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^T x_j) \\ \text{subject to} \quad & \sum_{i=1}^N \alpha_i y_i = 0 \\ & 0 \le \alpha_i \le C, \quad \forall i = 1, ..., N \end{aligned} αmaxsubject toi=1∑Nαi−21i=1∑Nj=1∑Nαiαjyiyj(xiTxj)i=1∑Nαiyi=00≤αi≤C,∀i=1,...,N
注意, μ i ≥ 0 \mu_i \ge 0 μi≥0 和 C − α i − μ i = 0 C - \alpha_i - \mu_i = 0 C−αi−μi=0 意味着 C − α i ≥ 0 C - \alpha_i \ge 0 C−αi≥0,即 α i ≤ C \alpha_i \le C αi≤C。结合 α i ≥ 0 \alpha_i \ge 0 αi≥0,得到约束 0 ≤ α i ≤ C 0 \le \alpha_i \le C 0≤αi≤C。
这是一个关于 α i \alpha_i αi 的二次规划问题。
3.3. KKT 条件
对于原始问题和对偶问题,最优解必须满足 Karush-Kuhn-Tucker (KKT) 条件:
- 主问题可行性: y i ( w T x i + b ) ≥ 1 − ξ i y_i(w^T x_i + b) \ge 1 - \xi_i yi(wTxi+b)≥1−ξi, ξ i ≥ 0 \xi_i \ge 0 ξi≥0
- 对偶问题可行性: α i ≥ 0 \alpha_i \ge 0 αi≥0, μ i ≥ 0 \mu_i \ge 0 μi≥0 (已经通过 0 ≤ α i ≤ C 0 \le \alpha_i \le C 0≤αi≤C 体现)
- 梯度为零: w = ∑ α i y i x i w = \sum \alpha_i y_i x_i w=∑αiyixi, ∑ α i y i = 0 \sum \alpha_i y_i = 0 ∑αiyi=0, C − α i − μ i = 0 C - \alpha_i - \mu_i = 0 C−αi−μi=0
- 互补松弛条件 (Complementary Slackness):
- α i [ y i ( w T x i + b ) − 1 + ξ i ] = 0 \alpha_i [y_i (w^T x_i + b) - 1 + \xi_i] = 0 αi[yi(wTxi+b)−1+ξi]=0
- μ i ξ i = 0 \mu_i \xi_i = 0 μiξi=0
从 KKT 条件可以得到重要结论:
- 由 α i [ y i ( w T x i + b ) − 1 + ξ i ] = 0 \alpha_i [y_i (w^T x_i + b) - 1 + \xi_i] = 0 αi[yi(wTxi+b)−1+ξi]=0:
- 如果 α i > 0 \alpha_i > 0 αi>0,则 y i ( w T x i + b ) − 1 + ξ i = 0 y_i (w^T x_i + b) - 1 + \xi_i = 0 yi(wTxi+b)−1+ξi=0。这些点是支持向量。
- 如果 α i = 0 \alpha_i = 0 αi=0,则该点不是支持向量,对模型没有影响。
- 由 μ i ξ i = 0 \mu_i \xi_i = 0 μiξi=0 和 C − α i − μ i = 0 C - \alpha_i - \mu_i = 0 C−αi−μi=0:
- 如果 0 < α i < C 0 < \alpha_i < C 0<αi<C:则 μ i > 0 \mu_i > 0 μi>0,因此 ξ i = 0 \xi_i = 0 ξi=0。这意味着 y i ( w T x i + b ) = 1 y_i (w^T x_i + b) = 1 yi(wTxi+b)=1。这些点是严格在间隔边界上的支持向量。
- 如果 α i = C \alpha_i = C αi=C:则 μ i = 0 \mu_i = 0 μi=0 (不一定,也可能 μ i > 0 \mu_i > 0 μi>0 如果 C − α i = 0 C - \alpha_i = 0 C−αi=0)。这时 ξ i ≥ 0 \xi_i \ge 0 ξi≥0。
- 如果 ξ i < 1 \xi_i < 1 ξi<1,点在间隔内但正确分类。
- 如果 ξ i ≥ 1 \xi_i \ge 1 ξi≥1,点被错误分类或在超平面上。
- 如果 α i = 0 \alpha_i = 0 αi=0:则 μ i = C > 0 \mu_i = C > 0 μi=C>0,所以 ξ i = 0 \xi_i = 0 ξi=0。这意味着 y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \ge 1 yi(wTxi+b)≥1。这些点在间隔边界之外,被正确分类。
关键点: 只有支持向量 (对应的 α i > 0 \alpha_i > 0 αi>0) 才对最终的 w w w 和 b b b 有贡献。
3.4. 求解 w w w 和 b b b
一旦求解出 α i \alpha_i αi, w w w 可以通过以下公式计算:
w = ∑ i = 1 N α i y i x i w = \sum_{i=1}^N \alpha_i y_i x_i w=i=1∑Nαiyixi
(实际上,只需要对 α i > 0 \alpha_i > 0 αi>0 的支持向量求和)
b b b 的计算:选择任何一个 α j \alpha_j αj 满足 0 < α j < C 0 < \alpha_j < C 0<αj<C 的支持向量 x j x_j xj (这些点满足 ξ j = 0 \xi_j = 0 ξj=0 且 y j ( w T x j + b ) = 1 y_j(w^T x_j + b) = 1 yj(wTxj+b)=1)。
那么:
y j ( w T x j + b ) = 1 ⟹ y j 2 ( w T x j + b ) = y j ⟹ w T x j + b = y j y_j (w^T x_j + b) = 1 \implies y_j^2 (w^T x_j + b) = y_j \implies w^T x_j + b = y_j yj(wTxj+b)=1⟹yj2(wTxj+b)=yj⟹wTxj+b=yj
所以:
b = y j − w T x j = y j − ∑ i = 1 N α i y i ( x i T x j ) b = y_j - w^T x_j = y_j - \sum_{i=1}^N \alpha_i y_i (x_i^T x_j) b=yj−wTxj=yj−i=1∑Nαiyi(xiTxj)
为了稳健性,通常对所有满足 0 < α j < C 0 < \alpha_j < C 0<αj<C 的支持向量计算 b b b,然后取平均值。
3.5. 预测
对于新的数据点 x t e s t x_test xtest,预测其类别:
y p r e d = sign ( w T x t e s t + b ) = sign ( ∑ i = 1 N α i y i ( x i T x t e s t ) + b ) y_{pred} = \text{sign}(w^T x_{test} + b) = \text{sign}\left(\sum_{i=1}^N \alpha_i y_i (x_i^T x_{test}) + b\right) ypred=sign(wTxtest+b)=sign(i=1∑Nαiyi(xiTxtest)+b)
注意,求和只需要对支持向量进行。
4. 核技巧 (Kernel Trick)
对于非线性可分的数据,线性SVM表现不佳。核技巧是一种聪明的方法,可以在不显式地将数据映射到高维空间的情况下,在高维空间中执行线性SVM。
4.1. 非线性映射
基本思想:将原始特征空间中的数据 x x x 通过一个非线性映射函数 ϕ ( x ) \phi(x) ϕ(x) 映射到一个更高维(甚至无限维)的特征空间 H \mathcal{H} H,使得数据在 H \mathcal{H} H 中变得线性可分(或近似线性可分)。
例如,原始数据 x = ( x 1 , x 2 ) x = (x_1, x_2) x=(x1,x2),映射函数 ϕ ( x ) = ( x 1 2 , x 2 2 , 2 x 1 x 2 ) \phi(x) = (x_1^2, x_2^2, \sqrt{2}x_1 x_2) ϕ(x)=(x12,x22,2x1x2)。
在新的特征空间中,SVM的对偶问题变为:
max α ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( ϕ ( x i ) T ϕ ( x j ) ) subject to ∑ i = 1 N α i y i = 0 0 ≤ α i ≤ C , ∀ i = 1 , . . . , N \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 (\phi(x_i)^T \phi(x_j)) \\ \text{subject to} \quad & \sum_{i=1}^N \alpha_i y_i = 0 \\ & 0 \le \alpha_i \le C, \quad \forall i = 1, ..., N \end{aligned} αmaxsubject toi=1∑Nαi−21i=1∑Nj=1∑Nαiαjyiyj(ϕ(xi)Tϕ(xj))i=1∑Nαiyi=00≤αi≤C,∀i=1,...,N
预测函数变为:
y p r e d = sign ( ∑ i = 1 N α i y i ( ϕ ( x i ) T ϕ ( x t e s t ) ) + b ) y_{pred} = \text{sign}\left(\sum_{i=1}^N \alpha_i y_i (\phi(x_i)^T \phi(x_{test})) + b\right) ypred=sign(i=1∑Nαiyi(ϕ(xi)Tϕ(xtest))+b)
问题: ϕ ( x ) \phi(x) ϕ(x) 可能维度非常高,甚至无限维,直接计算 ϕ ( x ) \phi(x) ϕ(x) 和 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T \phi(x_j) ϕ(xi)Tϕ(xj) 可能非常困难或不可能。
4.2. 核函数 (Kernel Function)
核技巧的关键在于,我们发现对偶问题和预测函数中, ϕ ( x ) \phi(x) ϕ(x) 总是以内积 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T \phi(x_j) ϕ(xi)Tϕ(xj) 的形式出现。
如果我们能找到一个核函数 K ( x i , x j ) K(x_i, x_j) K(xi,xj),使得:
K ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) K(x_i, x_j) = \phi(x_i)^T \phi(x_j) K(xi,xj)=ϕ(xi)Tϕ(xj)
那么我们就不需要显式地计算 ϕ ( x ) \phi(x) ϕ(x),只需要计算 K ( x i , x j ) K(x_i, x_j) K(xi,xj) 即可。这大大简化了计算。
4.3. 常用的核函数
线性核 (Linear Kernel):
K ( x i , x j ) = x i T x j K(x_i, x_j) = x_i^T x_j K(xi,xj)=xiTxj
这对应于原始的线性SVM, ϕ ( x ) = x \phi(x) = x ϕ(x)=x。多项式核 (Polynomial Kernel):
K ( x i , x j ) = ( x i T x j + c ) d K(x_i, x_j) = (x_i^T x_j + c)^d K(xi,xj)=(xiTxj+c)d
其中 d d d 是多项式的次数, c c c 是常数。它将数据映射到 ( n + d d ) \binom{n+d}{d} (dn+d) 维空间(近似)。高斯核 / 径向基函数核 (Gaussian Kernel / RBF Kernel):
K ( x i , x j ) = exp ( − ∥ x i − x j ∥ 2 2 σ 2 ) = exp ( − γ ∥ x i − x j ∥ 2 ) K(x_i, x_j) = \exp\left(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\right) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(−2σ2∥xi−xj∥2)=exp(−γ∥xi−xj∥2)
其中 σ \sigma σ (或 γ = 1 / ( 2 σ 2 ) \gamma = 1/(2\sigma^2) γ=1/(2σ2))是核的宽度参数。这是最常用的核函数之一,它可以将数据映射到无限维空间。它能够处理复杂的非线性关系。- γ \gamma γ 越大,高斯分布越窄,模型越倾向于只关注近邻点,容易过拟合。
- γ \gamma γ 越小,高斯分布越宽,模型越平滑,容易欠拟合。
Sigmoid 核 (Sigmoid Kernel):
K ( x i , x j ) = tanh ( κ x i T x j + θ ) K(x_i, x_j) = \tanh(\kappa x_i^T x_j + \theta) K(xi,xj)=tanh(κxiTxj+θ)
其中 κ \kappa κ 和 θ \theta θ 是参数。在某些情况下,它的表现类似两层神经网络。
Mercer 定理:一个对称函数 K ( x i , x j ) K(x_i, x_j) K(xi,xj) 可以作为核函数的充要条件是,对于任意数据集 x 1 , . . . , x m {x_1, ..., x_m} x1,...,xm,其对应的核矩阵 K K K (其中 K i j = K ( x i , x j ) K_{ij} = K(x_i, x_j) Kij=K(xi,xj)) 是半正定的。
4.4. 使用核函数的SVM
将对偶问题中的内积 x i T x j x_i^T x_j xiTxj 替换为核函数 K ( x i , x j ) K(x_i, x_j) K(xi,xj):
max α ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) subject to ∑ i = 1 N α i y i = 0 0 ≤ α i ≤ C , ∀ i = 1 , . . . , N \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 K(x_i, x_j) \\ \text{subject to} \quad & \sum_{i=1}^N \alpha_i y_i = 0 \\ & 0 \le \alpha_i \le C, \quad \forall i = 1, ..., N \end{aligned} αmaxsubject toi=1∑Nαi−21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)i=1∑Nαiyi=00≤αi≤C,∀i=1,...,N
预测函数变为:
y p r e d = sign ( ∑ i ∈ S V α i y i K ( x i , x t e s t ) + b ) y_{pred} = \text{sign}\left(\sum_{i \in SV} \alpha_i y_i K(x_i, x_{test}) + b\right) ypred=sign(i∈SV∑αiyiK(xi,xtest)+b)
其中 S V SV SV 表示支持向量的集合。
b b b 的计算也类似,选择 0 < α j < C 0 < \alpha_j < C 0<αj<C 的支持向量 x j x_j xj:
b = y j − ∑ i ∈ S V α i y i K ( x i , x j ) b = y_j - \sum_{i \in SV} \alpha_i y_i K(x_i, x_j) b=yj−i∈SV∑αiyiK(xi,xj)
5. SMO 算法 (Sequential Minimal Optimization)
求解上述带核函数的对偶问题仍然是一个二次规划问题。当训练样本数量很大时,通用的QP求解器效率不高。
SMO 算法是一种高效的求解 SVM 对偶问题的方法。
其核心思想是:
- 每次迭代选择两个拉格朗日乘子 α i \alpha_i αi 和 α j \alpha_j αj 进行优化。
- 固定其他所有 α k \alpha_k αk ( k ≠ i , j k \ne i, j k=i,j)。
- 由于约束 ∑ α k y k = 0 \sum \alpha_k y_k = 0 ∑αkyk=0, α i \alpha_i αi 和 α j \alpha_j αj 之间存在线性关系,可以将问题简化为单变量优化问题。
- 解析地求解这两个变量,并根据约束 0 ≤ α k ≤ C 0 \le \alpha_k \le C 0≤αk≤C 进行裁剪。
- 重复此过程,直到收敛。
SMO 算法通过启发式方法选择要优化的 α i \alpha_i αi 和 α j \alpha_j αj,以加速收敛。
6. SVM 的优缺点
优点:
- 高维空间表现好:即使特征维度高于样本数量,SVM 仍然有效。
- 内存高效:决策函数只依赖于支持向量,而不是所有训练数据。
- 通用性:通过不同的核函数,可以解决各种线性和非线性问题。
- 间隔最大化:理论上具有较好的泛化能力。
- 鲁棒性:对于非支持向量的噪声不敏感(软间隔一定程度上缓解了对支持向量附近噪声的敏感性)。
缺点:
- 计算复杂度高:当样本数量非常大时,训练时间较长 (尤其是在使用核函数时,需要计算 N x N N x N NxN 的核矩阵)。
- 对参数和核函数的选择敏感: C C C、核函数类型、核函数参数 ( γ \gamma γ, d d d 等) 的选择对性能影响很大,通常需要交叉验证来调优。
- 不直接提供概率估计:SVM 的原始输出是类别标签,而不是概率。虽然可以通过 Platt Scaling 等方法进行校准,但不是其原生特性。
- 对缺失数据敏感。
- “黑盒”模型:解释性不如决策树等模型。
7. SVM 应用场景
- 文本分类 (如垃圾邮件检测)
- 图像分类
- 生物信息学 (如基因分类)
- 手写数字识别
- 人脸检测
总结
SVM 是一种强大的分类算法,其核心在于最大化类别间的间隔。通过引入软间隔和核技巧,SVM 能够处理线性不可分和复杂非线性问题。虽然参数选择和计算效率可能是一些挑战,但其优秀的泛化能力和在高维空间中的有效性使其成为机器学习工具箱中的重要一员。