支持向量机(SVM)是经典的监督学习算法,在小样本、非线性及高维模式识别中表现出色,广泛应用于分类和回归任务。
概述
支持向量机(Support Vector Machine, SVM)由 Vapnik 等人于 1992 年正式提出。
发展历程
| 时间 | 里程碑 |
|---|---|
| 1963 年 | Vapnik 提出最大间隔分类器 |
| 1992 年 | 引入核技巧(Kernel Trick) |
| 1995 年 | Cortes 和 Vapnik 发表经典论文 |
| 2000 年后 | 成为机器学习主流算法之一 |
数学原理
线性可分情况
寻找最优分离超平面:
优化目标:最大化间隔
软间隔与松弛变量
对于线性不可分数据,引入松弛变量 :
其中 是惩罚参数,控制分类错误的容忍度。
核技巧
通过核函数 将数据映射到高维空间:
常用核函数:
| 核函数 | 公式 |
|---|---|
| 线性核 | |
| 多项式核 | |
| RBF 核 |
适用场景
| 场景 | 适用性 | 备注 |
|---|---|---|
| 小样本数据 | ★★★★★ | SVM 的优势领域 |
| 高维数据 | ★★★★☆ | 文本分类、基因分析 |
| 非线性问题 | ★★★★☆ | 需配合核函数 |
| 大规模数据 | ★★☆☆☆ | 训练复杂度 O(n²)~O(n³) |
实践指南
数据预处理
- 标准化:SVM 对特征尺度敏感
- 特征选择:高维数据可考虑 PCA 降维
参数调优
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
param_grid = {
'C': [0.1, 1, 10],
'gamma': [0.01, 0.1, 1],
'kernel': ['rbf', 'linear']
}
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
grid_search.fit(X_train, y_train)代码示例
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
iris = datasets.load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = SVC(kernel='rbf', C=1.0, gamma='scale')
clf.fit(X_train, y_train)
print("Accuracy:", clf.score(X_test, y_test))常见问题
Q:如何选择核函数?
A:线性核适合高维数据,RBF 核适合低维非线性数据。
Q:SVM 对缺失值敏感吗?
A:非常敏感,需要提前处理缺失值。
参考文献
- Cortes, C., & Vapnik, V. (1995). Support-vector networks. Machine Learning.
- scikit-learn SVM 文档