AI 工程基础体系 · 第 46/100 篇。内容覆盖机器学习、深度学习与生成式 AI;模型、数据、评测、权限和成本会作为同一生产系统处理。
支持向量机与核方法:最大间隔、软间隔、核技巧和参数选择
支持向量机(Support Vector Machine,SVM)是一类以“间隔最大化”为核心的监督学习方法。它最初用于二分类,但同一思想可以扩展到多分类、回归和异常检测。所谓核方法,则是一组通过核函数在不显式构造高维特征的情况下使用高维内积的方法。核技巧是其中最重要的计算手段。
SVM 的关键不只是“找一条分类线”,而是:
- 在能正确分类的超平面中,选择离两类样本最近距离最大的一个;
- 样本不可完全分离时,允许部分样本违反间隔约束,但通过惩罚控制违反程度;
- 当原始空间中不存在合适的线性边界时,用核函数隐式地把样本映射到另一个特征空间;
- 通过交叉验证、数据缩放和任务指标选择正则化与核函数参数。
下文先从线性可分的二分类问题开始,再逐步引入软间隔、对偶问题和核技巧。
1. 从分类超平面开始
设训练集为:
其中:
- 是第 个样本;
- 是二分类标签;
- 是样本数;
- 是特征维度。
线性分类器用一个超平面表示:
其中 是法向量,决定超平面的方向, 是偏置,决定超平面的位置。分类规则是:
当 时预测为 ,否则预测为 。
同一个超平面可以由无穷多个参数表示。例如:
和
表示相同的几何边界。因此,若要定义“样本距离边界多远”,必须消除参数缩放带来的歧义。
点 到超平面的几何距离为:
带标签的有符号距离可以写成:
因为 会把两个类别统一到“正确方向”。
2. 最大间隔:为什么不是任意分割线都一样
2.1 规范化约束
假设训练数据线性可分。为了消除 的缩放自由度,可以规定离分类边界最近的样本满足:
这会产生两条间隔边界:
和
两条平行超平面之间的距离是:
推导如下。两条边界的函数值相差 2,沿法向量方向移动单位距离,函数值变化为 ,所以距离为 。
因此,最大化间隔等价于最小化 。通常写成凸二次优化问题:
这里的 不影响最优解,只是使求导结果更简洁。
满足约束且恰好取等号的样本:
位于间隔边界上,称为支持向量。它们决定最优超平面的位置;远离间隔的样本通常不会直接影响最终模型。
2.2 一个完整的二维算例
考虑四个样本:
显然,按 的符号分类。取:
则:
对正类样本:
对负类样本:
所有样本都恰好在间隔边界上,因此都是支持向量。
此时:
两条间隔边界为:
和:
间隔宽度为:
分类边界为 。注意,分类边界到任一间隔边界的距离是 ,而两条间隔边界之间的距离是 。工程文档中“margin”有时指半间隔,有时指整个间隔,必须明确所采用的定义。
2.3 最大间隔的统计直觉
如果训练样本存在小幅测量误差,距离分类边界较远的模型通常比“贴着样本穿过”的模型更稳定。最大间隔并不等于保证测试误差最低,但它通过限制 限制了分类函数的复杂度,形成一种几何形式的正则化。
这也是一个重要边界:最大间隔依赖特征空间和特征尺度。如果把某个特征的数值整体放大,、距离和参数都会改变。对于带 RBF 核的 SVM,尺度变化还会改变样本之间的核相似度。因此,数值特征通常应先标准化。
3. 硬间隔的限制与软间隔
3.1 硬间隔何时失效
硬间隔要求每个样本都满足:
如果数据不可线性分离,这个约束集合为空,优化问题没有可行解。即使数据理论上可分,一个标签错误或异常值也可能使硬间隔模型完全不可用。
例如在一维中,下面两个样本具有相同特征却有相反标签:
任何确定的线性函数在 只能得到一个值,不可能同时满足两个相反的硬间隔约束。
3.2 引入松弛变量
软间隔为每个样本引入松弛变量 :
优化问题变为:
其中 是惩罚参数。
松弛变量具有直接的几何含义:
- :样本在间隔外或恰好位于间隔边界;
- :样本分类正确,但落入间隔内部;
- :样本位于分类边界上;
- :样本被错误分类。
参数 控制两种目标的权衡:
- 减小 ,得到更宽的间隔;
- 减小松弛变量总和,减少训练样本违反间隔的程度。
较大的 更重视训练集约束,通常会努力纠正异常点,可能导致过拟合;较小的 更容忍违反间隔,通常得到更强正则化,但可能欠拟合。
3.3 与合页损失的等价形式
定义合页损失(hinge loss):
令:
对固定的 ,使约束成立所需的最小松弛变量是:
代入原目标,可得到无约束形式:
这说明软间隔 SVM 同时优化:
- 参数范数正则项;
- 合页损失。
合页损失不仅惩罚错误分类,也惩罚“虽然分类正确但距离边界不足 1”的样本。一个正确分类但 的样本,其合页损失仍为 。
4. 对偶问题:支持向量为何能决定模型
直接在原始问题中优化 是一种做法。核方法之所以可行,关键在于 SVM 的对偶形式只需要样本之间的内积。
4.1 构造拉格朗日函数
为约束:
引入拉格朗日乘子 ;为 引入 。拉格朗日函数为:
对 分别求偏导并令其为零。
对 求导:
因此:
这已经说明,最优权重是训练样本的线性组合。
对 求导:
因此:
对 求导:
由于 ,得到:
4.2 对偶优化问题
消去原变量后,软间隔 SVM 的对偶问题为:
预测函数为:
当 时,样本 不出现在预测函数中,因此不是支持向量。只有 的样本会影响模型。
根据 KKT 条件:
- 的样本通常恰好位于间隔边界;
- 的样本通常位于间隔内或被错误分类;
- 的样本通常位于间隔外。
“通常”很重要:在多个样本共线、数值退化或恰好落在边界等情况下,支持向量集合可能不具有唯一的数值表达。
对某个满足 的样本,可以计算偏置:
实际实现会对合适的样本或约束进行更稳定的处理。
5. 核技巧:不显式构造高维特征
5.1 从线性不可分到特征映射
设存在一个特征映射:
它把原始输入映射到特征空间 。在该空间中使用线性 SVM:
对偶问题只使用内积:
如果定义核函数:
就可以在不计算 的情况下直接使用这个内积。这就是核技巧。
对应的预测函数变为:
核技巧不是“把任意函数当作核函数”,而是要求核矩阵满足相应的正定条件。对任意有限样本集合,核矩阵:
应当是对称半正定的,即对任意向量 :
这保证了它可以被解释为某个特征空间中的内积。实际算法还要求核函数对称;不满足这些条件的相似度函数可能导致优化问题失去凸性或数值不稳定。
5.2 多项式核的完整例子
考虑二维输入 ,使用二次核:
展开可得:
它等价于特征映射:
因为:
假设四个点为 ,并让标签由 的符号决定。原始二维空间中,类别呈 XOR 形状,任何一条直线都不能完美分开它们。
但在映射空间中:
可以直接用第二个特征的符号分类。因此,二次核在原始空间中对应了一个非线性分类边界,却仍然使用了特征空间中的线性超平面。
5.3 常见核函数及其含义
线性核
等价于不做非线性映射。适合特征维度很高且数据稀疏的场景,例如文本分类。若样本量和特征维度很大,专门的线性 SVM 实现通常比通用核 SVM 更合适。
多项式核
常见形式为:
其中:
degree控制多项式次数;- 控制内积的缩放;
coef0控制常数项。
次数越高,模型可以表达更复杂的交互,但参数搜索和数值稳定性也更困难。
RBF 核
也常写成:
两种写法的关系是:
越大,样本相似度随距离增大而衰减得越快,每个支持向量的影响范围越局部; 越小,影响范围更广,决策边界通常更平滑。
这不是绝对的“越大越好”或“越小越好”:
- 很大、 很大,模型可能紧贴训练样本,训练准确率很高但泛化失败;
- 很小、 很小,模型可能过度平滑,连训练集结构都无法表达。
5.4 核方法的计算代价
核 SVM 通常需要处理 的核矩阵。样本数 增大时,内存和计算开销可能成为主要限制。核技巧避免了显式构造高维特征,但没有消除样本两两关系带来的成本。
因此,“高维空间”不等于“计算免费”。在大规模数据上,可以考虑:
- 线性 SVM;
- 核近似,如随机 Fourier 特征;
- 先用神经网络提取固定维度嵌入,再训练线性 SVM;
- 分批、近似或专门的大规模优化算法。
核近似会引入额外近似误差,不能直接假设其效果等同于精确核 SVM。
6. 多分类与回归
基本 SVM 是二分类器。多分类通常通过多个二分类器组合实现,常见策略包括:
- one-vs-rest:训练 个分类器,第 个区分第 类和其他类;
- one-vs-one:训练每一对类别之间的分类器,共 个。
具体组合方式属于实现层面的选择,不能把多分类 SVM 简化成一个天然的多类间隔公式。使用库时应检查分类器采用的策略及其决策分数解释方式。
回归版本称为支持向量回归(SVR)。它使用 -不敏感损失:
预测误差不超过 的样本不产生损失;超出管道的样本才成为主要约束来源。因此,SVR 中的支持向量是位于 管道外或边界上的样本。其 C、核函数和 gamma 仍控制复杂度,但还需要选择 。
7. 参数选择:先明确参数控制什么
7.1 特征缩放是参数选择的前提
SVM 对特征尺度敏感。假设一个特征取值范围是 到 ,另一个特征取值范围是 到 ,欧氏距离和内积会主要由第二个特征决定。
常见做法是标准化:
其中 必须只用训练折估计。不能先在全部数据上计算均值和标准差,再进行交叉验证,否则验证折的信息会泄漏到训练过程。
对稀疏矩阵,直接减去均值会破坏稀疏结构,通常应使用不中心化的缩放方式,或选用适合稀疏数据的线性模型。
7.2 C、gamma 和核参数
以 RBF SVM 为例:
C:违反间隔的惩罚强度;gamma:单个样本影响范围;kernel:选择线性、RBF、多项式等相似度;degree:多项式核的次数;coef0:多项式核和 sigmoid 核中的常数项。
C 和 gamma 往往具有交互作用。只调一个参数而固定另一个参数,可能得出误导性的结论。经验上可以在对数尺度搜索,例如:
具体范围应由数据尺度、样本量和验证结果决定,而不是把这些值当作规范。
在 scikit-learn 中,gamma="scale" 会根据特征数和训练数据方差设置一个数据相关的初始值;这可以作为起点,但不替代验证。数据经过标准化后,gamma 的含义也会随特征尺度改变。
7.3 一个可运行的端到端示例
下面使用 scikit-learn 的乳腺癌二分类数据集,建立“缩放—RBF SVM—交叉验证”的流程:
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import GridSearchCV, StratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
X, y = load_breast_cancer(return_X_y=True)
pipeline = Pipeline([
("scale", StandardScaler()),
("svc", SVC(kernel="rbf"))
])
param_grid = {
"svc__C": [0.1, 1, 10, 100],
"svc__gamma": ["scale", 0.001, 0.01, 0.1]
}
cv = StratifiedKFold(
n_splits=5,
shuffle=True,
random_state=42
)
search = GridSearchCV(
estimator=pipeline,
param_grid=param_grid,
scoring="roc_auc",
cv=cv,
n_jobs=-1,
refit=True
)
search.fit(X, y)
print("best parameters:", search.best_params_)
print("best CV AUC:", search.best_score_)
scores = search.best_estimator_.decision_function(X[:5])
print("decision scores:", scores)
每一步的作用是:
load_breast_cancer提供特征矩阵X和二分类标签y;Pipeline保证StandardScaler在每个交叉验证训练折中拟合,避免缩放统计量泄漏;SVC(kernel="rbf")使用 RBF 核;GridSearchCV枚举参数组合;StratifiedKFold尽量保持每个折中的类别比例;scoring="roc_auc"评估排序能力,而不是固定阈值下的准确率;refit=True会在交叉验证完成后,用全部训练数据重新拟合最佳流程;decision_function输出到分类边界的有符号分数,不是概率。
输出中的最佳参数和分数会因 scikit-learn 版本、数据划分和实现细节而略有变化,不能把某次运行的数值当成普适性能保证。
如果任务更关心召回率、精确率、F1、PR AUC 或业务成本,应相应修改评分指标。类别严重不平衡时,ROC AUC 可能掩盖少数类表现,PR AUC 或基于成本的指标通常更有诊断价值。
7.4 类别权重与决策阈值
标准 SVM 的分类规则通常以:
作为阈值。这个阈值并不一定对应业务上的最优决策点。
当误报和漏报成本不对称,或者类别比例明显不平衡时,可以:
- 使用
class_weight="balanced"或显式类别权重; - 用代价敏感评分选择模型;
- 在独立验证集上调整决策分数阈值;
- 评估混淆矩阵、召回率、精确率和成本,而不是只看准确率。
decision_function 的数值通常是排序分数,不应直接解释为概率。若业务需要概率,应使用校准方法,并在与模型训练隔离的数据上验证校准质量。SVC(probability=True) 会启用额外的概率拟合过程,训练成本和行为会与只使用决策分数不同;概率也不自动意味着校准良好。
8. 常见误解与失败表现
8.1 “支持向量越少,模型一定越好”
支持向量数量受数据噪声、C、核函数和数据尺度影响。支持向量很少可能意味着模型过于简单,也可能只是数据结构特殊;支持向量很多可能意味着边界复杂、数据重叠严重,不能单独作为泛化质量指标。
应结合独立测试集表现、校准、稳定性和推理成本判断。
8.2 “训练准确率高说明 SVM 参数正确”
RBF SVM 使用较大的 C 和 gamma 时,很容易取得接近 100% 的训练准确率。若验证集表现明显下降,通常说明模型正在拟合噪声或局部结构。诊断时应比较训练与验证指标,并观察不同折之间的方差。
8.3 “核函数可以解决所有非线性问题”
核函数只能在其诱导的特征空间中提供特定形式的相似性。若数据包含严重标签噪声、分布漂移或缺失关键信息,换核函数不能弥补数据问题。对于图像、语音和长文本等原始高维输入,直接使用 RBF SVM 往往不如先提取合适表示。
一种常见生产方案是:
- 用已训练的深度模型生成固定维度嵌入;
- 在训练集嵌入上拟合线性 SVM 或小规模核 SVM;
- 对嵌入生成过程和分类器分别评估;
- 确保同一实体、同一用户或同一时间窗口没有跨训练和验证泄漏。
这可以把 SVM 用作轻量分类头,但不表示 SVM 取代了深度模型或生成式模型。
8.4 “只要交叉验证就不会泄漏”
如果先对全部数据做特征选择、缺失值填补、标准化、降维,再进行交叉验证,验证折的信息已经进入预处理过程,结果会偏乐观。预处理、特征选择和模型必须组成同一个管道,在每个训练折内部独立拟合。
时间序列、同一用户多条记录和重复测量数据还需要按时间或实体分组划分。随机分层交叉验证在这些情况下可能让高度相关的样本同时出现在训练和验证中。
8.5 “SVM 一定比逻辑回归或神经网络好”
SVM 的优势是间隔正则化、在中小规模数据上的稳定性以及核函数带来的非线性能力。它的限制包括:
- 核矩阵和支持向量使大样本训练、存储和推理成本上升;
- 决策分数不天然是概率;
- 多分类需要组合多个二分类器;
- 参数和特征尺度敏感;
- 对大规模原始感知数据通常依赖外部特征表示。
稀疏文本分类可能更适合线性 SVM;大规模数据可能更适合线性模型或深度模型;需要可解释概率和增量训练时,也应把逻辑回归、树模型或其他方法纳入比较。
9. 生产系统中的验证与取舍
SVM 的离线训练流程至少应明确以下数据流:
- 原始数据按任务规则划分训练、验证和测试集;
- 只在训练折中拟合缩放器、特征选择器和嵌入后处理;
- 在交叉验证中选择
C、gamma、核函数和分类阈值; - 用未参与选择的测试集进行最终评估;
- 固化预处理器、支持向量、系数、偏置和标签映射;
- 在线推理时按相同顺序处理输入。
核 SVM 的在线预测形式为:
因此单条样本的预测成本与支持向量数量、特征维度和核函数计算成本有关。模型文件不仅包含参数,还包含支持向量;如果支持向量数量很大,推理延迟和内存占用可能成为上线约束。
上线前应验证:
- 输入特征顺序、缺失值处理和缩放参数是否一致;
- 类别编码方向是否改变;
- 训练时使用的核参数是否被完整保存;
- 测试集指标是否与离线报告一致;
- 预测分数分布是否发生漂移;
- 类别比例变化是否使原有阈值和成本假设失效。
当模型需要概率输出时,还要独立验证概率校准;当模型用于高风险决策时,应记录训练数据版本、参数搜索范围、评估切分规则和阈值选择依据。模型本身通常不提供权限控制、审计和数据治理能力,这些需要由外层生产系统负责。
10. 核心关系总结
最大间隔 SVM 的原始目标是:
并要求所有样本满足:
软间隔通过松弛变量允许约束违反,并以 惩罚违反程度:
对偶形式把模型写成训练样本内积的组合:
把普通内积替换成核函数:
就得到核 SVM:
其中,最大间隔控制几何复杂度,软间隔处理噪声和不可分数据,核技巧提供非线性表达能力,而 C、核类型及其参数决定模型在欠拟合和过拟合之间的位置。真正可靠的参数选择必须与特征缩放、数据切分、任务指标、推理成本和生产约束一起完成。
系列导航与关联阅读
- 系列入口:AI 工程完整学习路线:从机器学习与 Transformer 到 RAG、Agent 和生产治理
- 上一篇:集成学习:Bagging、Random Forest、Boosting、Stacking 与误差来源
- 下一篇:KNN 与近邻方法:距离、索引、维度灾难、分类和回归
官方资料
本文依据研究论文、标准组织与主流框架官方文档重新梳理;正文、示例与工程清单由 WR BLOG 编写。

评论
0 条讨论