第六章 支持向量机学习笔记
1. 间隔与支持向量
1.1 什么是间隔和支持向量?
在分类学习中,目标是找到划分超平面将不同类别样本分开。最优超平面应位于两类样本的"正中间",这种超平面对局部扰动容忍性最好,具有最强泛化能力。
1.2 如何找到最大间隔划分超平面?
- 超平面方程: w T x + b = 0 w^T x + b = 0 wTx+b=0( w w w为法向量, b b b为位移项)
- 样本约束条件:
- y i = + 1 y_i=+1 yi=+1时, w T x i + b ≥ 1 w^T x_i + b \geq 1 wTxi+b≥1
- y i = − 1 y_i=-1 yi=−1时, w T x i + b ≤ − 1 w^T x_i + b \leq -1 wTxi+b≤−1
- 优化目标:最大化 2 ∥ w ∥ \frac{2}{\|w\|} ∥w∥2等价于最小化 1 2 ∥ w ∥ 2 \frac{1}{2}\|w\|^2 21∥w∥2
1.3 支持向量机的基本型
min w , b 1 2 ∥ w ∥ 2 s.t. y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , … , m \min_{w,b} \frac{1}{2} \|w\|^2 \quad \text{s.t.} \quad y_i(w^T x_i + b) \geq 1,\ i=1,2,\ldots,m w,bmin21∥w∥2s.t.yi(wTxi+b)≥1, i=1,2,…,m
2. 对偶问题
2.1 什么是对偶问题?
通过拉格朗日乘子法转换的优化问题:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
\max_{\alpha} \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 x_i^T x_j
αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj
约束条件:
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
≥
0
,
i
=
1
,
2
,
…
,
m
\sum_{i=1}^m \alpha_i y_i = 0,\quad \alpha_i \geq 0,\ i=1,2,\ldots,m
i=1∑mαiyi=0,αi≥0, i=1,2,…,m
2.2 如何求解对偶问题?
使用SMO(序列最小优化)算法求解二次规划问题
2.3 代码实现
import numpy as np
from sklearn.svm import SVC
X = np.array([[1,2], [2,3], [3,3], [2,1], [3,2], [4,3]])
y = np.array([1,1,1,-1,-1,-1])
clf = SVC(kernel='linear', C=1.0)
clf.fit(X, y)
print("支持向量:", clf.support_vectors_)
print("权重:", clf.coef_[0])
print("偏置:", clf.intercept_[0])
3. 核函数
3.1 什么是核函数?
将样本映射到高维空间的函数,常用核函数:
- 线性核: K ( x i , x j ) = x i T x j K(x_i,x_j) = x_i^T x_j K(xi,xj)=xiTxj
- 多项式核: K ( x i , x j ) = ( x i T x j + c ) d K(x_i,x_j) = (x_i^T x_j + c)^d K(xi,xj)=(xiTxj+c)d
- 高斯核: K ( x i , x j ) = exp ( − γ ∥ x i − x j ∥ 2 ) K(x_i,x_j) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(−γ∥xi−xj∥2)
3.2 核函数选择策略
数据类型 | 推荐核函数 |
---|---|
线性可分 | 线性核 |
小样本非线性 | 高斯核 |
大样本非线性 | 多项式核 |
3.3 代码实现
clf = SVC(kernel='rbf', C=1.0, gamma=0.1)
clf.fit(X, y)
print("支持向量:", clf.support_vectors_)
4. 软间隔与正则化
4.1 软间隔概念
允许部分样本不满足约束,提升模型容错性:
min
w
,
b
1
2
∥
w
∥
2
+
C
∑
i
=
1
m
ξ
i
\min_{w,b} \frac{1}{2}\|w\|^2 + C\sum_{i=1}^m \xi_i
w,bmin21∥w∥2+Ci=1∑mξi
4.2 正则化类型
- L1正则化:稀疏解
- L2正则化:非稀疏解
4.3 代码实现
clf = SVC(kernel='linear', C=0.5) # C值越小容错性越强
clf.fit(X, y)
5. 支持向量回归(SVR)
5.1 SVR原理
允许预测值与真实值存在
ϵ
\epsilon
ϵ偏差:
min
1
2
∥
w
∥
2
+
C
∑
i
=
1
m
(
ξ
i
+
ξ
i
^
)
\min \frac{1}{2}\|w\|^2 + C\sum_{i=1}^m (\xi_i + \hat{\xi_i})
min21∥w∥2+Ci=1∑m(ξi+ξi^)
5.2 代码实现
from sklearn.svm import SVR
X = np.array([[1],[2],[3],[4],[5]])
y = np.array([1,2,3,4,5])
clf = SVR(kernel='linear', epsilon=0.1)
clf.fit(X, y)
print("预测值:", clf.predict(X))
6. 注意点
- SVM核心思想是通过最大化间隔提升泛化能力
- 对偶问题转换和核技巧是处理非线性问题的关键
- 正则化参数C平衡模型复杂度与训练误差
- SVR通过 ϵ \epsilon ϵ-不敏感函数实现鲁棒回归
- 实际应用中需注意特征缩放和参数调优