Lesson 11
支持向量机:最大间隔分类
SVM 寻找使两类之间间隔最大的超平面。本章讲解最大间隔直觉、支持向量的含义、核技巧如何处理非线性、以及 C 和 gamma 的调参策略。
本章细分学习地图
| 模块 | 拆细学习单元 | 完成后应产出 | 掌握标准 |
|---|---|---|---|
| 最大间隔 | 间隔、超平面、支持向量。 | 最大间隔的几何直觉。 | 能说清为什么间隔越大越好。 |
| 软间隔 | 允许误分类、C 的偏差-方差权衡。 | C 对决策边界的影响。 | 能判断 C 偏大或偏小的后果。 |
| 核技巧 | 线性核、RBF 核、多项式核、gamma。 | 不同核的对比。 | 能根据数据选择核函数。 |
| 实战 | SVC 手写数字识别、GridSearchCV 调参。 | 完整分类代码。 | 能用网格搜索找最佳 C 和 gamma。 |
学习目标
SVM 核心概念
1找超平面
2最大化间隔
3核映射(非线性)
4分类预测
本章完成度
已完成 0/4
最大间隔分类
SVM 不是随便找一个能分开两类的超平面,而是找间隔最大的那个——离最近的训练样本尽可能远。
间隔 = 2 / ‖w‖
间隔与权重向量的模成反比
支持向量
距离超平面最近的训练样本。只有它们决定超平面的位置,其他样本可以删掉不影响结果。
为什么间隔越大越好
更大的间隔意味着更强的泛化能力——新样本更不容易落在错误的一侧。
软间隔与参数 C
真实数据很少完全线性可分。软间隔 SVM 允许一些样本违反间隔,用参数 C 控制容忍程度。
| C 值 | 效果 | 偏差-方差 |
|---|---|---|
| C 很大 | 几乎不容忍误分类,间隔小。 | 低偏差,高方差(过拟合风险)。 |
| C 适中 | 平衡误分类数和间隔大小。 | 通常最佳泛化。 |
| C 很小 | 容忍较多误分类,间隔大。 | 高偏差,低方差(欠拟合风险)。 |
核技巧
核函数把原始特征隐式映射到高维空间,让线性不可分的数据在高维空间变得线性可分——而不需要真的计算高维坐标。
| 核函数 | 特点 | 关键参数 |
|---|---|---|
| linear | 线性超平面,速度快。 | 只有 C。 |
| rbf(默认) | 无限维映射,能拟合任意形状。 | C 和 gamma。 |
| poly | 多项式映射,介于 linear 和 rbf 之间。 | C、degree、coef0。 |
gamma 的含义
gamma 控制单个训练样本的影响半径。gamma 大 → 每个样本只影响近邻 → 决策边界复杂(过拟合);gamma 小 → 影响范围广 → 决策边界平滑(欠拟合)。
sklearn 实战:手写数字识别
from sklearn.datasets import load_digits
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split, GridSearchCV
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
pipe = Pipeline([
("scaler", StandardScaler()),
("svc", SVC(kernel="rbf", random_state=42)),
])
# 网格搜索 C 和 gamma
param_grid = {
"svc__C": [0.1, 1, 10],
"svc__gamma": ["scale", 0.01, 0.001],
}
grid = GridSearchCV(pipe, param_grid, cv=5, scoring="accuracy", n_jobs=-1)
grid.fit(X_train, y_train)
print(f"最佳参数: {grid.best_params_}")
print(f"CV 准确率: {grid.best_score_:.4f}")
print(f"测试准确率: {grid.score(X_test, y_test):.4f}")
| SVM 的优势 | SVM 的局限 |
|---|---|
| 在中小数据集上表现优秀。 | 大数据集训练慢(O(n²~n³))。 |
| 核技巧处理非线性,不需手动构造特征。 | 对特征缩放敏感,必须先 StandardScaler。 |
| 只依赖支持向量,鲁棒性好。 | 超参数多(C, gamma, kernel),调参成本高。 |
练习题
第 1 题:什么是支持向量?删掉非支持向量会影响决策边界吗?
参考思路:支持向量是距离超平面最近的训练样本。删掉非支持向量不会改变决策边界——只有支持向量决定超平面位置。
第 2 题:gamma=100 和 gamma=0.001 分别对应什么样的决策边界?
参考思路:gamma=100 → 影响半径极小 → 决策边界极复杂(过拟合);gamma=0.001 → 影响半径极大 → 决策边界平滑(可能欠拟合)。
检查点
离开本章前,请确认:
- 能解释最大间隔和支持向量的几何含义。
- 能用 C 参数权衡间隔大小和误分类容忍。
- 能解释核技巧如何处理非线性,以及 gamma 的影响。
- 能用 Pipeline + GridSearchCV 完成 SVC 实战和调参。