1.背景
1.1 最早是由Vladimir N.Vapnik和Alexey Ya.Chervonekis在1963年提出。
1.2 目前的版本(soft margin)是由Corinna和Vapnik在1993年提出,并在1995年发表。
1.3 深度学习(2012)出现之前,SVM被认为机器学习中近十几年最成功,表现最好的算法。
2.介绍
2.1 例子:
两类?哪条线最好?
2.2 SVM寻找区分两类的超平面(hyper plane),使边际(margin)最大。
总共可以有多少个可能的超平面?无数条
如何选取使边际(margin)最大的超平面(Max Margin Hyperplane)?超平面到一侧最近点的距离最大
某一个超平面中,找出超平面到一侧最近点的距离最大
在无数个超平面的距离中找出最大的距离 max margin
超平面到一侧最近点的距离等于到另一侧最近点的距离,两侧的超平面平行。
3.分类
线性可分(linear separable)和线性不可分(linear inseparable);硬间隔(hard margin)和软间隔(soft margin)
4.定义与公式建立
类比二维空间下,一元一次函数的建立,
超平面可以定义为:
W
T
⋅
X
+
b
=
0
W^T ·X + b = 0
WT⋅X+b=0
其中,
W
T
:
w
e
i
g
h
t
v
e
c
t
o
t
W^T:weight vectot
WT:weightvectot
W
T
=
{
w
1
T
,
w
2
T
,
.
.
.
,
w
N
T
}
W^T=\{w^T_1,w^T_2,...,w^T_N\}
WT={w1T,w2T,...,wNT}
4.2 二维特征向量
假设2维特征向量:
X
=
(
x
1
,
x
2
)
X =(x_1, x_2)
X=(x1,x2)
超平面方程为:
b
+
w
1
T
x
1
+
w
2
T
x
2
=
0.
b+w^T_1x_1+w^T_2x_2 = 0.
b+w1Tx1+w2Tx2=0.
4.2.1 s.t.
所有超平面右上方的点满足:
b
+
w
1
T
x
1
+
w
2
T
x
2
>
0
,
f
o
r
y
i
=
+
1
b+w^T_1x_1+w^T_2x_2 > 0,for\ y_i=+1
b+w1Tx1+w2Tx2>0,for yi=+1
所有超平面左下方的点满足:
b
+
w
1
T
x
1
+
w
2
T
x
2
<
0
,
f
o
r
y
i
=
−
1
b+w^T_1x_1+w^T_2x_2 < 0,for\ y_i=-1
b+w1Tx1+w2Tx2<0,for yi=−1
综合两式,得到:
y
i
(
b
+
w
i
T
x
i
)
=
y
i
(
b
+
w
1
T
x
1
+
w
2
T
x
2
)
>
0
,
f
o
r
i
=
1
,
2.
y_i(b+w^T_ix_i)=y_i(b+w^T_1x_1+w^T_2x_2) > 0, for\ i = 1,2.
yi(b+wiTxi)=yi(b+w1Tx1+w2Tx2)>0,for i=1,2.
4.2.2 距离
所以最大边际距离为:
{
m
a
x
m
a
r
g
i
n
(
w
,
b
)
=
m
a
x
m
i
n
w
,
b
,
x
i
d
i
s
t
a
n
c
e
(
w
,
b
,
x
i
)
=
m
a
x
w
,
b
m
i
n
x
i
(
1
∣
∣
w
∣
∣
∣
w
T
x
i
+
b
∣
)
y
i
(
w
T
x
i
+
b
)
>
0
\begin{cases} max\ margin(w,b)=max\ min_{w,b,x_i}\ distance(w,b,x_i)=max_{w,b}\ min_{x_i}{(\frac {1}{||w||}|w^Tx_i+b|)}\\ y_i(w^Tx_i+b)>0 \end{cases}
{max margin(w,b)=max minw,b,xi distance(w,b,xi)=maxw,b minxi(∣∣w∣∣1∣wTxi+b∣)yi(wTxi+b)>0
即:
{
m
a
x
w
,
b
1
∣
∣
w
∣
∣
m
i
n
x
i
y
i
(
w
T
x
i
+
b
)
y
i
(
w
T
x
i
+
b
)
>
0
\begin{cases} max_{w,b}\frac {1}{||w||}min_{x_i}y_i(w^Tx_i+b)\\y_i(w^Tx_i+b)>0 \end{cases}
{maxw,b∣∣w∣∣1minxiyi(wTxi+b)yi(wTxi+b)>0
令
r
=
y
i
(
w
T
x
i
+
b
)
,
则
y
i
(
w
T
x
i
+
b
)
=
r
,
r
>
0
r = y_i(w^Tx_i+b),则y_i(w^Tx_i+b)=r,r>0
r=yi(wTxi+b),则yi(wTxi+b)=r,r>0
y
i
=
±
1
,
那
么
边
界
平
面
方
程
为
w
T
x
i
+
b
=
∣
r
∣
y_i=±1,那么边界平面方程为w^Tx_i+b=|r|
yi=±1,那么边界平面方程为wTxi+b=∣r∣
调整weight,使
r
=
1
r=1
r=1,此时,
m
a
x
m
a
r
g
i
n
(
w
,
b
)
=
m
a
x
w
,
b
1
∣
∣
w
∣
∣
max\ margin(w,b)=max_{w,b}\frac {1}{||w||}
max margin(w,b)=maxw,b∣∣w∣∣1
超平面定义边际的两边:
{
H
1
:
b
+
w
1
T
x
1
+
w
2
T
x
2
≥
1
,
f
o
r
y
i
=
+
1
,
H
2
:
b
+
w
1
T
x
1
+
w
2
T
x
2
≤
1
,
f
o
r
y
i
=
−
1.
\begin{cases} H_1:b+w^T_1x_1+w^T_2x2≥1,for\ y_i=+1,\\ H_2:b+w^T_1x_1+w^T_2x2≤1,for\ y_i=-1. \end{cases}
{H1:b+w1Tx1+w2Tx2≥1,for yi=+1,H2:b+w1Tx1+w2Tx2≤1,for yi=−1.
如下图:
所有坐落在边际的两边的超平面上的点被称作“支持向量(support vectors)”
分界的超平面和H1或H2上任意一点的距离为
1
∣
∣
w
∣
∣
\frac {1}{||w||}
∣∣w∣∣1,其中||W||是向量的范数(norm)。
5 求解
5.1 SVM如何找出最大边际的超平面呢(MHH)?
利用一些数学推导,将公式
y
i
(
b
+
w
i
T
x
i
)
>
1
y_i(b+w^T_ix_i)>1
yi(b+wiTxi)>1变为有限制的凸优化问题(convex quadratic optim)
利用Karush-Kuhn-Tucker(KTT)条件和拉格朗日公式,可以推出MMH可以被表示为以下决策边界(decision boundary)
分离超平面可以写成:
∑
i
=
1
l
λ
i
∗
y
i
(
x
⋅
x
i
)
+
b
0
)
=
0
\sum_{i=1}^l\lambda^*_iy_i(x·x_i)+b_0)=0
i=1∑lλi∗yi(x⋅xi)+b0)=0
分类决策函数可以写成:
d
(
x
T
)
=
s
i
g
n
(
W
∗
T
x
+
b
∗
)
=
s
i
g
n
(
∑
i
=
1
l
λ
i
∗
y
i
(
x
⋅
x
i
)
+
b
0
)
=
s
i
g
n
(
∑
i
=
1
l
λ
i
∗
y
i
x
i
x
T
+
b
0
)
d(x^T)=sign(W^{*T}x+b^*)=sign(\sum_{i=1}^l\lambda^*_iy_i(x·x_i)+b_0)=sign(\sum_{i=1}^l\lambda^*_iy_ix_ix^T+b_0)
d(xT)=sign(W∗Tx+b∗)=sign(i=1∑lλi∗yi(x⋅xi)+b0)=sign(i=1∑lλi∗yixixT+b0)
其中,
y
i
是
支
持
向
量
点
x
i
的
类
别
标
记
;
x
T
是
要
测
试
的
实
例
;
y_i是支持向量点x_i的类别标记;x^T是要测试的实例;
yi是支持向量点xi的类别标记;xT是要测试的实例;
λ
i
∗
和
b
0
都
是
单
一
数
值
型
参
数
;
l
是
支
持
向
量
点
的
个
数
。
\lambda^*_i和b_0都是单一数值型参数;l是支持向量点的个数。
λi∗和b0都是单一数值型参数;l是支持向量点的个数。
这就是说,分类决策函数只依赖于输入x和训练样本输入的内积。
5.2 硬间隔公式推导
对于给定的线性可分训练数据集,可以首先求对偶问题的解
λ
∗
\lambda^*
λ∗;再利用对
w
和
b
w和b
w和b的求导等于0的公式求得原始问题的解
w
∗
,
b
∗
w^*,b^*
w∗,b∗;从而得到分离超平面及分类决策函数。这种算法称为线性可分支持向量机的对偶学习算法。
5.3 软间隔公式推导
6. 线性不可分情况
6.1 数据集在空间中对应的向量不可被一个超平面区分开。
6.2 两个步骤来解决:
一:利用一个非线性的映射把原数据及中的向量点转化到一个更高纬度的空间中;
二:在这个高纬度的空间中找到一个线性的超平面来根据线性可分的情况处理。
6.3 如何利用非线性映射把原始数据转化到高维中?
6.3.1 例子:
3维输入向量:
X
=
(
x
1
,
x
2
,
x
3
)
X=(x_1,x_2,x_3)
X=(x1,x2,x3)
转化到6维空间
Z
Z
Z中去:
Φ
1
(
X
)
=
x
1
,
Φ
2
(
X
)
=
x
2
,
Φ
3
(
X
)
=
x
3
,
Φ
4
(
X
)
=
(
x
1
)
2
,
Φ
5
(
X
)
=
x
1
x
2
,
Φ
6
(
X
)
=
x
1
x
3
\Phi_1(X)=x_1,\Phi_2(X)=x_2,\Phi_3(X)=x_3,\\ \Phi_4(X)=(x_1)^2,\Phi_5(X)=x_1x_2,\Phi_6(X)=x_1x_3
Φ1(X)=x1,Φ2(X)=x2,Φ3(X)=x3,Φ4(X)=(x1)2,Φ5(X)=x1x2,Φ6(X)=x1x3
新的决策超平面:
d
(
Z
)
=
W
T
Z
+
b
d(Z)=W^TZ+b
d(Z)=WTZ+b
其中
W
W
W和
Z
Z
Z是向量,这个超平面是线性的,解出
W
W
W和
b
b
b之后,并且带入原方程:
d
(
Z
)
=
w
1
T
x
1
+
w
2
T
x
2
+
w
3
T
x
3
+
w
4
T
(
x
1
)
2
+
w
5
T
x
1
x
2
+
w
6
T
x
1
x
3
+
b
=
w
1
T
z
1
+
w
2
T
z
2
+
w
3
T
z
3
+
w
4
T
z
4
+
w
5
T
z
5
+
w
6
T
z
6
+
b
d(Z)=w^T_1x_1+w^T_2x_2+w^T_3x_3+w^T_4(x_1)^2+w^T_5x_1x_2+w^T_6x_1x_3+b\\=w^T_1z_1+w^T_2z_2+w^T_3z_3+w^T_4z_4+w^T_5z_5+w^T_6z_6+b
d(Z)=w1Tx1+w2Tx2+w3Tx3+w4T(x1)2+w5Tx1x2+w6Tx1x3+b=w1Tz1+w2Tz2+w3Tz3+w4Tz4+w5Tz5+w6Tz6+b
6.3.2 思考问题:
- 如何选择合理的非线性转化把数据转到高纬度中?
- 如何解决计算内积时算法复杂度非常高的问题?
答案:使用核方法(kernel trick)
在线性SVM中转化为最优化问题时求解的公式计算都是以内积(dot product)的形式出现的
Φ ( X i ) Φ ( X j ) \Phi(X_i)\Phi(X_j) Φ(Xi)Φ(Xj)
其 中 Φ ( X ) 其中\ \Phi(X) 其中 Φ(X)是把训练集中的向量点转化到高维的非线性映射函数,因为内积的算法复杂度非常大,所以利用核函数来取代计算非线性映射函数的内积。
6.4 核方法
6.4.1 以下核函数和非线性映射函数的内积等同
K ( X i , X j ) = Φ ( X i ) Φ ( X j ) K(X_i,X_j)=\Phi(X_i)\Phi(X_j) K(Xi,Xj)=Φ(Xi)Φ(Xj)
6.4.2 核函数举例
6.4.3 常用的核函数(kernel functions)
7. SVM扩展
SVM扩展可解决多个类别分类问题:
对于每个类,有一个当前类和其他类的二类分类器(one-vs-rest)
8. 结论
- 训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的维度决定的。所以SVM不太容易产生overfitting;
- SVM训练出来的模型完全依赖于支持向量(Support Vectors),即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍然会得到完全一样的模型;
- 一个SVM如果训练得出的支持向量个数比较小,SVM训练出的模型比较容易被泛化。