参数设置
数据集由固定seed=42的线性同余生成器生成(确定性)。类别 +1 中心(2,2)、-1 中心(-2,-2),各20个点·σ=1.0。
2D分类与最大边际分离面
蓝圆=类别+1 / 红×=类别-1 / 绿实线=分离直线 w·x+b=0 / 绿虚线=边际边界 w·x+b=±1 / 黑圆=支持向量
理论与主要公式
软边际线性SVM通过最小化合页损失和L2正则化之和,学习最大边际分离超平面。
决策函数,w为权重向量,b为偏置:
$$f(\mathbf{x}) = \mathbf{w}\cdot\mathbf{x} + b$$
目标函数。第1项实现边际最大化,第2项为合页损失。C为正则化参数:
$$J(\mathbf{w},b) = \tfrac{1}{2}\|\mathbf{w}\|^2 + C\sum_{i=1}^{N}\max\bigl(0,\,1 - y_i\,f(\mathbf{x}_i)\bigr)$$
次梯度(仅边际违反点 $1-y_i f(\mathbf{x}_i)\gt 0$ 有贡献):
$$\frac{\partial J}{\partial \mathbf{w}} = \mathbf{w} - C\sum_{i\in\mathcal{V}} y_i\,\mathbf{x}_i,\quad \frac{\partial J}{\partial b} = -C\sum_{i\in\mathcal{V}} y_i$$
边际宽度为 $2/\|\mathbf{w}\|$。支持向量是 $|y_i f(\mathbf{x}_i) - 1|$ 较小的点(在边际边界上或内部)。
什么是线性SVM模拟器
🎓
简单来说,SVM是用一条直线(多维情况下是超平面)分离两类数据,并且尽量留出"余裕空间"的算法。在上面的模拟器中,它学习的是分割蓝圆和红×的绿色直线。重点不仅是分割,而是让两侧最近的点到直线的距离(这就是边际)最大化。这就是"最大边际分类器"名字的来源。
🎓
那就是边际边界,对应 $w\cdot x + b = \pm 1$ 的线。这条带状区域的宽度 $2/\|w\|$ 就是边际宽度。SVM的目标是在正确分类训练数据的同时,让这条带子尽可能宽。试试把"正则化参数C"从1改成100,你会看到C越大,对误分类的惩罚越重,边际带变窄,模型对每个点的拟合就越严格。
🙋
卡片上显示"支持向量"的数字,那些被黑圆包围的点就是支持向量吗?
🎓
完全正确。支持向量是那些在边际边界上或边界内的点。SVM有一个很有趣的特性:最终的决定边界只由支持向量决定。那些距离边界很远、分类很容易的点,即使增加再多也不会改变边界。所以支持向量被称为"决定的支柱"。
🙋
我调整"数据噪声添加"滑块时,蓝和红开始混在一起,边际宽度反而变大了。这似乎违反直觉。
🎓
观察得很好。当数据重叠增大时,已经有许多点会进入边际区域。软边际SVM通过合页损失来"容许"这种违反,同时用C来决定惩罚的重度。C小的时候"宽边际,容许一些错误";C大的时候"严厉惩罚错误,即使要牺牲边际宽度"。在实际工作中,我们通常用交叉验证来选择最优的C值。
常见问题
次梯度下降法每一步前进的距离会变大。太小的学习率会导致收敛缓慢,太大会让w和b振荡甚至发散。本工具中约0.01是稳定值。如果升到0.5,特别是在C很大的时候,目标函数会剧烈振荡,训练精度可能暂时下降。这也是体验算法稳定性的好机会。
主要有三个原因:1)噪声太大,数据线性不可分;2)C太小,对误分类的惩罚轻,模型"容许"一些错误;3)迭代次数不足,还没收敛。如果设置噪声0、C=1、η=0.01、迭代500,本工具的初始数据应该能达到100%。
有三种策略。第一种是增加特征维度,使数据在新空间中线性可分(如添加多项式特征x1²、x1·x2等)。第二种是用核SVM(RBF、多项式、sigmoid等核)。第三种是接受软边际,容许一定误分类以换取鲁棒性。实际应用中通常是二三结合。
两者都是线性分类器,但损失函数不同。SVM用合页损失,对于分类正确且在边际外的点,损失为零。逻辑回归用交叉熵损失,对所有点都有梯度。结果是SVM给出"稀疏解"(只有支持向量重要),逻辑回归给出概率输出。如果需要概率,选逻辑回归;如果强调边际,选SVM。
现实应用
文本分类与垃圾邮件过滤:SVM在2000年代是标准的文本分类器。把文档表示为单词出现频率向量(TF-IDF),用线性SVM做垃圾判定或主题分类。SVM在高维、稀疏向量上的强大表现特别适合数万维的词汇空间。即使在深度学习时代,简单文本分类的基准线仍经常用SVM。
图像分类与生物信息:用HOG特征+线性SVM做人体检测(Dalal & Triggs, 2005)曾是深度学习前的标准做法。在生物信息学中,核SVM被用于基因表达数据和蛋白质结构分类。SVM在"样本少、特征多"(小n、大p)的问题上特别有效。
异常检测(One-Class SVM):从仅包含正常数据的数据中学习"正常区域"边界,超出边界的视为异常。这在生产线缺陷检测、传感器异常、网络入侵检测中应用广泛。SVM无需带标签的异常样本,在极度不平衡的情况下很强大。
机器学习教育与理论基础:SVM融合了边际最大化、对偶化、核方法、凸优化、结构风险最小化等现代机器学习的核心概念。虽然深度学习成为主流,SVM作为系统学习机器学习理论的"教材模型",在高等教育和企业培训中仍是必修课。
常见误解与注意
最常见的误解是认为"C越大性能越好"。C是合页损失的权重,C大会强化模型对训练数据的拟合,但也增加过拟合风险。反过来C小会扩大边际,提升泛化能力,但训练精度会下降。用模拟器从C=0.01滑到100,你能看到边际宽度的连续变化。实际工作中必须用交叉验证对C进行网格搜索,最优C因数据而异。
另一个常见误解是认为"次梯度法是SVM的标准求解器"。本工具为了教学简洁性才用了次梯度法,但实际工程中SVM通常用SMO(顺序最小优化)算法求解对偶问题(LIBSVM、scikit-learn、Vowpal Wabbit等都这样)。次梯度法在大规模在线学习(Pegasos)中会用到,但在收敛速度和数值稳定性上都不如对偶法。本工具的作用是帮助直观理解"合页损失与边际最大化的关系"。
最后,不要忘记特征缩放。线性SVM对特征尺度极其敏感。如果x1在0~1,x2在0~10000,直接输入的话w2会极小,x1的贡献被忽视。本工具用的2维同尺度数据看不出问题,但实际数据必须先标准化(StandardScaler)或归一化。忽视这一点会让C的调参变得毫无意义。