01 核心原理(大白话版)

想象地图上有两类城市:红色和蓝色。你要画一条边界线把它们分开。能画的线有无数条,哪条最好?

SVM 的答案是:找一条线,让它离两边最近的点都尽可能远。就像在两堆点之间修一条最宽的"马路",分界线走马路中央。

三个关键概念

1
超平面

2D 里是一条线,3D 里是一个面,更高维时叫超平面。SVM 就是找这个分界超平面。

2
支持向量

离分界线最近的那几个点。整条"马路"的宽度完全由它们决定——其他点根本不参与计算。

3
核函数

数据不能线性分开怎么办?用核函数把数据"投影"到更高维空间,在那里往往能线性分开,再投影回来。

线性不可分 → 核技巧

线性核

数据本身线性可分时用,最快最简单。

RBF 核(高斯核)

最常用的核,能处理非线性边界,适合大多数场景。参数 γ 控制影响半径。

多项式核

适合特征有乘积交互关系的数据,如图像识别。

SVM 的优势:在小样本、高维数据上表现出色(文本分类、生物信息学)。缺点是大样本训练慢,对特征缩放敏感,使用前务必标准化。

一步步构建 SVM

第一步 生成线性可分数据

SVM 标签用 -1+1(而非 0/1),这样间隔的数学表达式更对称:y·(w·x+b) ≥ 1

第二步 合页损失:只惩罚间隔内的点

间隔足够宽的点损失为 0;只有挤在"马路"里的点才会产生损失,推动边界向外扩。

第三步 次梯度更新:扩大间隔

L2 正则让 ||w|| 变小(间隔变宽),合页损失把分错的点推回正确侧,两者权衡由 C 控制。

第四步 训练循环

重复次梯度更新,||w|| 逐渐缩小,间隔逐渐扩大,支持向量浮现。

四段拼在一起,加上可视化,就是完整演示代码——看下面。

02 代码

03 学术性讲解

硬间隔 SVM(线性可分)

超平面 w·x + b = 0 将两类分开,目标是最大化间隔 2/‖w‖,等价于:

min ½‖w‖² s.t. yᵢ(w·xᵢ + b) ≥ 1, ∀i

这是一个凸二次规划问题,有唯一全局最优解。

软间隔 SVM(允许误分类)

引入松弛变量 ξᵢ ≥ 0,允许部分点越过间隔边界:

min ½‖w‖² + C·Σξᵢ s.t. yᵢ(w·xᵢ + b) ≥ 1 − ξᵢ

参数 C 控制"惩罚力度":C 大 → 不容忍误分,间隔窄;C 小 → 允许误分,间隔宽,正则化更强。

对偶问题与核函数

通过 Lagrange 对偶,原问题转化为只依赖内积 xᵢ·xⱼ 的形式。将内积替换为核函数 K(xᵢ,xⱼ) = φ(xᵢ)·φ(xⱼ),即可在不显式计算高维映射 φ 的情况下在高维空间分类(核技巧)。

常用核函数:

  • 线性核:K(x,z) = x·z
  • 多项式核:K(x,z) = (γx·z + r)ᵈ
  • RBF 核:K(x,z) = exp(−γ‖x−z‖²)

VC 维与泛化界

SVM 最大化间隔等价于最小化模型复杂度(VC 维)。根据结构风险最小化理论,泛化误差上界为:

R(f) ≤ R_emp(f) + O(√(h/n))

其中 h 为 VC 维,n 为样本数。间隔越大,VC 维越小,泛化越好——这是 SVM 理论上"为什么有效"的核心解释。