🏠 总目录📚 本教程 07 · SVM ← →
📑 本页目录(点开跳转)

机器学习的数学原理 · 按需阅读

先看分界线留了多少余量,再看 SVM 的公式。

分对只是起点;SVM 还关心最近的样本离分界线有多远。

先带走的结果

硬间隔先要求样本分对,再尽量扩大间隔;软间隔允许违规,用 C 决定代价。

07 · SVM:最大间隔与对偶

⏱ 30 分钟 | ⭐ 深度学习之前的王者


🎯 一句话

感知机「分对就满意」(第 3 章),SVM 问的是「哪条分界线最好?」—— 答案是离两边都最远的那条。这个"最远"叫间隔,最大化它带来了极好的泛化能力。

只有圈出的这两个点决定了这条线= 支持向量间隔移动其他任何点都不会改变结果
实线是决策边界,两条虚线之间是间隔。⭐ 只有落在间隔边界上的那几个点(圈出的)决定了这条线 —— 这就是「支持向量」;移动其他任何点,结果都不变。

先看间隔:不是只要分对就够了

看图里最近的样本,而不是离边界最远的样本。

📏 一、最大间隔:为什么"最远"是好的

三条边界都把这组样本分开;中间的边界让最近样本离它更远。SVM 的间隔目标关心这个最小距离。示意中不表示一般数据总有唯一边界。都能分开时,比较最近样本到边界的距离靠近实心两侧都留距离靠近空心
三条边界都把这组样本分开;中间的边界让最近样本离它更远。SVM 的间隔目标关心这个最小距离。示意中不表示一般数据总有唯一边界。

图下说明

  • 同样能分开数据的三条线:
  • 贴着●很近 两边都很远 ⭐ 贴着○很近
  • 哪条最好?中间那条。为什么?

三个角度理解:

角度 说明
鲁棒性 新数据总有抖动,留的余量越大,抖过界的可能越小
唯一性 ⭐ 感知机会停在任意一条可行线上(取决于初始化和数据顺序);最大间隔的那条是唯一确定的
理论保证 泛化界可以用 间隔 而非 VC 维来表述(间隔越大界越紧),这是 SVM 理论优雅之处

🔗 这个 γ 就是第 3 章感知机收敛定理里那个 γ—— 在那里它决定收敛速度,在这里它成了优化目标本身。


目标、约束与支持向量

先读式子下方的读法;距离推导可以按需展开。

📐 二、优化问题的形式

目标:最大化单侧几何间隔 γ = 1/‖w‖,等价于最小化 ‖w‖²。

$$\min_{w,b}\; \frac{1}{2}\|w\|^2 \qquad \text{s.t.}\quad y_i(w^\top x_i+b)\ge 1,\ \forall i$$

约束怎么读:每个点都分对,而且带标签的函数间隔至少为 1。这里的 1 是缩放约定,不是说几何距离至少为 1;几何距离还需要除以 ‖w‖。

💡 人话:在"所有点都分对且离边界够远"的前提下,让 w 尽可能小。

📐 为什么间隔是 1/‖w‖(想看再点)

点 $x$ 到超平面 $w^\top x + b = 0$ 的距离是 $\frac{|w^\top x + b|}{\|w\|}$。

我们约定支持向量满足 $|w^\top x + b| = 1$(这只是一个缩放选择,不影响超平面本身)。

所以支持向量到超平面的距离 = $\frac{1}{\|w\|}$,两侧总间隔 = $\frac{2}{\|w\|}$。

最大化间隔 ⟺ 最小化 ‖w‖ ⟺ 最小化 ½‖w‖²(平方和系数是为了求导方便)。

🎯 支持向量:只有少数点说了算

硬间隔 SVM 的三条线上边界 · 支持向量 ⊙决策边界下边界 · 支持向量 ⊙margin = 1/‖w‖margin = 1/‖w‖
看两条虚线上的 ⊙:它们是这个硬间隔示意中的支持向量;两段 margin 各为 1/‖w‖,中间实线才是决策边界。

🔑 SVM 最漂亮的性质:最终模型只由支持向量决定(通常只占样本的一小部分)。 把其他所有点删掉重新训练,得到的分界线一模一样。

三个推论:

推论 说明
对远处的离群点鲁棒 它们根本不参与决策
模型天然稀疏 预测时只需和支持向量算核
⚠️ 对边界附近的噪声敏感 一个标错的点如果落在边界上,会直接改变结果

对偶解决什么问题

它把预测写成内积,为核函数留下入口。

🔄 三、对偶:为什么要绕这一圈

原问题(primal)已经能解了,为什么还要转成对偶(dual)?

📐 对偶形式(想看再点)

引入拉格朗日乘子 $\alpha_i \ge 0$,原问题等价于:

$$\max_{\alpha} \; \sum_i \alpha_i - \frac{1}{2}\sum_i\sum_j \alpha_i\alpha_j y_i y_j \, \underbrace{x_i^\top x_j}_{\text{⭐ 只有内积!}}$$ $$\text{s.t.}\quad \alpha_i \ge 0,\quad \sum_i \alpha_i y_i = 0$$

解出 α 后:$w = \sum_i \alpha_i y_i x_i$

KKT 条件告诉我们:只有满足 $y_i(w^\top x_i+b)=1$ 的点(即支持向量)才有 $\alpha_i > 0$, 其余点 $\alpha_i = 0$ —— 稀疏性是自动出现的,不是人为设计的。

💡 对偶的两个红利

红利 它让什么变得可行
① 只剩内积 xᵢ·xⱼ 直接换成核函数 K(xᵢ, xⱼ) 就得到【核 SVM】;这就是第 6 章核技巧的用武之地!
② 支持向量自动浮现 非支持向量的 α = 0,模型天然稀疏

🔑 对偶不是数学炫技,它是让核技巧能用上的那把钥匙。

原问题:$w^\top x$ —— w 和 x 直接相乘,需要显式的高维向量 💀 对偶:$x_i^\top x_j$ —— 只有 x 之间的内积,可以被核替换 ✅

预测时也只用内积:

$$f(x) = \text{sign}\left(\sum_{i\in SV} \alpha_i y_i \,K(x_i, x) + b\right)$$


数据分不开时:允许违规,但要付代价

把 ξ 的四种位置与 C 的权衡放在一起看。

🩹 四、软间隔:允许犯错

现实数据往往线性不可分(第 3 章感知机的死穴)。 SVM 的解法是允许违规,但要罚:

$$\min_{w,b,\xi}\; \frac{1}{2}\|w\|^2 + C\sum_i \xi_i \qquad \text{s.t. } y_i(w^\top x_i + b) \ge 1 - \xi_i,\ \xi_i \ge 0$$

💡 人话:ξᵢ 是第 i 个点"越界了多少",C 是越界的罚款单价。

对照

ξ = 0 点在边界外,完全合规 ✅

0 < ξ < 1 点越过了边界,但还在正确的一侧

ξ = 1 点正好落在决策边界上

ξ > 1 点被【分错了】 💀

🎚️ C 的含义(最重要的超参)

C 含义 后果
C 大 罚款贵,几乎不许犯错 间隔窄、边界扭曲、过拟合
C 小 罚款便宜,容忍犯错 间隔宽、边界平滑、欠拟合

🔗 C 其实就是正则化强度的倒数:

min ½‖w‖² + C·误差 ⟺ min 误差 + (1/C)·½‖w‖²

对照第 2 章:这就是 λ = 1/C。 SVM 的 C 和岭回归的 λ 是同一个旋钮的两种写法。

💡 软间隔还有一个损失函数视角

原问题可以改写成无约束形式:

$$\min_{w,b} \; \underbrace{\sum_i \max(0,\, 1 - y_i(w^\top x_i + b))}_{\text{Hinge 损失}} + \frac{1}{2C}\|w\|^2$$

这里延续同一个缩放口径:C > 0,损失采用求和,不是平均;偏置 b 也参与优化。软间隔中的支持向量还可能位于间隔带内或被分错,不能把前面的硬间隔示意直接当作软间隔的全部情况。可对照 scikit-learn 的 SVM 数学形式。

损失1y·f(x)(分类间隔)间隔不够:仍然有损失间隔 ≥ 1:损失 = 0这些样本不再推动边界
折点就是 SVM 的“安全边界”:分对还不够,必须离分界线够远;达到间隔后,该点不再贡献梯度。

🔑 和逻辑回归对比:交叉熵损失永远大于 0(哪怕分得很对还想更自信), 所以逻辑回归所有点都参与;Hinge 损失在分对且够远时恰好为 0, 所以那些点的梯度为零,不影响模型 —— 这就是支持向量稀疏性的另一种解释。


把理解变成调参选择

实践建议与适用场景一起看,不把经验当保证。

🎛️ 五、实用调参

先把标准化和 SVM 放进同一个流程,再配置参数搜索。点击讲解卡片,可定位对应代码。

from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV

# ⭐ SVM 必须标准化(它基于距离/内积)
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))

grid = GridSearchCV(pipe, {
    "svc__C":     [0.1, 1, 10, 100],
    "svc__gamma": [0.001, 0.01, 0.1, 1],
}, cv=5, n_jobs=-1)

使用边界:这段代码只配置流程与参数搜索,尚未提供数据,也没有调用 fit 开始训练。

C 和 γ 的交互(经典的对角线现象):

横轴 C,纵轴 γ。两者共同影响拟合;斜带只表示需要联合搜索的区域,不是固定的最佳参数规律。实际应看交叉验证热图。Cγ过局部 / 约束过严欠拟合风险候选区域需实测
横轴 C,纵轴 γ。两者共同影响拟合;斜带只表示需要联合搜索的区域,不是固定的最佳参数规律。实际应看交叉验证热图。

图下说明

  • 过拟合 过拟合 (太局部) (太局部+太严)
  • ⭐ 好的区域在对角线附近
  • 欠拟合

💡 为什么是对角线:C 和 γ 都在增加模型复杂度。 一个大另一个就该小,总复杂度保持在合适水平。

四个必须知道的实践点:

点 说明
必须标准化 ⭐ SVM 基于内积/距离
不适合大数据 n > 10 万就很吃力(第 6 章的 O(n²))
原生不给概率 需要 Platt scaling 校准(probability=True,但会慢很多)
多分类靠拆分 one-vs-one 或 one-vs-rest,不是原生支持

⚖️ 六、SVM 今天还有用吗

场景 建议
中小数据(n < 5 万)+ 特征不多 ✅ 仍然很强,且不太需要调
高维稀疏(文本 TF-IDF) ✅ 线性 SVM 至今是强基线
大数据 ❌ 用 GBDT 或神经网络
需要概率输出 ❌ 要额外校准
深度学习能用的场景(图像/文本) ❌ 预训练模型碾压

💡 历史地位:1995–2012 年 SVM 是机器学习的绝对主流。 它输给深度学习不是因为想法不好,而是因为 O(n²) 不 scale—— 又一次印证「可扩展性胜过精巧设计」。

但线性 SVM 在高维稀疏数据上至今没被淘汰——因为那种场景下它既快又准。


回顾、检查与继续学习

不必重读整页;用检查点定位需要回看的部分。

🔗 七、和站内其他章的关系

相关的地方 这里的位置
第 3 章感知机的 γ 在 SVM 里成了优化目标
第 6 章核技巧 通过对偶形式用上
第 2 章 λ 正则强度 SVM 的 C = 1/λ
逻辑回归的交叉熵 对比 Hinge:交叉熵永远>0 所以不稀疏
基础教程第 5 章过拟合 C 和 γ 都是偏差-方差旋钮

🔗 这一章连到哪里

去哪 为什么
ML基础 03 对照着看:逻辑回归最大化似然、SVM 最大化间隔,同样一条直线两种理由
ML 基础 04 · 决策树:怎么切一刀 另一条路线的分类器 —— 它不画超平面,也就没有间隔这回事
上线之后 02 ⚠️ SVM 的判别值不是概率。要拿分数做阈值或出价,必须先看校准曲线

✅ 检查点

  1. SVM 和感知机的目标有什么不同?最大间隔好在哪(三个角度)?
  2. 什么是支持向量?删掉非支持向量会怎样?这带来什么优缺点?
  3. 为什么要转成对偶形式?关键红利是什么?
  4. C 大和 C 小分别导致什么?C 和 λ 是什么关系?
  5. Hinge 损失和交叉熵最大的区别是什么?这解释了什么?
  6. C 和 γ 的最优区域为什么呈对角线?
  7. SVM 为什么在大数据时代退场了?哪个场景它还活着?
👀 答案
  1. 感知机只要分对就停;SVM 要找间隔最大的那条。三个角度:鲁棒性(留余量抗抖动)、唯一性(感知机的解取决于初始化,最大间隔解唯一)、理论保证(泛化界可用间隔表述)。
  2. 恰好落在间隔边界上的点。删掉所有非支持向量重训,分界线完全不变。优点:对远处离群点鲁棒、模型稀疏;缺点:对边界附近的噪声敏感。
  3. 因为对偶形式里只剩样本间的内积 xᵢ·xⱼ,可以直接替换成核函数。原问题里 w 和 x 直接相乘,需要显式高维向量。
  4. C 大=罚款贵、几乎不许犯错→间隔窄、过拟合;C 小=容忍犯错→间隔宽、欠拟合。C = 1/λ,和岭回归的正则强度是同一旋钮。
  5. Hinge 在「分对且间隔≥1」时恰好等于 0(梯度也为 0),交叉熵永远大于 0。这解释了为什么 SVM 稀疏(只有支持向量起作用)而逻辑回归所有点都参与。
  6. C 和 γ 都在增加模型复杂度,一个大另一个就该小,才能让总复杂度保持在合适水平。
  7. 核矩阵 n×n,复杂度 O(n²)~O(n³),n 超十万就存不下也算不动。线性 SVM 在高维稀疏数据(如文本 TF-IDF)上至今是强基线。

🛑 可以停在这里

⚡ 走神救援

先记住这几件事

  • SVM 不只要求分对,还通过间隔控制分界线离样本有多远。
  • 软间隔允许违规并付出代价,C 调节拟合与容错的权衡。
  • 对偶形式让内积可以替换为核;先标准化并验证 C、核参数,再解释支持向量。

下一节 👉 08-偏差方差分解.md

打卡记录保存在你的浏览器里,首页能看到总进度