支持向量机(SVM)
学习视频:80240372X 数据挖掘:理论与算法(自主模式)
核心思想:
Linear SVMs
SVM 最开始为线性分类器,分类过程如下图。
图片来源:Burges, C.J. A Tutorial on Support Vector Machines for Pattern Recognition. Data Mining and Knowledge Discovery 2, 121–167 (1998)
H
1
H_1
H1? 与
H
2
H_2
H2? 为用于分类的超平面,
w
w
w 为垂直与超平面的向量,
b
b
b 为常量,用于偏离原点。分界面中心至原点的距离为
?
b
/
∣
∣
w
∣
∣
-b/||w||
?b/∣∣w∣∣,或表示为
∣
b
∣
/
∣
∣
w
∣
∣
|b|/||w||
∣b∣/∣∣w∣∣。分类条件如下(对于每个点
x
i
x_i
xi?):
x
i
?
w
+
b
≥
+
1
for
y
i
=
+
1
x
i
?
w
+
b
≤
?
1
for
y
i
=
?
1
\begin{aligned} x_i\cdot w + b &\ge +1\quad\text{for}\quad y_i=+1\\ x_i\cdot w + b &\le -1\quad\text{for}\quad y_i=-1\\ \end{aligned}
xi??w+bxi??w+b?≥+1foryi?=+1≤?1foryi?=?1?
其中
±
1
\pm 1
±1 用来代表需要区分的两个类别。图中的 margin 空间越大,表示分类器效果更好。上下两个超平面上加圆圈的数据点被称为支持向量(Support Vectors)。而 SVM 能够保证超平面间的 margin 最大。上述的 SVM 又称为线性支持向量机(LSVM)。依旧只能处理线性分类问题。
空间中的数据点到达中心超平面(上图中的实线)的距离表示为:
∣
x
i
?
w
+
b
∣
∣
∣
w
∣
∣
\frac{|x_i\cdot w + b|}{||w||}
∣∣w∣∣∣xi??w+b∣?
则上下两个超平面到中心平面的距离相等,且 margin 的宽度为其两倍。
∣
±
1
∣
∣
∣
w
∣
∣
,
distance
2
∣
∣
w
∣
∣
,
margin
\begin{aligned} &\frac{|\pm1|}{||w||},\quad\text{distance}\\[2ex] &\frac{2}{||w||},\quad\text{margin} \end{aligned}
?∣∣w∣∣∣±1∣?,distance∣∣w∣∣2?,margin?
综上,判断样本点是否被正确分类,可用如下公式统一表示:
y
i
(
w
?
x
i
+
b
)
?
1
≥
0
y_i(w\cdot x_i + b) - 1 \ge 0
yi?(w?xi?+b)?1≥0
在样本被正确分类的前提下,最大化 margin,等价于最小化如下函数。
max?
M
=
2
∣
∣
w
∣
∣
?
min?
1
2
w
T
w
\text{max }M=\frac{2}{||w||}\Rightarrow \text{min }\frac{1}{2}w^Tw
max?M=∣∣w∣∣2??min?21?wTw
加上正确分类的约束条件,LSVM 的优化问题如下:
min?
1
2
w
T
w
s.t.?
y
i
(
w
i
?
x
+
b
)
≥
1
\begin{aligned} &\text{min }\quad \frac{1}{2}w^Tw\\ &\text{s.t. }\quad y_i(w_i\cdot x + b) \ge 1 \end{aligned}
?min?21?wTws.t.?yi?(wi??x+b)≥1?
通过拉格朗日乘数法对该问题进行求解。
L
P
=
1
2
∣
∣
w
∣
∣
2
?
∑
i
=
1
l
a
i
y
i
(
w
i
?
x
i
+
b
)
+
∑
i
=
1
l
a
i
?
L
P
?
w
=
0
?
w
=
∑
i
=
1
l
a
i
y
i
x
i
?
L
P
?
b
=
0
?
∑
i
=
1
l
a
i
y
i
=
0
\begin{aligned} L_P &= \frac{1}{2}||w||^2 - \sum_{i=1}^la_iy_i(w_i\cdot x_i + b) + \sum_{i=1}^la_i\\[2ex] &\frac{\partial L_P}{\partial w}= 0 \Rightarrow w=\sum_{i=1}^la_iy_ix_i\\[2ex] &\frac{\partial L_P}{\partial b}=0 \Rightarrow \sum_{i=1}^la_iy_i = 0 \end{aligned}
LP??=21?∣∣w∣∣2?i=1∑l?ai?yi?(wi??xi?+b)+i=1∑l?ai??w?LP??=0?w=i=1∑l?ai?yi?xi??b?LP??=0?i=1∑l?ai?yi?=0?
这里的拉格朗日乘数法之所以是减去限制条件,是因为将该问题做为二次规划问题处理,而二次规划问题中,不等式限制条件是小于等于 0 的形式。
将求导后的结果带回原式,得到新的目标函数(与原式表达的问题为对偶问题,一般对偶问题与原问题不等价,但 SVM 满足某些条件使得两问题可等价)。
L
D
=
∑
i
a
i
?
1
2
∑
i
∑
j
a
i
a
j
y
i
y
j
x
i
x
j
=
∑
i
a
i
?
1
2
a
T
H
a
w
h
e
r
e
H
i
,
j
=
y
i
y
j
x
i
?
x
j
s
.
t
.
∑
i
a
i
y
i
=
0
&
a
i
≥
0
\begin{aligned} L_D &= \sum_ia_i - \frac{1}{2}\sum_i\sum_ja_ia_jy_iy_jx_ix_j\\[2ex] &= \sum_ia_i-\frac{1}{2}a^THa\quad where \quad H_{i,j}=y_iy_jx_i\cdot x_j\\[2ex] s.t.&\quad \sum_ia_iy_i=0 \quad \&\quad a_i\ge 0 \end{aligned}
LD?s.t.?=i∑?ai??21?i∑?j∑?ai?aj?yi?yj?xi?xj?=i∑?ai??21?aTHawhereHi,j?=yi?yj?xi??xj?i∑?ai?yi?=0&ai?≥0?
同样,新的目标函数依旧是二次规划问题。求解过程更加方便。只有 1 个变量,即拉格朗日乘数。求解后,只有少部分
a
a
a 非零,而非零的点就是支持向量。
g
(
x
)
=
w
?
x
+
b
=
∑
i
a
i
y
i
x
i
?
x
+
b
\begin{aligned} g(x) &= w\cdot x + b\\ &= \sum_ia_iy_ix_i\cdot x + b \end{aligned}
g(x)?=w?x+b=i∑?ai?yi?xi??x+b?
得出支持向量后,任选一个支持向量带入即可求 b。
y
s
(
x
s
?
w
+
b
)
=
1
y
s
(
∑
m
∈
s
a
m
y
m
x
m
?
x
s
+
b
)
=
1
y
x
2
(
∑
m
∈
s
a
m
y
m
x
m
?
x
s
+
b
)
=
y
s
y
s
?
∑
m
∈
s
a
m
y
m
x
m
?
x
s
=
b
\begin{aligned} y_s(x_s\cdot w + b) &= 1\\ y_s(\sum_{m\in s}a_my_mx_m\cdot x_s + b) &= 1\\ y_x^2(\sum_{m\in s}a_my_mx_m\cdot x_s + b)&=y_s\\ y_s - \sum_{m\in s}a_my_mx_m\cdot x_s &= b \end{aligned}
ys?(xs??w+b)ys?(m∈s∑?am?ym?xm??xs?+b)yx2?(m∈s∑?am?ym?xm??xs?+b)ys??m∈s∑?am?ym?xm??xs??=1=1=ys?=b?
y
s
y_s
ys? 是超平面处讨论的每个点的取值。上下超平面上的点取值只有正负一。所以平方后省略。
上述讨论的前提都是样本点被正确分类,然而,实际数据处理过程中,会出现某些 A 类点在 B 类点中,或 B 类点在 A 类点中。从而无法满足正确划分类别的不等式条件。此时,可以加上一个非负数,若满足条件,依旧视为正确划分。
y
i
(
x
i
?
w
+
b
)
?
1
+
ξ
i
≥
0
min?
1
2
w
T
w
+
C
∑
i
ξ
i
ξ
i
≥
0
\begin{aligned} y_i(x_i\cdot w + b) - 1 + \xi_i \ge 0\\ \text{min }\quad \frac{1}{2}w^Tw + C\sum_i\xi_i\\ \xi_i \ge 0 \end{aligned}
yi?(xi??w+b)?1+ξi?≥0min?21?wTw+Ci∑?ξi?ξi?≥0?
相应的需要优化的目标函数也跟着改变,C 表示惩罚量。优化也是用拉格朗日乘数法。得到新的目标函数。
L
D
=
∑
i
a
i
?
1
2
a
T
H
a
s
.
t
.
0
≤
a
i
≤
C
&
∑
i
a
i
y
i
=
0
\begin{aligned} L_D = \sum_ia_i - \frac{1}{2}a^THa \\ s.t.\quad 0\le a_i\le C\quad\&\sum_ia_iy_i = 0 \end{aligned}
LD?=i∑?ai??21?aTHas.t.0≤ai?≤C&i∑?ai?yi?=0?
相比于理想状况,只是限制条件多了一个上限。
Non-linear SVMs
为使 SVM 能够处理线性不可分问题,将原始空间的数据映射到特征空间中,在特征空间中,该数据是线性可分的。类似下图所示。
映射到更高维度的空间中相应的计算复杂度也就上升,但在 SVM 中存在这样的特性(来源于向量之间的点乘)。
K
(
a
,
b
)
=
(
a
?
b
+
1
)
2
=
Φ
(
a
)
?
Φ
(
b
)
K(a,b)=(a\cdot b + 1)^2 = \varPhi(a)\cdot\varPhi(b)
K(a,b)=(a?b+1)2=Φ(a)?Φ(b)
Φ
(
x
)
=
(
1
,
2
x
1
.
.
.
2
x
m
,
x
1
2
,
.
.
.
,
x
m
2
,
2
x
1
x
2
,
2
x
1
x
3
,
.
.
.
,
2
x
m
?
1
x
m
)
\varPhi(x)=(1,\sqrt{2}x_1...\sqrt{2}x_m,x_1^2,...,x_m^2,\sqrt{2}x_1x_2,\sqrt{2}x_1x_3,...,\sqrt{2}x_{m-1}x_m)
Φ(x)=(1,2
?x1?...2
?xm?,x12?,...,xm2?,2
?x1?x2?,2
?x1?x3?,...,2
?xm?1?xm?)
Φ
(
x
)
\varPhi(x)
Φ(x)是定义的原始空间向量 x 在高维空间上的映射。
K
(
a
,
b
)
K(a,b)
K(a,b)为核函数,不同的核函数对应不同的高维空间。常用的核函数如下:
Polynomial:?
K
(
x
i
,
x
j
)
=
(
x
i
?
x
j
+
1
)
d
Gaussian:?
K
(
x
i
,
x
j
)
=
exp
(
?
∣
∣
x
i
?
x
j
∣
∣
2
2
σ
2
)
\begin{aligned} \text{Polynomial: } K(x_i,x_j) = (x_i\cdot x_j + 1)^d\\ \text{Gaussian: } K(x_i,x_j) = \text{exp}\left(-\frac{||x_i-x_j||^2}{2\sigma^2} \right) \end{aligned}
Polynomial:?K(xi?,xj?)=(xi??xj?+1)dGaussian:?K(xi?,xj?)=exp(?2σ2∣∣xi??xj?∣∣2?)?
则高维空间中对支持向量机的计算过程转化如下。最终都转化成核函数的计算。
w
=
∑
i
=
1
l
a
i
y
i
Φ
(
x
i
)
w
?
Φ
(
x
j
)
=
∑
i
=
1
l
a
i
y
i
Φ
(
x
i
)
?
Φ
(
x
j
)
=
∑
i
=
1
l
a
i
y
i
K
(
x
i
,
x
j
)
b
=
y
s
?
∑
m
∈
s
a
m
y
m
K
(
x
m
,
x
s
)
g
(
x
)
=
∑
i
=
1
l
a
i
y
i
K
(
x
i
,
x
)
+
b
\begin{aligned} &w = \sum_{i=1}^la_iy_i\varPhi(x_i)\\ &w\cdot\varPhi(x_j) = \sum_{i=1}^la_iy_i\varPhi(x_i)\cdot\varPhi(x_j)=\sum_{i=1}^la_iy_iK(x_i,x_j)\\ &b = y_s - \sum_{m\in s}a_my_mK(x_m,x_s)\\ &g(x) = \sum_{i=1}^la_iy_iK(x_i,x) + b \end{aligned}
?w=i=1∑l?ai?yi?Φ(xi?)w?Φ(xj?)=i=1∑l?ai?yi?Φ(xi?)?Φ(xj?)=i=1∑l?ai?yi?K(xi?,xj?)b=ys??m∈s∑?am?ym?K(xm?,xs?)g(x)=i=1∑l?ai?yi?K(xi?,x)+b?
最终,决策平面与线性支持向量机相差不大。
VC Dimension
衡量一个模型能力的指标,VC 表示两个作者名字的首字母。当存在 h 个样本点,随机对样本点定义标签,模型总能够正确的划分类别,则该模型的 VC dimension 为 h。在 n 维空间中,超平面的 h 值为 n+1。有了 VC dimension 可以对模型的测试误差有一个大概的估计。
E
t
e
s
t
<
E
t
r
a
i
n
+
h
(
log
?
(
2
N
/
h
)
+
1
)
?
log
?
(
η
/
4
)
N
=
1
?
η
\begin{aligned} E_{test} &< E_{train} + \sqrt{\frac{h(\log(2N/h)+1)-\log(\eta/4)}{N}}\\ &= 1-\eta \end{aligned}
Etest??<Etrain?+Nh(log(2N/h)+1)?log(η/4)?
?=1?η?
N
N
N为样本数量,
η
\eta
η取值为[0,1],
1
?
η
1-\eta
1?η为至信度(VC confidence)。通过上述公式,对于训练误差相同的模型,越复杂的模型 h 更高,相应的测试误差更大的风险也就越高。
|