支持向量机(SVM)是经典的监督学习算法,在小样本、非线性及高维模式识别中表现出色,广泛应用于分类和回归任务。
概述
支持向量机(Support Vector Machine, SVM)由 Vapnik 等人于 1992 年正式提出。
发展历程
| 时间 | 里程碑 |
|---|---|
| 1963 年 | Vapnik 提出最大间隔分类器 |
| 1992 年 | 引入核技巧(Kernel Trick) |
| 1995 年 | Cortes 和 Vapnik 发表经典论文 |
| 2000 年后 | 成为机器学习主流算法之一 |
数学原理
线性可分情况
寻找最优分离超平面:
$$w^Tx + b = 0$$
优化目标:最大化间隔
$$\max \frac{2}{|w|} \quad \text{s.t.} \quad y_i(w^Tx_i + b) \geq 1$$
软间隔与松弛变量
对于线性不可分数据,引入松弛变量 $\xi_i$:
$$\min \frac{1}{2}|w|^2 + C\sum_{i=1}^n \xi_i$$
其中 $C$ 是惩罚参数,控制分类错误的容忍度。
核技巧
通过核函数 $\phi(x)$ 将数据映射到高维空间:
$$K(x_i, x_j) = \phi(x_i)^T\phi(x_j)$$
常用核函数:
| 核函数 | 公式 |
|---|---|
| 线性核 | $K(x_i, x_j) = x_i^Tx_j$ |
| 多项式核 | $K(x_i, x_j) = (x_i^Tx_j + c)^d$ |
| RBF 核 | $K(x_i, x_j) = \exp(-\gamma|x_i - x_j|^2)$ |
适用场景
| 场景 | 适用性 | 备注 |
|---|---|---|
| 小样本数据 | ★★★★★ | SVM 的优势领域 |
| 高维数据 | ★★★★☆ | 文本分类、基因分析 |
| 非线性问题 | ★★★★☆ | 需配合核函数 |
| 大规模数据 | ★★☆☆☆ | 训练复杂度 O(n²)~O(n³) |
实践指南
数据预处理
- 标准化:SVM 对特征尺度敏感
- 特征选择:高维数据可考虑 PCA 降维
参数调优
| |
代码示例
| |
常见问题
Q:如何选择核函数?
A:线性核适合高维数据,RBF 核适合低维非线性数据。
Q:SVM 对缺失值敏感吗?
A:非常敏感,需要提前处理缺失值。
参考文献
- Cortes, C., & Vapnik, V. (1995). Support-vector networks. Machine Learning.
- scikit-learn SVM 文档
张芷铭的个人博客
Comments