什么是支持向量?为什么说 SVM 只由支持向量决定?
简化版
支持向量(Support Vector) 是训练样本里离决策超平面最近、恰好落在(或越过)间隔边界上的那些样本。SVM 的超平面完全由这少数支持向量决定——因为在最优解里,只有支持向量对应的拉格朗日乘子 α>0,其余样本 α=0、对 w 没有贡献。直观理解:支持向量像「撑起间隔的柱子」,删掉或移动非支持向量(只要不越过间隔边界),超平面纹丝不动;而移动任何一个支持向量,超平面就会改变。这带来 SVM 的稀疏性和对远处离群点的鲁棒性。
详细版
支持向量的三种位置(软间隔下):
| 类型 | 位置 | 松弛 ξ | 乘子 α |
|---|---|---|---|
| 间隔边界上 | 恰在 yᵢ(wᵀxᵢ+b)=1 | ξ=0 | 0<α<C |
| 间隔内(越界但分对) | 在边界和超平面之间 | 0<ξ≤1 | α=C |
| 分错 | 越过超平面 | ξ>1 | α=C |
| 非支持向量 | 间隔外、分对 | ξ=0 | α=0 |
为什么只由支持向量决定:
- 对偶解出
w = Σ αᵢ yᵢ xᵢ,只有 α>0 的样本进入求和。 - α>0 的样本就是支持向量;非支持向量 α=0,对
w无贡献。 - 所以删掉非支持向量,
w、b都不变。
意义: 模型稀疏(只存支持向量)、预测只需和支持向量算内积、对非支持向量的离群点不敏感。
完整版教学
一、支持向量到底是哪些样本
回顾 SVM 的目标:找一个超平面,让它到两类最近样本的间隔最大。求解完成后,样本可以按「离超平面多远」分成两拨:
- 一拨在间隔之外、且分类正确:它们离边界很远,是「安全」的样本。
- 一小拨恰好压在间隔边界上、或者进入了间隔带、甚至被分错:它们离边界最近、最「危险」。
后一拨就是支持向量。硬间隔下,支持向量就是恰好落在 yᵢ(wᵀxᵢ+b)=1 边界上的点;软间隔下,还包括进入间隔带和被分错的点。它们的共同特征是:离决策边界最近、直接顶着间隔。
二、从拉格朗日对偶看「只由支持向量决定」
SVM 求解会转成对偶问题,给每个样本一个拉格朗日乘子 αᵢ ≥ 0。最优解有一个漂亮结论——权重向量可以写成样本的加权和:
w = Σᵢ αᵢ yᵢ xᵢ
关键在于 KKT 互补松弛条件决定了大部分 αᵢ = 0:
- 间隔外、分类正确的样本:约束「不紧」(
yᵢ(wᵀxᵢ+b) > 1),对应 αᵢ = 0。 - 恰在间隔边界上/间隔内/分错的样本:约束「紧」,对应 αᵢ > 0。
于是 w = Σ αᵢ yᵢ xᵢ 这个求和里,只有 αᵢ>0 的样本(即支持向量)真正贡献,αᵢ=0 的样本(非支持向量)项直接是 0、对 w 毫无影响。这就是「SVM 只由支持向量决定」的数学根据。
三、直观验证:删掉/移动样本会怎样
用「撑柱子」的比喻最好理解:
- 删掉一个非支持向量(间隔外分对的点):它本来 α=0、不贡献 w,删了超平面完全不变。你可以删掉大量这样的样本,SVM 结果一模一样。
- 移动一个非支持向量(只要不越过间隔边界进入危险区):同样不影响超平面。
- 移动/删掉一个支持向量:它 α>0、直接决定 w,超平面会随之改变——柱子动了,撑起的面就变了。
所以 SVM 的决策面就像被少数几根「柱子」(支持向量)顶在正中间,其余样本只是旁观者。
四、这个性质带来什么好处
- 核预测成本由支持向量数决定:训练后核展开只需保存支持向量及系数,
f(x)=Σ αᵢ yᵢ K(xᵢ,x)+b;支持向量越少,预测越快。但困难数据上支持向量可能占很高比例,不能预设它一定远少于全部样本。 - 对「远处离群点」鲁棒:一个远离边界、分类正确的离群点是非支持向量,α=0,对模型没影响——SVM 不会为迁就它而改变边界。(但注意:靠近边界或分错的离群点会成为支持向量、影响很大,所以 SVM 并非对所有离群点都免疫。)
- 理论意义:模型复杂度和支持向量数量相关,支持向量少往往意味着模型更简洁、泛化更好;支持向量占比还能作为泛化误差的一个估计。
五、软间隔下支持向量的细分
引入软间隔(参数 C、松弛 ξ)后,支持向量分三类(见详细版表):
- α=C 的点:进入间隔带甚至被分错的「问题样本」。
- 0<α<C 的点:恰好压在间隔边界上的「标准支持向量」,常用来反解偏置 b。
- α=0:非支持向量。
C 越小,间隔越宽、允许越界的样本越多、支持向量越多;C 越大,越不容忍越界、间隔越窄。理解这点有助于理解 C 对模型的影响。
六、常见追问
- 支持向量越多越好还是越少好? 一般越少越好(模型更简洁、泛化更强、预测更快);支持向量特别多可能意味着数据难分或 C/γ 设置不当、有过拟合风险。
- 为什么核 SVM 预测要保留支持向量? 因为预测式
f(x)=ΣαᵢyᵢK(xᵢ,x)+b显式依赖支持向量,无法像线性 SVM 那样只存一个 w。 - 偏置 b 怎么算? 用
0<α<C(恰在间隔边界上)的支持向量满足yᵢ(wᵀxᵢ+b)=1反解,通常对多个取平均。 - SVM 对离群点鲁棒吗? 对远处、分类正确的离群点鲁棒(非支持向量);对靠近边界/分错的离群点敏感(会变成支持向量)。
七、用算例与工程边界复核
对偶决策函数是 f(x)=Σ_i α_i y_i K(x_i,x)+b。若 1000 个训练样本中只有 80 个 α_i>0,预测只需这 80 个支持向量的核计算;α_i=0 的样本不直接出现在决策展开式中。
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| α=0 | 间隔外非支持向量 | 不直接影响当前决策函数 |
| 0<α<C | 通常恰在间隔边界 | 满足 y f(x)=1 |
| α=C | 在间隔内或误分,也可能边界退化 | 受软间隔上界约束 |
把推导和选择压缩成执行路径:
solve dual α
-> keep α_i > tolerance
-> compute b from suitable margin SVs
-> predict with kernel expansion
“删掉非支持向量模型完全不变”只对已求得的当前最优解表达式成立;删后重新训练可能改变约束集合与最优解。
八、常见误区与追问
- 误区:支持向量一定是被误分类的点。 硬间隔支持向量正确分类且位于间隔边界;软间隔还包含间隔内和误分类点。
- 误区:支持向量越多模型一定越好。 数量影响推理成本,也反映间隔与噪声,不能单独作为效果指标。
- 追问:为什么 α=0 的样本不参与预测? 对偶展开中对应项系数为 0,核贡献消失。
- 追问:所有 α=C 的点都误分类吗? 不一定,它也可能正确分类但位于间隔内。
- 追问:数值上如何判断支持向量? 求解器使用容差判断 α 是否显著大于 0,不能依赖浮点精确等于零。
九、加强记忆
记忆时从 KKT 看支持向量:对偶解为 w=Σαᵢyᵢxᵢ,αᵢ=0 的当前间隔外正确样本不进入展开,αᵢ>0 的样本才是支持向量。软间隔中,0<α<C 通常位于间隔边界,α=C 表示约束达到上界,样本可能在间隔内或被错分;具体还要结合退化情形。减小 C 往往容忍更多违约并可能增加支持向量,但不是对所有数据严格单调。支持向量数量直接影响核预测成本,却不能单独推出泛化好坏;远处正确点在当前解下无影响,错标离群点仍可能成为关键支持向量。