深入浅出理解支持向量机(SVM):从原理到实践
一、SVM 的核心目标:找到最优划分超平面
1.1 基本需求:实现样本分类
SVM 的核心任务很明确,就是在样本空间中找到一个划分超平面,将不同类别的样本准确分开。比如在二维样本空间中,这个超平面就是一条直线;在三维样本空间中,超平面则是一个平面;而在 n 维样本空间中,超平面是 n-1 维的子空间。
从数学角度来看,超平面可以用方程 wᵀx + b = 0 来表示。其中,w 是超平面的法向量,决定了超平面的方向;b 是偏置项,决定了超平面在空间中的位置。通过这个方程,我们可以判断任意样本点 x 属于哪一类别 —— 当 wᵀx + b > 0 时,样本属于正类(通常标记为 y=+1);当 wᵀx + b < 0 时,样本属于负类(通常标记为 y=-1)。
1.2 理想超平面:具备抗扰动能力
在样本空间中,能实现分类的超平面可能有无数个,但并非所有超平面都能满足实际需求。SVM 追求的是理想超平面—— 这种超平面对训练样本的局部扰动 “容忍性” 最好,也就是说,即使训练样本出现微小的偏移,超平面依然能准确分类,模型的泛化能力更强。
如何衡量超平面的 “容忍性” 呢?这就需要引入 “间隔(margin)” 的概念。间隔指的是两类样本中距离超平面最近的点到超平面的距离之和。理想的超平面,就是能使间隔最大化的超平面。因为间隔越大,超平面与样本点的 “安全距离” 就越远,对局部扰动的抵抗能力自然越强。
二、SVM 的优化过程:从最大化间隔到求解目标函数
2.1 优化目标:最大化间隔
假设样本空间中,距离超平面最近的样本点到超平面的距离为 d,那么间隔 margin = 2d。要最大化间隔,本质上就是最大化 d。
根据点到超平面的距离公式,对于样本点 (xᵢ, yᵢ),其到超平面 wᵀx + b = 0 的距离为:
dᵢ = |wᵀxᵢ + b| / ||w||
(其中 ||w|| 是向量 w 的 L2 范数,即 ||w|| = √(w₁² + w₂² +... + wₙ²))
由于理想超平面能正确分类所有样本,对于正类样本(yᵢ=+1),有 wᵀx + b > 0;对于负类样本(yᵢ=-1),有 wᵀx + b <0。因此,yᵢ(wᵀxᵢ + b) > 0,此时 | wᵀxᵢ + b| = yᵢ(wᵀxᵢ + b),距离公式可简化为:
dᵢ = yᵢ(wᵀxᵢ + b) / ||w||
而距离超平面最近的样本点满足 yᵢ(wᵀxᵢ + b) = 1(通过对 w 和 b 进行放缩变换,可使这个等式成立),这类样本点就是支持向量—— 它们是决定超平面位置的关键,其他样本点对超平面的位置没有影响。
此时,最近样本点到超平面的距离 d = 1/||w||,间隔 margin = 2/||w||。要最大化间隔,就等价于最小化 ||w||²/2(选择 ||w||²/2 是为了后续求导计算更简便,不影响优化方向)。
2.2 带约束的优化问题
综上,SVM 的优化问题可转化为:
- 最小化目标函数:f (w) = (1/2)||w||²
- 约束条件:yᵢ(wᵀxᵢ + b) ≥ 1(i = 1, 2,..., n)
这是一个带不等式约束的凸二次规划问题,直接求解难度较大,因此需要借助拉格朗日乘子法,将其转化为对偶问题进行求解。
2.3 拉格朗日乘子法:转化为对偶问题
对于带约束的优化问题,拉格朗日乘子法的核心思想是将约束条件融入目标函数,构造拉格朗日函数。针对 SVM 的优化问题,构造的拉格朗日函数为:
L (w, b, α) = (1/2)||w||² - Σαᵢ[yᵢ(wᵀxᵢ + b) - 1]
(其中 αᵢ ≥ 0 是拉格朗日乘子,i = 1, 2,..., n)
根据对偶理论,原问题(最小化 f (w))的最优解等价于其对偶问题(最大化拉格朗日函数对 w 和 b 的最小值)的最优解,即:
min (w,b) max (α) L (w, b, α) = max (α) min (w,b) L (w, b, α)
第一步:对 w 和 b 求偏导并令其为 0
要计算 min (w,b) L (w, b, α),需要分别对 w 和 b 求偏导,并令偏导数为 0,得到两个关键条件:
- 对 w 求偏导:∂L/∂w = w - Σαᵢyᵢxᵢ = 0 → w = Σαᵢyᵢxᵢ
- 对 b 求偏导:∂L/∂b = -Σαᵢyᵢ = 0 → Σαᵢyᵢ = 0
第二步:代入拉格朗日函数,简化对偶问题
将 w = Σαᵢyᵢxᵢ和 Σαᵢyᵢ = 0 代入拉格朗日函数,可消去 w 和 b,得到对偶问题的目标函数:
max (α) Σαᵢ - (1/2)ΣΣαᵢαⱼyᵢyⱼ(xᵢ・xⱼ)
(其中 xᵢ・xⱼ是样本点 xᵢ和 xⱼ的内积)
同时,对偶问题的约束条件为:
- Σαᵢyᵢ = 0
- αᵢ ≥ 0(i = 1, 2,..., n)
2.4 求解对偶问题:得到支持向量与超平面
求解上述对偶问题后,我们可以得到最优的拉格朗日乘子 α*。根据 KKT 条件(互补松弛条件),只有支持向量对应的 αᵢ > 0,其他样本点的 αᵢ = 0。
利用 α*,我们可以进一步计算超平面的参数:
- 法向量 w* = Σα*ᵢyᵢxᵢ(仅由支持向量贡献)
- 偏置项 b* = yⱼ - w*ᵀxⱼ(任选一个支持向量 (xⱼ, yⱼ) 计算)
最终,SVM 的分类决策函数为:
f (x) = sign (wᵀx + b) = sign(Σαᵢyᵢ(xᵢ·x) + b)
三、SVM 的关键技术:应对实际数据挑战
3.1 软间隔:处理含噪声的数据
在实际应用中,数据往往存在噪声或异常值,此时 “硬间隔”(要求所有样本都满足 yᵢ(wᵀxᵢ + b) ≥ 1)的要求过于严格,可能导致模型无法找到合适的超平面,或出现过拟合。
为了解决这一问题,SVM 引入了松弛因子 ξᵢ ≥ 0,将约束条件放宽为:
yᵢ(wᵀxᵢ + b) ≥ 1 - ξᵢ
同时,目标函数需要加入对松弛因子的惩罚,以平衡间隔大小和分类错误:
min (w,b,ξ) (1/2)||w||² + CΣξᵢ
(其中 C 是惩罚参数,控制对分类错误的容忍程度)
- 当 C 趋近于无穷大时,惩罚力度极强,模型会尽量避免分类错误,退化为硬间隔 SVM;
- 当 C 趋近于 0 时,惩罚力度极弱,模型允许更多分类错误,间隔会变得很大,但可能导致欠拟合。
软间隔 SVM 的求解过程与硬间隔类似,同样通过拉格朗日乘子法转化为对偶问题,只是约束条件变为 0 ≤ αᵢ ≤ C(C 为惩罚参数)。
3.2 核函数:解决低维不可分问题
在很多场景下,样本在低维空间中是线性不可分的(比如 “异或” 问题),此时硬间隔和软间隔 SVM 都无法直接应用。SVM 的解决方案是将低维空间中的样本映射到高维空间,使样本在高维空间中线性可分。
核函数的核心思想
假设存在一个映射函数 Φ(x),能将低维空间的样本 x 映射到高维特征空间的 Φ(x)。在高维空间中,SVM 的对偶问题目标函数中的内积 (xᵢ・xⱼ) 会变为 (Φ(xᵢ)・Φ(xⱼ))。
然而,直接计算高维空间的内积会面临 “维数灾难”—— 当维度过高时,计算量会急剧增加。核函数的巧妙之处在于,它可以在低维空间中直接计算高维空间内积的结果,无需显式构造映射函数 Φ(x)。
核函数 K (xᵢ, xⱼ) 满足:
K (xᵢ, xⱼ) = Φ(xᵢ)・Φ(xⱼ)
常用的核函数
线性核函数:K(xᵢ, xⱼ) = xᵢ·xⱼ
适用于低维空间中线性可分的数据,本质上就是硬间隔或软间隔 SVM。高斯核函数(RBF 核):K(xᵢ, xⱼ) = exp(-||xᵢ - xⱼ||²/(2σ²))
适用于低维不可分的数据,能将样本映射到无穷维空间,灵活性极高,是实际应用中最常用的核函数之一。其中 σ 是带宽参数,控制核函数的平滑程度。多项式核函数:K(xᵢ, xⱼ) = (xᵢ·xⱼ + c)^d
(c≥0 是常数,d 是多项式的次数)适用于样本具有多项式分布规律的数据。
四、SVM 求解实例:直观理解计算过程
为了让大家更直观地理解 SVM 的求解过程,我们通过一个简单的实例进行演示。
假设存在 3 个样本点:
- 正例 1:x₁=(3,3),y₁=+1
- 正例 2:x₂=(4,3),y₂=+1
- 负例 1:x₃=(1,1),y₃=-1
步骤 1:构造对偶问题目标函数
根据对偶问题的目标函数:
max (α) Σαᵢ - (1/2)ΣΣαᵢαⱼyᵢyⱼ(xᵢ・xⱼ)
代入样本点的内积(x₁・x₁=18,x₁・x₂=21,x₁・x₃=6,x₂・x₂=25,x₂・x₃=7,x₃・x₃=2)和类别标签,目标函数可展开为:
max (α) (α₁ + α₂ + α₃) - (1/2)[18α₁² + 21α₁α₂ - 6α₁α₃ + 21α₂α₁ + 25α₂² - 7α₂α₃ - 6α₃α₁ - 7α₃α₂ + 2α₃²]
结合约束条件 Σαᵢyᵢ = 0(即 α₁ + α₂ - α₃ = 0 → α₃ = α₁ + α₂),代入目标函数并化简,可将其转化为关于 α₁和 α₂的函数。
步骤 2:求解最优 α*
对化简后的目标函数分别求 α₁和 α₂的偏导,并令偏导为 0,得到方程组。求解后发现,直接得到的解不满足 αᵢ ≥ 0 的约束,因此需要在边界上寻找最优解。
通过尝试边界条件(如 α₁=0、α₂=0 等),最终得到最优的 α为:
α₁ = 0.25,α₂* = 0,α₃* = 0.25
(只有 α₁和 α₃ > 0,因此 x₁和 x₃是支持向量)
步骤 3:计算超平面参数
- 法向量 w* = Σα*ᵢyᵢxᵢ = 0.25×1×(3,3) + 0×1×(4,3) + 0.25×(-1)×(1,1) = (0.5, 0.5)
- 偏置项 b* = y₁ - w*ᵀx₁ = 1 - (0.5×3 + 0.5×3) = -2
步骤 4:得到超平面方程与决策函数
超平面方程为:0.5x₁ + 0.5x₂ - 2 = 0
分类决策函数为:f (x) = sign (0.5x₁ + 0.5x₂ - 2)