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