数学原理
本章目标
- 理解 SVC 的核心优化目标——最大化分类间隔,以及为什么间隔越大泛化能力越强。
- 理解软间隔中
对间隔宽度与误分类惩罚的权衡机制。 - 理解 RBF 核如何通过隐式高维映射使非线性数据变得线性可分。
- 理解
参数( gamma)对 RBF 核局部影响范围的控制。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
| 最大间隔超平面 | 决策面 | 寻找使两类样本到边界最小距离最大化的分离面 |
| 软间隔 | 优化目标 | 允许少量样本违反间隔约束, |
| 支持向量 | 关键样本 | 落在间隔边界上或违反间隔约束的样本——唯一决定最终分类面 |
| 对偶问题 | 优化形式 | 将原问题转化为仅依赖样本内积的形式,为核技巧铺路 |
| RBF 核 | 核函数 | 当前源码默认核,通过"距离越近相似度越高"构造非线性决策能力 |
gamma | 超参数 | 控制 RBF 核的局部影响半径—— |
| 决策函数 | 预测公式 | 预测时只需支持向量参与计算,非支持向量的 |
1. 线性可分情形:硬间隔 SVM
当数据线性可分时,SVM 寻找能将两类正确分开且间隔最大的超平面
原问题(Primal)
其中
对偶问题(Dual)
引入拉格朗日乘子后,对偶形式为:
理解重点
- 对偶形式只依赖样本间的内积
——这正是核技巧的入口:将内积替换为核函数即可获得非线性能力。 - KKT 条件保证只有支持向量的
,其余样本的 ——预测时只需存储和计算支持向量。
2. 软间隔与参数
真实数据常有噪声或不可完全线性分离,软间隔 SVM 引入松弛变量
参数速览
| 参数名 | 类型 | 说明 | 示例取值 |
|---|---|---|---|
C | float | 正则化参数(误分类惩罚系数)。1.0 | 0.1、1.0、10.0、100.0 |
理解重点
的角色与逻辑回归中的 一致——都是正则化强度的倒数: 等价于 (正则越弱)。 逼近硬间隔 SVM; 会使模型过于简单(间隔宽到几乎忽略分类准确性)。 - 当前源码默认
C=1.0,是一个兼顾稳定性和教学简洁度的起点。
3. 支持向量:谁决定边界
KKT 条件揭示了支持向量的三种角色:
:样本被正确分类且在间隔之外——不影响模型 :样本恰好落在间隔边界上——自由支持向量 :样本在间隔内或被误分类——有界支持向量
参数速览
| 属性名 | 类型 | 数学含义 | 说明 |
|---|---|---|---|
n_support_ | ndarray,形状 (n_classes,) | 各类别的支持向量数量 | 当前二分类返回长度为 2 的数组 |
n_support_.sum() | int | 支持向量总数 | 反映模型依赖的关键样本规模 |
support_vectors_ | ndarray,形状 (n_sv, n_features) | 支持向量的特征值 | 这些样本唯一决定分类面 |
dual_coef_ | ndarray | 对偶系数与标签的乘积 | |
intercept_ | ndarray | 决策函数的偏置项 |
理解重点
- 数以百计的训练样本中,往往只有几十个是支持向量——这正是 SVM 稀疏性的体现。
n_support_的规模直接反映分类任务的难度:支持向量越多,说明两类越纠缠、边界越复杂。- 这也是当前训练日志打印
n_support_的教学意义所在。
4. 核函数:从线性到非线性
对偶形式中的内积
参数速览
| 核函数 | 公式 | kernel 取值 | 适用场景 |
|---|---|---|---|
| 线性核 | 'linear' | 高维文本、特征数远大于样本数 | |
| RBF(高斯)核 | 'rbf' | 通用非线性——当前默认核 | |
| 多项式核 | 'poly' | 图像等已归一化的数据 | |
| Sigmoid 核 | 'sigmoid' | 近似两层神经网络 |
理解重点
- 核技巧的价值:无需显式构造高维特征空间
(可能是无穷维),只需计算低维空间中的核函数值。 - 当前源码默认
kernel='rbf'——这是对同心圆非线性数据的直接回应。 - RBF 核的 Mercer 条件保证了
确实对应于某个高维空间的内积。
5. RBF 核与参数
参数速览
适用 API:SVC(kernel='rbf', gamma='scale')
| 参数名 | 类型 | 说明 | 示例取值 |
|---|---|---|---|
gamma | float 或 str | RBF 核系数。'scale'(默认)时 'auto' 时 float 时直接使用。 | 'scale'、'auto'、0.1、1.0、10.0 |
理解重点
控制 RBF 核的"局部性"—— 小意味着高斯核的宽度大,单个支持向量影响范围远,决策边界更平滑; 大意味着每个支持向量只影响很近的区域,边界精细但容易过拟合。 gamma='scale'(scikit-learn 0.22+ 默认)会根据特征方差自动缩放——这使得标准化后的数据获得合理的默认核宽度。 和 共同决定模型的复杂度:高 + 高 容易过拟合,低 + 低 容易欠拟合。
6. 标准化为何对 SVC 至关重要
RBF 核计算样本间的欧氏距离:
如果某个特征的取值量纲远大于其他特征(如
理解重点
- 标准化后每个特征的均值为 0、方差为 1,距离计算中各维度平等贡献——这是核方法的标准工程做法。
- 当前流水线统一使用
StandardScaler不仅是为了工程一致性,更是 RBF 核对特征尺度的数学依赖所要求的。
7. 决策函数与预测
训练完成后,决策函数为:
预测时取
理解重点
- 预测时只需存储支持向量及其
——对于稀疏解(支持向量少),这比 KNN(需存储全部训练集)更节省内存。 - SVC 默认不直接输出概率——
predict_proba(...)需要额外启用probability=True并通过 Platt scaling 校准,耗时显著增加。当前流水线未使用概率输出。
8. 数学原理如何映射到当前源码
| 数学概念 | 数学符号/公式 | 代码实现 |
|---|---|---|
| 最大间隔超平面 | SVC 算法核心优化目标 | |
| 软间隔原问题 | SVC(C=1.0) | |
| 对偶问题 | SVC 内部 libsvm 求解 | |
| RBF 核 | kernel='rbf' | |
| 核系数 | 'scale') | gamma='scale' |
| 支持向量数量 | — | model.n_support_ |
| 支持向量 | model.support_vectors_ | |
| 对偶系数 × 标签 | model.dual_coef_ | |
| 决策函数偏置 | model.intercept_ | |
| 类别标签 | model.classes_ | |
| 标准化 | StandardScaler |
常见坑
- 忽略标准化的关键性——RBF 核对特征尺度极为敏感,不标准化等于让距离计算被量纲绑架。
- 把
当成"越大越强"的参数—— 越大越容易过拟合, 的逻辑与逻辑回归一致。 - 忽略
与 的联合效应——两者共同决定模型复杂度,单一调参往往效果不佳。 - 在不需要核方法的线性数据上默认使用 RBF 核——增加了计算开销而无收益。
- 混淆 SVC 的决策函数输出(
的符号)与概率输出——当前流水线不使用 predict_proba,因为 Platt scaling 会额外引入交叉验证开销。
小结
- SVC 的数学核心链:最大间隔
→ 软间隔 → 对偶形式 + 内积 → RBF 核 → 决策函数 。 控制软间隔容错, 控制 RBF 核局部半径——两者联合决定模型复杂度。 - 支持向量(
n_support_)是 SVC 独有的教学视角——理解它们就是理解 SVC 行为的关键。 - 当前源码
SVC(C=1.0, kernel='rbf', gamma='scale')是最经典的非线性 SVM 配置——直接回应同心圆数据的线性不可分特性。