2025-10-17
1 SVM背景
2 SVM核心思想
3 SVM使用场景
4 SVM对数据的要求
5 SVM参数调用
6 SVM在R中的实现
支持向量机 (Support Vector Machine, SVM)
在20世纪90年代由 Vladimir Vapnik 等人完善并推广,其理论基础是统计学习理论
旨在解决传统方法容易过拟合(即模型在训练数据上表现很好,但在新数据上表现差)的问题。
SVM 的目标是找到一个不仅能正确分类,而且泛化能力(对新数据的预测能力)最强的模型。
线性情况 (Linear SVM):用“一把直尺”划分地盘
面对多个可能的分界线,SVM认为最安全、最稳健的那条线,是离两边数据点都最远的那条。
线性情况:最大化间隔 (Maximizing the Margin)
什么是“最好”?
就是这把“直尺”摆放的位置,要让它离两边最近的豆子(红豆和绿豆)都有 尽可能宽的距离。最大化间隔 (Maximizing the Margin)
未来新来的豆子(新数据)就不容易“越线”(被分错)。
这把“直尺”在数学上被称为 “超平面 (Hyperplane)”。
这条由“直尺”和两边空白区域构成的“安全隔离带”或“街道”,被称为 “间隔 (Margin)”。
SVM的目标
在线性情况下,SVM的目标不仅仅是找到 任何一把 能分开豆子的“直尺”,而是要找到 最好 的那一把。
那些离“直尺”最近,刚好“顶在”街道边缘的豆子,被称为 “支持向量 (Support Vectors)”。它们是定义决策边界的关键点。
整个模型完全由这几个关键点决定,其他数据点即使移除,也不会影响分界线的位置。这使得 SVM 模型非常高效和鲁棒。
鲁棒性Robustness:统计方法对数据中的异常值或偏离假设的情况具有抵抗力和适应能力。
一个鲁棒的统计方法能够在面对噪声、异常值或数据分布偏离理想假设时,仍然提供可靠和稳定的结果。
现实中的数据常常无法用一条直线分开。
SVM 对此提供了一个非常巧妙的解决方案,称为核技巧。
桌面上混杂着两种豆子,你无法用一把尺子将它们分开(二维空间)。
但如果你猛地一抖桌布,让一部分豆子飞起来,这时你就可以轻松地用一个水平的纸板(一个平面)将空中的豆子和桌面上的豆子分开(三维空间)。
核技巧:通过数学变换,将数据从低维空间映射到高维空间,使得原本线性不可分的数据在高维空间中变得线性可分。而这个过程非常高效,我们甚至不需要知道数据在高维空间中的具体坐标。
:::
选用不同的“核函数”,SVM 能够创造出各种复杂的曲线边界,从而解决高度非线性的分类问题。
常用的核函数
径向基函数核 (RBF Kernel):最常用、最强大的核函数,能处理各种复杂情况。
多项式核 (Polynomial Kernel)
Sigmoid 核
何时应该优先考虑 SVM?
高维数据:当特征维度非常高时(例如文本分类、基因数据),SVM 表现尤其出色。
小到中等规模数据集:在样本量不是极端巨大的情况下,SVM 能在合理时间内找到高质量的解。
问题复杂度高:当数据的决策边界是非线性时,通过RBF核函数,SVM能很好地拟合。
超大规模数据集:当样本量达到数十万甚至更多时,SVM 的训练过程会非常缓慢,计算成本很高。
数据噪声较大:SVM 对噪声(错误标记的样本)比较敏感,因为这些噪声点可能成为影响边界的支持向量。
需要概率解释:SVM 的原始输出是类别归属,而不是一个“属于该类别的概率值”。
数据必须是数值型 (Numerical Data)
强烈建议进行特征缩放 (Feature Scaling)
标准化 (Standardization)**:将数据转换为均值为0,标准差为1的正态分布(Z-score)。
归一化 (Normalization)**:将数据缩放到 [0, 1] 或 [-1, 1] 的区间。
kernel(核函数):决定SVM如何将数据映射到高维空间。常用选项(R中写法):
“linear”:线性核,适合线性可分或特征很多的数据。
“radial”:径向基核(RBF),适合大多数情况,能处理非线性关系。
“polynomial”:多项式核,适合有多项式边界的数据。
“sigmoid”:S型核,较少用。
核函数选取建议
优先尝试”radial”(RBF)核,适应性强,大多数数据都适用。
特征非常多时可先试”linear”核。
cost:惩罚参数C,控制训练误差和模型复杂度的权衡,其取值理论上可以是任意正数。
cost: 一般从1开始,常用[0.1, 1, 10, 100]等。
C大:对误分类容忍度低,间隔小,易过拟合。
C小:对误分类容忍度高,间隔大,易欠拟合。
过拟合:模型在训练集上表现很好(高准确率/低误差),但在测试集或交叉验证集上表现变差(准确率下降/误差增大)。
欠拟合:模型在训练集和测试集上都表现不好(准确率都低/误差都高),说明模型太简单,不能捕捉数据规律。
判断步骤:
将数据集分为训练集和测试集(如7:3或8:2分)。
分别计算训练集和测试集的预测准确率(或误差)。
对比二者差异:
如果训练准确率远高于测试准确率 → 过拟合
如果两者都低 → 欠拟合
gamma:RBF和多项式核的参数,控制单个样本的影响范围。
gamma大:影响范围小,模型复杂,易过拟合。
gamma小:影响范围大,模型简单,易欠拟合。
gamma: RBF核时,默认 1/特征数;可以尝试[0.001, 0.01, 0.1, 1]等。
网格搜索(Grid Search)+ 交叉验证(Cross Validation)
自动搜索最优参数
caret::train()
e1071::tune()
数据标准化:SVM对特征尺度敏感,建议先做标准化。
gamma与cost的平衡:一般先fix一个参数,调另一个,再联合微调。
经验区间:实际中cost/gamma变化1-2个数量级后模型表现变化会很明显,通常不用范围太宽。
可视化决策边界:低维数据可画分类边界观察调参效果。
初学者推荐
kernel=“radial”
cost=1
gamma=1/特征数
遇到过拟合/欠拟合时,分别降低/增大cost和gamma。
https://lizongzhang.github.io/mvs25
© 2025 Li Zongzhang