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

07 · SVM:最大间隔与对偶

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


🎯 一句话

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

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

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

   同样能分开数据的三条线:

      ○ ○ ○ │ ● ● ●          ○ ○ ○  │  ● ● ●         ○ ○ ○│● ● ●
            ↑                        ↑                     ↑
        贴着●很近              两边都很远 ⭐           贴着○很近

   哪条最好?中间那条。为什么?

三个角度理解

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

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


📐 二、优化问题的形式

   目标:最大化间隔  γ = 1/‖w‖
   等价:最小化 ‖w‖²
   约束:所有点都分对,且距离边界至少 1

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

💡 人话在"所有点都分对且离边界够远"的前提下,让 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‖²(平方和系数是为了求导方便)。

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

      ○         ○
         ○   ⊙ ─────────────  ← 上边界
                     margin
      ────────────────────    ← 决策边界
                     margin
         ⊙ ─────────────      ← 下边界
      ●      ●        ●

   ⊙ = 恰好落在边界上的点,叫【支持向量】

🔑 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)$$


🩹 四、软间隔:允许犯错

现实数据往往线性不可分(第 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 \; \underbrace{\sum_i \max(0,\, 1 - y_i(w^\top x_i + b))}_{\text{Hinge 损失}} + \frac{1}{2C}\|w\|^2$$

   Hinge 损失:max(0, 1 − y·f(x))

   loss ▲
        │╲
        │ ╲              分对且间隔 ≥ 1 → 损失 = 0 ⭐
        │  ╲             (这就是稀疏性的来源!)
        │   ╲____________
        └────┴───────────► y·f(x)
             1

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


🎛️ 五、实用调参

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)

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 问⭐「哪条分界线最好」——离两边都最远的那条,这个"最远"叫间隔。三个理由:鲁棒性(新数据有抖动,余量越大越不容易抖过界)、⭐唯一性(感知机的解取决于初始化和数据顺序,最大间隔那条是唯一确定的)、理论保证(泛化界可用间隔而非 VC 维表述,间隔越大界越紧)。这个 γ 就是第 3 章感知机定理里的 γ:那里决定收敛速度,这里成了优化目标。间隔 γ = 1/‖w‖,所以最大化间隔 ⟺ min ½‖w‖²,约束 yᵢ(w·xᵢ+b) ≥ 1。⭐支持向量=恰好落在边界上的那少数点,模型只由它们决定,其余点全删掉重训分界线一模一样:对远处离群点鲁棒、天然稀疏,但⚠️对边界附近的噪声敏感(一个标错的点落在边界上就会改变结果)。⭐⭐对偶不是数学炫技:原问题 wᵀx 需要显式的高维向量,对偶展开后只剩内积 xᵢ·xⱼ,才能整体换成核函数——这就是对偶存在的理由;KKT 保证只有支持向量 αᵢ &gt; 0稀疏性是自动出现的软间隔允许违规但要罚:min ½‖w‖² + C·Σξᵢ(ξᵢ 是越界了多少,ξ > 1 才算真的分错)。⭐C 大=罚款贵→间隔窄、过拟合;C 小=容忍犯错→间隔宽、欠拟合,且 C = 1/λ,和岭回归是同一个旋钮。⭐Hinge 损失在分对且间隔 ≥ 1 时恰好为 0(梯度也为 0,那些点不影响模型)——这是稀疏性的另一种解释;交叉熵永远大于 0,所以逻辑回归所有点都参与。实践:⚠️必须标准化C 与 γ 的好区在对角线上(一个大另一个就得小)、原生不给概率。它输给深度学习不是想法不好,是 O(n²) 不 scale(n 过十万就吃力),但线性 SVM 在高维稀疏数据(文本 TF-IDF)上至今是强基线

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

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