支持向量机
一、直观理解:在两类之间铺最宽的安全隔离带
支持向量机(Support Vector Machine, SVM)寻找一条(高维中是一个超平面)分界,使两类样本分得开的同时,隔离带宽尽可能大。宽度越大,边界附近的扰动越不容易导致错分。
真正决定边界位置的,往往只是贴在隔离带边缘的少数点——支持向量。删掉远离边界的点,分界面通常不变;动一下支持向量,边界就会挪。
当数据在原始空间线性不可分时,核技巧把样本隐式映射到更高维特征空间,在那里做线性分隔,等价于在原空间得到弯曲边界。最常用的是径向基(RBF)核。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 二分类边界清晰;中小样本、中高维;文本/基因等维数高;需要大间隔稳健边界;可用核刻画中等非线性。 |
| 核心优点 | 大间隔理论动机清晰;核方法灵活;对维数相对友好;凸优化,有全局最优(软间隔目标下);支持向量稀疏存储。 |
| 局限与缺点 | 原生二分类,多类需 ECOC/一对一;概率输出需额外校准;核与 敏感;训练规模大时变慢;可解释性不如线性模型。 |
使用前:标准化特征;明确是否线性可分;用网格+交叉验证选超参数;多类时选好编码策略。
三、核心原理
1. 硬间隔线性 SVM
标签 ,超平面 。要求
间隔为 ,故最小化 。
2. 软间隔
引入松弛 :
越大,越不能容忍错分(更贴训练数据); 越小,间隔更宽、更正则。
3. 对偶与核
对偶中出现内积 。用核 替换,得到非线性 SVM。RBF 核:
大 → 影响范围窄、边界更曲折; 小 → 更平滑。
决策函数:
四、关键决策
| 决策点 | 建议 |
|---|---|
| 核 | 先试 linear,不够再 rbf;多项式核较少作为首选 |
| 对数网格,如 | |
RBF 必需;可与 KernelScale 联动搜索 | |
| 标准化 | 强烈建议 |
| 类别不平衡 | 使用不同类的 BoxConstraint 或代价矩阵 |
| 多分类 | fitcecoc + SVM 学习器 |
| 概率 | 需要概率时用 fitSVMPosterior 或平台提供的 posterior |
五、MATLAB 示例
% 线性可分倾向的数据
X = [
1 2; 2 1; 2 3; 3 2; % 类 1
6 7; 7 6; 7 8; 8 7 % 类 2
];
y = [1;1;1;1; 2;2;2;2];
Xz = zscore(X);
% 线性 SVM
svmLin = fitcsvm(Xz, y, ...
"KernelFunction", "linear", ...
"BoxConstraint", 1, ...
"Standardize", false, ...
"ClassNames", [1 2]);
svIdx = svmLin.IsSupportVector;
fprintf("支持向量个数:%d\n", sum(svIdx));
[label, score] = predict(svmLin, Xz);
disp("线性 SVM 混淆矩阵:");
disp(confusionmat(y, label));
% RBF SVM + 超参数搜索(小例子演示)
svmRbf = fitcsvm(Xz, y, ...
"KernelFunction", "rbf", ...
"KernelScale", "auto", ...
"BoxConstraint", 1);
% 手动网格(更可控)
Cs = [0.1 1 10];
ks = [0.5 1 2]; % KernelScale
bestLoss = inf; bestC = NaN; bestKs = NaN;
for C = Cs
for ksVal = ks
m = fitcsvm(Xz, y, "KernelFunction", "rbf", ...
"BoxConstraint", C, "KernelScale", ksVal);
loss = kfoldLoss(crossval(m, "KFold", 4));
if loss < bestLoss
bestLoss = loss; bestC = C; bestKs = ksVal;
end
end
end
fprintf("最优 C=%.3g, KernelScale=%.3g, CV loss=%.3f\n", ...
bestC, bestKs, bestLoss);
svmBest = fitcsvm(Xz, y, "KernelFunction", "rbf", ...
"BoxConstraint", bestC, "KernelScale", bestKs);
% 多分类示例框架
% Mdl = fitcecoc(Xz, yMulti, "Learners", templateSVM("KernelFunction","rbf"));
六、如何解释结果
- 支持向量:标出哪些样本支撑边界,检查是否为噪声点;
- 线性 SVM 的 :系数大小反映特征对决策函数的贡献(标准化后更可比);
- 与间隔:大 训练错分少但可能过拟合;
- 核尺度:RBF 边界是否对个别点形成“孤岛”;
- 报告:、核、/KernelScale、支持向量比例、CV 指标、与 Logistic/树模型对比。
非线性核没有简单的“每个原始特征一个系数”,解释可配合部分依赖或 SHAP。
七、常见误区
1. 不标准化就用 RBF/线性 SVM
尺度主导内积与距离,参数网格会失效。
2. 只调 不调
RBF 的两个旋钮必须联合看,否则网格不完整。
3. 把决策函数值直接当概率
score 与概率单调相关但未必校准。
4. 样本极大时默认二次规划硬上
大数据应考虑线性 SVM(fitclinear)、近似核或降采样。
5. 多类问题忽略类别编码与混淆模式
一对一投票可能掩盖某两类之间的系统错误。
八、小结
SVM 通过最大化间隔(软间隔下权衡错分惩罚)学习决策边界,核技巧在不显式升维的情况下实现非线性分类。
它是中小样本、边界清晰问题上的经典强模型。实践上:先标准化,先线性核,再 RBF;用交叉验证锁 与核参数;用支持向量与基线对比写清论文故事。