Skip to content

数学原理

本章目标

  1. 理解 SVC 的核心优化目标——最大化分类间隔,以及为什么间隔越大泛化能力越强。
  2. 理解软间隔中 C 对间隔宽度与误分类惩罚的权衡机制。
  3. 理解 RBF 核如何通过隐式高维映射使非线性数据变得线性可分。
  4. 理解 γ 参数(gamma)对 RBF 核局部影响范围的控制。

重点方法与概念速览

名称类型作用
最大间隔超平面 wTx+b=0决策面寻找使两类样本到边界最小距离最大化的分离面
软间隔 min12|w|2+Cξi优化目标允许少量样本违反间隔约束,C 控制容错程度
支持向量关键样本落在间隔边界上或违反间隔约束的样本——唯一决定最终分类面
对偶问题优化形式将原问题转化为仅依赖样本内积的形式,为核技巧铺路
RBF 核 K(x,z)=exp(γ|xz|2)核函数当前源码默认核,通过"距离越近相似度越高"构造非线性决策能力
gamma超参数控制 RBF 核的局部影响半径——γ 越大,单个支持向量的影响范围越小
决策函数 f(x)=αiyiK(xi,x)+b预测公式预测时只需支持向量参与计算,非支持向量的 αi=0

1. 线性可分情形:硬间隔 SVM

当数据线性可分时,SVM 寻找能将两类正确分开且间隔最大的超平面 wTx+b=0

原问题(Primal)

minw,b12w2s.t.yi(wTxi+b)1,i

其中 yi{1,+1}。约束 yi(wTxi+b)1 要求所有样本正确分类且到边界的函数间隔 ≥ 1。最小化 12w2 等价于最大化间隔(因为间隔 = 2/w)。

对偶问题(Dual)

引入拉格朗日乘子后,对偶形式为:

maxαi=1Nαi12i=1Nj=1Nαiαjyiyjxi,xjs.t.i=1Nαiyi=0,αi0

理解重点

  • 对偶形式只依赖样本间的内积 xi,xj——这正是核技巧的入口:将内积替换为核函数即可获得非线性能力。
  • KKT 条件保证只有支持向量的 αi>0,其余样本的 αi=0——预测时只需存储和计算支持向量。

2. 软间隔与参数 C

真实数据常有噪声或不可完全线性分离,软间隔 SVM 引入松弛变量 ξi0

minw,b,ξ12w2+Ci=1Nξis.t.yi(wTxi+b)1ξi,ξi0

参数速览

参数名类型说明示例取值
Cfloat正则化参数(误分类惩罚系数)。C 越大,越不容忍误分类(间隔变窄、模型更复杂);C 越小,越强调宽间隔(允许更多违例、模型更简单)。默认 1.00.11.010.0100.0

理解重点

  • C 的角色与逻辑回归中的 C 一致——都是正则化强度的倒数:C 等价于 λ(正则越弱)。
  • C 逼近硬间隔 SVM;C0 会使模型过于简单(间隔宽到几乎忽略分类准确性)。
  • 当前源码默认 C=1.0,是一个兼顾稳定性和教学简洁度的起点。

3. 支持向量:谁决定边界

KKT 条件揭示了支持向量的三种角色:

  • αi=0:样本被正确分类且在间隔之外——不影响模型
  • 0<αi<C:样本恰好落在间隔边界上——自由支持向量
  • αi=C:样本在间隔内或被误分类——有界支持向量

参数速览

属性名类型数学含义说明
n_support_ndarray,形状 (n_classes,)各类别的支持向量数量当前二分类返回长度为 2 的数组
n_support_.sum()int支持向量总数反映模型依赖的关键样本规模
support_vectors_ndarray,形状 (n_sv, n_features)支持向量的特征值这些样本唯一决定分类面
dual_coef_ndarrayαiyi对偶系数与标签的乘积
intercept_ndarrayb决策函数的偏置项

理解重点

  • 数以百计的训练样本中,往往只有几十个是支持向量——这正是 SVM 稀疏性的体现。
  • n_support_ 的规模直接反映分类任务的难度:支持向量越多,说明两类越纠缠、边界越复杂。
  • 这也是当前训练日志打印 n_support_ 的教学意义所在。

4. 核函数:从线性到非线性

对偶形式中的内积 xi,xj 可以替换为核函数 K(xi,xj),实现隐式的高维特征映射:

ϕ:RdH,K(xi,xj)=ϕ(xi),ϕ(xj)

参数速览

核函数公式 K(x,z)kernel 取值适用场景
线性核xTz'linear'高维文本、特征数远大于样本数
RBF(高斯)核exp(γ|xz|2)'rbf'通用非线性——当前默认核
多项式核(γxTz+r)d'poly'图像等已归一化的数据
Sigmoid 核tanh(γxTz+r)'sigmoid'近似两层神经网络

理解重点

  • 核技巧的价值:无需显式构造高维特征空间 H(可能是无穷维),只需计算低维空间中的核函数值。
  • 当前源码默认 kernel='rbf'——这是对同心圆非线性数据的直接回应。
  • RBF 核的 Mercer 条件保证了 K(x,z) 确实对应于某个高维空间的内积。

5. RBF 核与参数 γ

参数速览

适用 API:SVC(kernel='rbf', gamma='scale')

参数名类型说明示例取值
gammafloatstrRBF 核系数。'scale'(默认)时 γ=1/(n_featuresX.var())'auto'γ=1/n_features;传入 float 时直接使用。γ 越大,单个支持向量的影响范围越小、边界越精细弯曲'scale''auto'0.11.010.0

理解重点

  • γ 控制 RBF 核的"局部性"——γ 小意味着高斯核的宽度大,单个支持向量影响范围远,决策边界更平滑;γ 大意味着每个支持向量只影响很近的区域,边界精细但容易过拟合。
  • gamma='scale'(scikit-learn 0.22+ 默认)会根据特征方差自动缩放 γ——这使得标准化后的数据获得合理的默认核宽度。
  • γC 共同决定模型的复杂度:高 C + 高 γ 容易过拟合,低 C + 低 γ 容易欠拟合。

6. 标准化为何对 SVC 至关重要

RBF 核计算样本间的欧氏距离:

xz2=j=1d(xjzj)2

如果某个特征的取值量纲远大于其他特征(如 x1[0,1000]x2[0,1]),则 x1 将主导距离计算,扭曲核函数的几何意义。

理解重点

  • 标准化后每个特征的均值为 0、方差为 1,距离计算中各维度平等贡献——这是核方法的标准工程做法。
  • 当前流水线统一使用 StandardScaler 不仅是为了工程一致性,更是 RBF 核对特征尺度的数学依赖所要求的。

7. 决策函数与预测

训练完成后,决策函数为:

f(x)=iSVαiyiK(xi,x)+b

预测时取 y^=sign(f(x))。注意求和只遍历支持向量(αi>0),而非全部训练样本。

理解重点

  • 预测时只需存储支持向量及其 αiyi——对于稀疏解(支持向量少),这比 KNN(需存储全部训练集)更节省内存。
  • SVC 默认不直接输出概率——predict_proba(...) 需要额外启用 probability=True 并通过 Platt scaling 校准,耗时显著增加。当前流水线未使用概率输出。

8. 数学原理如何映射到当前源码

数学概念数学符号/公式代码实现
最大间隔超平面wTx+b=0SVC 算法核心优化目标
软间隔原问题min12|w|2+CξiSVC(C=1.0)
对偶问题maxααi12αiαjyiyjK(xi,xj)SVC 内部 libsvm 求解
RBF 核exp(γ|xz|2)kernel='rbf'
核系数γ=1/(dVar(X))'scale'gamma='scale'
支持向量数量model.n_support_
支持向量SV={xiαi>0}model.support_vectors_
对偶系数 × 标签αiyimodel.dual_coef_
决策函数偏置bmodel.intercept_
类别标签{1,+1}(内部),{0,1}(用户侧)model.classes_
标准化zj=(xjμj)/σjStandardScaler

常见坑

  1. 忽略标准化的关键性——RBF 核对特征尺度极为敏感,不标准化等于让距离计算被量纲绑架。
  2. C 当成"越大越强"的参数——C 越大越容易过拟合,λ=1/C 的逻辑与逻辑回归一致。
  3. 忽略 γC 的联合效应——两者共同决定模型复杂度,单一调参往往效果不佳。
  4. 在不需要核方法的线性数据上默认使用 RBF 核——增加了计算开销而无收益。
  5. 混淆 SVC 的决策函数输出(f(x) 的符号)与概率输出——当前流水线不使用 predict_proba,因为 Platt scaling 会额外引入交叉验证开销。

小结

  • SVC 的数学核心链:最大间隔 min12w2 → 软间隔 +Cξi → 对偶形式 + 内积 → RBF 核 K(x,z)=exp(γxz2) → 决策函数 f(x)=αiyiK(xi,x)+b
  • C 控制软间隔容错,γ 控制 RBF 核局部半径——两者联合决定模型复杂度。
  • 支持向量(n_support_)是 SVC 独有的教学视角——理解它们就是理解 SVC 行为的关键。
  • 当前源码 SVC(C=1.0, kernel='rbf', gamma='scale') 是最经典的非线性 SVM 配置——直接回应同心圆数据的线性不可分特性。