# Ml Svm Playbook

> SVM 使用决策树：可分性判断→硬/软间隔→核函数选型→C 与 γ 调优→规模可行性。用户问 "SVM 参数怎么选""选哪个核 / kernel choice""C 和 gamma""支持向量机适用场景"，或完美可 分而沾沾自喜、大数据上硬跑非线性核时激活。纪律：默认软间隔(完美线性可分可能是过拟合假 象)；文本用线性核、不明先试高斯核；核选择是最大变数且未决；非线性核不低于 O(m²)。 不适用于：横向选型(ml-task-matching)、需自然概率输出的场景。trigger: support vector machine, kernel trick, soft margin, hinge loss, RBF kernel, 核函数。

- Skill: `fieldlu/ml-svm-playbook` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add fieldlu/ml-svm-playbook`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fieldlu/ml-svm-playbook/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: fieldlu (https://skillmd.com/u/fieldlu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fieldlu/ml-svm-playbook

---


# SVM 使用决策树 — 从间隔到核到 C/γ 的完整走法

## R — 原文 (Reading)

> "直观上看，应该去找位于两类训练样本'正中间'的划分超平面……该划分超平面对训练样本局部扰
> 动的'容忍'性最好。……这个划分超平面所产生的分类结果是最鲁棒的，对未见示例的泛化能力最
> 强。"
>
> — 周志华，《机器学习》第6章 6.1节 "间隔与支持向量"

> "然而在现实任务中，原始样本空间内也许并不存在一个能正确划分两类样本的超平面。……可将样
> 本从原始空间映射到一个更高维的特征空间，使得样本在这个特征空间内线性可分。"
>
> — 周志华，《机器学习》第6章 6.3节 "核函数"

> "'核函数选择'成为支持向量机的最大变数。若核函数选择不合适，则意味着将样本映射到了一个不
> 合适的特征空间，很可能导致性能不佳。"（边注："对文本数据通常采用线性核，情况不明时可先尝
> 试高斯核"）
>
> — 周志华，《机器学习》第6章 6.3节

---

## I — 方法论骨架 (Interpretation)

SVM 的一切设计都从一个观察出发：能把两类分开的超平面有无穷多个，要选的是"正中间"、对局部扰动容忍性最好的那一个——最大化间隔等价于最小化 ‖w‖²。由此长出一棵四层决策树：

1. **可分性**：原空间线性可分吗？不可分就升维——有限维原空间必存在使其可分的高维特征空间；核函数 κ(·,·) 让你不必显式计算那个（可能无穷维的）映射。
2. **硬还是软**：即便找到了完美分开训练集的解，也很难断定它不是过拟合造成的。所以现实任务默认软间隔：引入松弛变量允许少数样本越界，用常数 C 折中"间隔大"与"违约少"。
3. **选哪个核**：核隐式定义特征空间，选错核 = 映射进错误空间，调参救不回来。经验序列：文本/高维稀疏 → 线性核；情况不明 → 先试高斯核；仍不行 → 考虑多核组合（借集成思想）。
4. **调 C 与 γ**：C 是对越界的容忍度旋钮，γ 控制高斯核的作用半径；二者都要靠交叉验证定，且选定后在全量数据上重训。

贯穿始终的一条暗线：SVM 的解只由少数支持向量决定，其复杂度主要与支持向量数目有关——这既是它的效率来源，也是大规模数据上的天花板。

---

## A1 — 书中的应用 (Past Application)

### 案例 1: 最大间隔超平面的鲁棒性论证 (c18)
- **问题**: 无穷多个能分开两类的超平面，凭什么选间隔最大的？
- **方法论的使用**: 作者给出直觉论证——由于训练集的局限性或噪声，训练集外样本可能比训练样本更贴近分隔界，多数超平面会因此出错，唯有居中的超平面受影响最小。
- **结论**: 最大间隔不是几何审美，是对未见样本泛化能力的直接下注；随后形式化为支持向量、间隔与 min ½‖w‖² 基本型。
- **结果**: 对偶求解后 KKT 条件显示最终模型仅与支持向量有关——"训练完成后，大部分的训练样本都不需保留"，这一稀疏性成为 SVM 的标志性性质。

### 案例 2: 异或问题的核技巧升维 (c19)
- **问题**: 异或在二维原空间非线性可分（呼应 ch05 感知机的困境），怎么办？
- **方法论的使用**: 映射到合适的三维空间即线性可分；但 φ(x)ᵀφ(z) 直接计算开销巨大甚至无穷维，于是用核函数在原空间直接算出高维内积——"核技巧"。定理 6.1 给出合法性判据：对称函数的核矩阵半正定即可作核。
- **结论**: 低维不可分 ≠ 无解，换空间常常一步解决；但空间好坏完全由核决定。
- **结果**: 引出"核函数选择是最大变数"的核心警告，以及文本线性核/不明先试高斯核的经验法则。

### 案例 3: 软间隔动机——从硬间隔的脆弱到松弛变量
- **问题**: 硬间隔要求所有样本满足约束，为什么现实中没人这么用？
- **方法论的使用**: 作者指出"退一步说，即便恰好找到了某个核函数使训练集在特征空间中线性可分，也很难断定这个貌似线性可分的结果不是由于过拟合所造成的"；于是允许部分样本不满足约束，用 0/1 损失的替代者 hinge 损失重写为带松弛变量 ξᵢ 的软间隔形式。
- **结论**: 完美可分本身可能是过拟合症状；C→∞ 时退化为硬间隔，C 取有限值才有鲁棒性。hinge 损失的零区域同时保住了解的稀疏性。
- **结果**: 软间隔成为 SVM 标准形态，并与对率回归形成对照（后者有概率输出但无稀疏性）。

---

## A2 — 触发场景 (Future Trigger) ★

### 用户会在什么情境下需要这个 skill?

1. 用户已决定用 SVM，面对一排选项不知道从哪下手："linear 还是 rbf？""C 和 gamma 怎么设？"
2. 用户加了核之后训练集 100% 可分、正准备庆祝，需要有人泼冷水并给下一步动作。
3. 用户在几十万级样本上跑非线性核 SVM 训练卡死，不知道是参数问题还是路线问题。
4. 文本/高维稀疏数据上用户想上 RBF 核"增强能力"，需要被拦住。
5. 二分类之外的推广需求出现（多分类），需要知道 SVM 原生不支持、要走拆解策略。

### 语言信号 (用户的话里出现这些就应激活)

- "SVM 参数怎么选？" / "C 和 gamma 怎么调？" / "C and gamma"
- "选哪个核？" / "kernel choice" / "linear kernel vs RBF"
- "支持向量机适用场景" / "什么时候该用 SVM"
- "加核以后完美分开了" / "training accuracy 100% with RBF kernel"
- "SMO / LIBSVM 跑不动了" / "SVM 大数据集太慢"

### 与相邻 skill 的区分

- 与 `ml-diagnosis` 的区别: diagnosis 管"效果不好怎么归因"；本 skill 是 SVM 专属的构造性决策树（可分性→间隔→核→参数）。SVM 训练精度 100% 这个红旗先经本 skill 判读（x26），确诊过拟合后的系统性归因移交 diagnosis。
- 与 `ml-neural-training` 的区别: 平行的非线性建模路线。NN 用层级结构逐层加工表示，SVM 用核一步定义特征空间；书中指出高斯核 SVM 与 RBF 网络在特定设置下预测函数相同——两条路高度相关但工程决策完全不同，各归各的 playbook。
- 与 `ml-multiclass-strategies` 的区别: SVM 是二分类器，遇到多分类必须外接拆解策略（OvO/OvR/ECOC）；"SVM 用于 N 类问题怎么拆"的工程细节归 multiclass-strategies，本 skill 只负责标记"此处需要拆解"。

---

## E — 可执行步骤 (Execution)

当 skill 被激活后, agent 应按以下步骤执行:

1. **审数据形态，答可分性**
   - 完成标准: 明确记录维度 d、样本量 m、稀疏性与数据类型（文本/表格/图像）；回答"原空间是否近似线性可分"（可视化/线性基线先行）。
   - 判停条件: 数据为文本或高维稀疏 → 锁定线性核，跳到步骤 4（LIBLINEAR 类工具）。

2. **定间隔策略：默认软间隔**
   - 完成标准: 除非有充分证据数据干净且确需严格可分，否则采用软间隔；向用户复述红旗逻辑——"很难断定貌似线性可分的结果不是过拟合"，一个异常点就能剧烈改变硬间隔解。

3. **选核：三步经验序列**
   - 完成标准: 按序执行并记录每步验证结果——(a) 文本/高维稀疏 → 线性核（冗余度大的属性空间足以"打散"文档，迄今仍是文本分类首选）；(b) 情况不明 → 先试高斯核；(c) 单核不佳 → 考虑多核学习凸组合。向用户声明：核选择理论上无通用答案（未决问题），换核性能剧变属正常现象而非操作失误。

4. **调 C 与 γ**
   - 完成标准: 以交叉验证网格/随机搜索确定惩罚系数 C 与核参数 γ；明确报告两者的角色——C 小 → 容忍越界求鲁棒，C 大 → 逼近硬间隔；γ 大 → 决策边界更弯。提醒候选值只是"计算开销与估计质量的折中"，选定配置后必须在全量数据上重训交付。

5. **规模可行性判停**
   - 完成标准: 检查 m 的量级——非线性核 SVM 时间复杂度理论下界 O(m²)，m 上十万级须改道：换线性核 + 线性求解器（如 Pegasos/坐标下降），或采样/低秩近似（Nyström、随机傅里叶特征）。输出明确的复杂度警告后再动手。

---

## B — 边界 (Boundary) ★

### 不要在以下情况使用此 skill

- 尚未完成模型族横向选型（SVM vs NN vs 树模型 vs 线性基线）→ 先走 `ml-task-matching`，脱离具体问题谈"SVM 强不强"违反 NFL 原则。
- 任务需要自然的概率输出 → SVM 输出无概率意义，需 Platt 缩放等特殊处理；若概率是核心诉求，对率回归更对口（两者优化目标相近、性能通常相当）。
- 极端类别不平衡场景 → 先确认度量与再平衡策略（`ml-imbalanced-learning`），否则 SVM 会把少数类整体吞掉。

### 作者在书中警告的失败模式

- **完美线性可分 = 过拟合假象 (x26)**: 升维总能使训练集可分，但这种可分可能只是记住了噪声；间隔被个别离群点挟持、决策面扭曲——这正是 SVM 对噪声敏感的根源（习题 6.6 专门要求分析）。追求 100% 可分而不断加大 C 或换更强核是最危险的路径。
- **核选择最大变数 (x25)**: 选错核等于映射进错误特征空间，性能大幅波动且无从解释；核选择本身是未决问题，不存在"最强核"。在高维稀疏文本上硬用 RBF 核是典型误用。
- **大规模复杂度陷阱**: 对偶问题的规模正比于训练样本数；非线性核复杂度不可能低于 O(m²)——大数据上盲目硬跑是算力黑洞。

### 作者的盲点 / 时代局限

- 成书于 2015-2016，正值 SVM 黄金期的尾声：未覆盖深度学习全面超越后 SVM 的生态位收缩（如今主要是中小规模表格数据与文本基线）；也未涉及 modern kernel approximation 的大规模实践进展。
- 全书 i.i.d. 视角，无在线/流式 SVM 更新的讨论；工程侧仅点到 LIBSVM/LIBLINEAR，无生产化部署经验（特征管道、线上线下一致性）。
- 多分类需专门推广这一点只在阅读材料提及，正文未展开——读者易误以为 SVM 可直接多用。

### 容易混淆的邻近方法论

- **高斯核 SVM vs RBF 网络**: 书中边注明示——若隐层神经元数取样本数、每个样本对应一个神经元中心，RBF 网络与高斯核 SVM 预测函数相同；两者是同一族方法的两种包装。
- **软间隔 C vs 正则化 λ**: 同一枚硬币的两面——C 是"违约惩罚"视角，λ 是"结构风险权重"视角；结构风险-经验风险框架（min 经验风险 + 结构风险项）是它们的统一语言。
- **支持向量 vs 全体样本**: 训练完成后大部分样本不需保留，模型仅由支持向量构成；把 SVM 当"记忆全部数据的最近邻类方法"是概念错误。

---

## 相关 skills

- depends-on: ml-task-matching（选型前置）
- contrasts-with: ml-neural-training（平行非线性路线，高斯核 SVM ≙ RBF 网）, ml-pitfall-audit（审计报警 vs 本 skill 执行）
- composes-with: ml-multiclass-strategies（SVM 多分类必须外接拆解）, ml-diagnosis（100% 可分红旗确诊后的归因）

---

## 审计信息

- **验证通过**: V1 ✓ / V2 ✓ / V3 ✓
- **素材单元**: c18, c19 / x25, x26 / p29（扩充批A 新增单元，阶段 1.5 池外补充）
- **skill_version**: 0.0.1
- **蒸馏时间**: 2026-08-24

