机器学习入门核心算法:支持向量机(SVM)
- 一、算法逻辑
- 1.1 基本概念
- 1.2 核心思想
- 线性可分情况
- 二、算法原理与数学推导
- 2.1 原始优化问题
- 2.2 拉格朗日对偶
- 2.3 对偶问题
- 2.4 核函数技巧
- 2.5 软间隔与松弛变量
- 三、模型评估
- 3.1 评估指标
- 3.2 交叉验证调参
- 四、应用案例
- 4.1 手写数字识别
- 4.2 金融欺诈检测
- 五、经典面试题
- 问题1:SVM为什么采用间隔最大化?
- 问题2:核函数的作用是什么?
- 问题3:SVM如何处理多分类问题?
- 六、高级优化技术
- 6.1 增量学习
- 6.2 多核学习
- 七、最佳实践指南
- 7.1 参数调优建议
- 7.2 特征预处理要点
- 总结与展望
一、算法逻辑
1.1 基本概念
支持向量机(Support Vector Machine, SVM)是一种监督学习算法,核心目标是寻找一个最优超平面,最大化不同类别数据间的分类间隔(Margin)。其核心特性包括:
- 间隔最大化:通过几何间隔最大化提高泛化能力
- 核技巧:隐式映射到高维空间处理非线性问题
- 稀疏性:仅依赖支持向量决定模型
适用场景:
- 小样本、高维数据
- 非线性可分问题
- 对模型解释性要求不高的场景
1.2 核心思想
线性可分情况
设训练集
D
=
{
(
x
i
,
y
i
)
}
i
=
1
m
,
y
i
∈
{
−
1
,
+
1
}
D = \{(\boldsymbol{x}_i, y_i)\}_{i=1}^m, \quad y_i \in \{-1, +1\}
D={(xi,yi)}i=1m,yi∈{−1,+1}
目标超平面方程:
w
T
x
+
b
=
0
\boldsymbol{w}^T\boldsymbol{x} + b = 0
wTx+b=0
分类决策函数:
f
(
x
)
=
sign
(
w
T
x
+
b
)
f(\boldsymbol{x}) = \text{sign}(\boldsymbol{w}^T\boldsymbol{x} + b)
f(x)=sign(wTx+b)
几何间隔定义:
γ
=
y
i
(
w
T
x
i
+
b
)
∥
w
∥
\gamma = \frac{y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b)}{\|\boldsymbol{w}\|}
γ=∥w∥yi(wTxi+b)
二、算法原理与数学推导
2.1 原始优化问题
最大化间隔等价于最小化权值范数:
min
w
,
b
1
2
∥
w
∥
2
s.t.
y
i
(
w
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
m
\begin{aligned} \min_{\boldsymbol{w},b} & \quad \frac{1}{2}\|\boldsymbol{w}\|^2 \\ \text{s.t.} & \quad y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \geq 1, \quad i=1,2,...,m \end{aligned}
w,bmins.t.21∥w∥2yi(wTxi+b)≥1,i=1,2,...,m
2.2 拉格朗日对偶
引入拉格朗日乘子
α
i
≥
0
\alpha_i \geq 0
αi≥0
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
−
∑
i
=
1
m
α
i
[
y
i
(
w
T
x
i
+
b
)
−
1
]
L(\boldsymbol{w},b,\boldsymbol{\alpha}) = \frac{1}{2}\|\boldsymbol{w}\|^2 - \sum_{i=1}^m \alpha_i[y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) - 1]
L(w,b,α)=21∥w∥2−i=1∑mαi[yi(wTxi+b)−1]
KKT条件:
{
α
i
≥
0
y
i
(
w
T
x
i
+
b
)
−
1
≥
0
α
i
[
y
i
(
w
T
x
i
+
b
)
−
1
]
=
0
\begin{cases} \alpha_i \geq 0 \\ y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) - 1 \geq 0 \\ \alpha_i[y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) - 1] = 0 \end{cases}
⎩
⎨
⎧αi≥0yi(wTxi+b)−1≥0αi[yi(wTxi+b)−1]=0
2.3 对偶问题
转化为对偶形式:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
s.t.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
≥
0
\begin{aligned} \max_{\boldsymbol{\alpha}} & \quad \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_j y_i y_j \boldsymbol{x}_i^T\boldsymbol{x}_j \\ \text{s.t.} & \quad \sum_{i=1}^m \alpha_i y_i = 0, \quad \alpha_i \geq 0 \end{aligned}
αmaxs.t.i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxji=1∑mαiyi=0,αi≥0
支持向量:对应 α i > 0 \alpha_i > 0 αi>0的样本点
2.4 核函数技巧
非线性映射:
设
ϕ
(
x
)
\phi(\boldsymbol{x})
ϕ(x)为映射函数,核函数定义为:
κ
(
x
i
,
x
j
)
=
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\kappa(\boldsymbol{x}_i, \boldsymbol{x}_j) = \phi(\boldsymbol{x}_i)^T\phi(\boldsymbol{x}_j)
κ(xi,xj)=ϕ(xi)Tϕ(xj)
常用核函数:
核函数类型 | 表达式 | 特点 |
---|---|---|
线性核 | x i T x j \boldsymbol{x}_i^T\boldsymbol{x}_j xiTxj | 无映射,处理线性可分 |
多项式核 | ( γ x i T x j + r ) d (\gamma\boldsymbol{x}_i^T\boldsymbol{x}_j + r)^d (γxiTxj+r)d | 可调阶数d |
RBF核(高斯核) | exp ( − γ ∣ x i − x j ∣ 2 ) \exp(-\gamma|\boldsymbol{x}_i - \boldsymbol{x}_j|^2) exp(−γ∣xi−xj∣2) | 应用最广泛 |
2.5 软间隔与松弛变量
引入松弛变量处理噪声数据:
min
w
,
b
,
ξ
1
2
∥
w
∥
2
+
C
∑
i
=
1
m
ξ
i
s.t.
y
i
(
w
T
x
i
+
b
)
≥
1
−
ξ
i
,
ξ
i
≥
0
\begin{aligned} \min_{\boldsymbol{w},b,\xi} & \quad \frac{1}{2}\|\boldsymbol{w}\|^2 + C\sum_{i=1}^m \xi_i \\ \text{s.t.} & \quad y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0 \end{aligned}
w,b,ξmins.t.21∥w∥2+Ci=1∑mξiyi(wTxi+b)≥1−ξi,ξi≥0
惩罚系数C的作用:
- C→∞:严格硬间隔
- C→0:允许更大分类错误
三、模型评估
3.1 评估指标
指标 | 计算公式 | 适用场景 |
---|---|---|
准确率 | T P + T N T P + T N + F P + F N \frac{TP+TN}{TP+TN+FP+FN} TP+TN+FP+FNTP+TN | 类别平衡时 |
ROC AUC | 曲线下面积 | 综合性能评估 |
铰链损失 | max ( 0 , 1 − y i ( w T x i + b ) ) \max(0, 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b)) max(0,1−yi(wTxi+b)) | 直接反映SVM优化目标 |
3.2 交叉验证调参
网格搜索示例:
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
params = {
'C': [0.1, 1, 10],
'gamma': ['scale', 'auto'],
'kernel': ['rbf', 'poly']
}
grid = GridSearchCV(SVC(), params, cv=5)
grid.fit(X_train, y_train)
四、应用案例
4.1 手写数字识别
数据集:MNIST(60,000张28x28灰度图)
特征处理:
- 标准化像素值到[0,1]
- PCA降维保留95%方差
模型配置:
svm = SVC(kernel='rbf', C=10, gamma=0.001)
svm.fit(X_train_pca, y_train)
性能结果:
- 测试集准确率:98.2%
- 推理速度:120样本/秒
4.2 金融欺诈检测
业务场景:信用卡交易异常检测
特征工程:
- 交易金额标准化
- 时间窗口统计特征
- 用户行为序列建模
模型优化:
- 类别不平衡处理:class_weight=‘balanced’
- 使用RBF核捕捉非线性模式
产出效果:
- 欺诈交易召回率:89%
- 误报率:0.3%
五、经典面试题
问题1:SVM为什么采用间隔最大化?
关键点解析:
- 结构风险最小化:最大化间隔等价于最小化VC维,提升泛化能力
- 稀疏解性质:仅依赖支持向量,抗噪声能力强
- 几何解释:最大间隔划分对未见数据最鲁棒
问题2:核函数的作用是什么?
核心理解:
- 隐式映射:无需显式计算 ϕ ( x ) \phi(\boldsymbol{x}) ϕ(x),避免维度灾难
- 非线性扩展:在低维空间计算等价于高维空间的内积
- 灵活性:通过选择不同核函数适应数据结构
问题3:SVM如何处理多分类问题?
常见方案:
- One-vs-One:构建 k ( k − 1 ) 2 \frac{k(k-1)}{2} 2k(k−1)个二分类器
- One-vs-Rest:每个类与剩余类训练一个分类器
- DAGSVM:有向无环图组织分类器
对比分析:
方法 | 计算复杂度 | 训练时间 | 存储需求 |
---|---|---|---|
One-vs-One | O(k²) | 长 | 大 |
One-vs-Rest | O(k) | 短 | 小 |
六、高级优化技术
6.1 增量学习
处理大规模数据策略:
- 分块训练:将数据分为多个子集逐块训练
- 保留支持向量:每次迭代仅保留当前支持向量
- 热启动:用已有解初始化新模型
6.2 多核学习
组合多个核函数:
κ
(
x
i
,
x
j
)
=
∑
k
=
1
K
β
k
κ
k
(
x
i
,
x
j
)
\kappa(\boldsymbol{x}_i, \boldsymbol{x}_j) = \sum_{k=1}^K \beta_k \kappa_k(\boldsymbol{x}_i, \boldsymbol{x}_j)
κ(xi,xj)=k=1∑Kβkκk(xi,xj)
其中
β
k
≥
0
\beta_k \geq 0
βk≥0为核权重系数
七、最佳实践指南
7.1 参数调优建议
参数 | 典型取值范围 | 作用说明 |
---|---|---|
C | 10⁻³ ~ 10³ | 控制间隔与误差的权衡 |
gamma | 10⁻⁵ ~ 1 | RBF核带宽,影响模型复杂度 |
epsilon | 0.01 ~ 0.1 | 控制支持向量回归的容忍度 |
7.2 特征预处理要点
- 标准化:对线性核和RBF核必须执行
- 特征选择:使用RFECV进行递归特征消除
- 缺失值处理:SVM不支持缺失值,需提前填充
总结与展望
支持向量机凭借其坚实的数学基础和优秀的泛化性能,在模式识别、数据挖掘等领域持续发挥重要作用。未来发展方向包括:
- 大规模优化算法:提升超大数据集训练效率
- 深度核学习:结合深度神经网络学习核函数
- 异构计算加速:利用GPU/TPU加速核矩阵计算