前言:在机器学习中,SVM是十大经典算法之一,在这十大算法中SVM的地位也是处于前几位的行列中,然而学习SVM算法并不容易。在本人看来想要透彻理解SVM算法,主要有两大难题需要解决,一个是不等式约束条件最优化问题(用结合KKT条件的拉格朗日乘子法解决);另一个问题是对多个未知变量求解(也是本文需要介绍的SMO算法)。
SVM的简介
svm(support vector machines,支持向量机)是一个二分类的机器学习线性分类器,因此只能用于解决线性可分问题(指一个线性函数能够将样本数据完全正确的分开)。它的主要思想是寻找一个可以正确划分出正负训练样本的最大间隔的决策超平面(或线、点),并使样本到超平面的距离之和最大(实际上是使支持向量到超平面的距离之和最大)。通俗的讲就是找到线性函数的一组权值,该函数就是决策面。
SVM的分类原理
问题:给定训练样本集D =
{
(
X
1
,
Y
1
)
,
(
X
1
,
Y
1
)
,
.
.
.
,
(
X
n
,
Y
n
)
}
,
Y
i
∈
{
−
1
,
1
}
\{(X_1,Y_1),(X_1,Y_1),...,(X_n,Y_n)\},Y_i\in\{-1,1\}
{(X1,Y1),(X1,Y1),...,(Xn,Yn)},Yi∈{−1,1},每个样本有两个属性(
x
1
,
x
2
x_1,x_2
x1,x2),样本的分布如图1所示,实心圈表示
Y
i
=
1
Y_i=1
Yi=1的样本,空心圈表示
Y
i
=
−
1
Y_i=-1
Yi=−1的样本,找出一组支持向量,并且使正负样本的支持向量到决策线中的距离最远。
解:从图1可以看到有三组线(目前暂叫支持向量线),这三组支持向量线对应的决策线就是它们的中心位置(如b组线的决策线),这三条决策线都是可以完美的将正负样本划分开来,但是三组支持向量线的间隔都不是相同的,而我们要找的是到正负样本距离最大的决策线。
设:样本属性系数
W
=
(
w
1
,
w
2
)
W=(w_1,w_2)
W=(w1,w2),决策线所对应的方程为
W
T
X
+
b
=
0
W^TX+b=0
WTX+b=0(数学上是
w
1
x
1
+
w
2
x
2
+
b
=
0
w_1x_1+w_2x_2+b=0
w1x1+w2x2+b=0)。
那么样本空间中任意点X到决策线中的距离可写为:
d
=
∣
W
T
X
+
b
∣
∣
∣
W
∣
∣
,
(
其
中
∣
∣
W
∣
∣
=
w
1
2
+
w
2
2
)
(1)
d=\frac{|W^TX+b|}{||W||},\ (其中||W||=\sqrt{w_1^2+w_2^2})\tag1
d=∣∣W∣∣∣WTX+b∣, (其中∣∣W∣∣=w12+w22)(1)
若决策线可以将训练集样本数据全部正确分类,则支持向量线需满足:
{
W
T
X
i
+
b
≥
1
,
Y
i
=
1
;
W
T
X
i
+
b
≤
−
1
,
Y
i
=
−
1
;
(2)
\begin{cases} W^TX_i+b\geq1,&Y_i=1;\\ W^TX_i+b\leq-1,&Y_i=-1;\\ \end{cases} \tag{2}
{WTXi+b≥1,WTXi+b≤−1,Yi=1;Yi=−1;(2)
如图2所示,距离决策线最近的几个训练样本点(画红圈的)使
(
2
)
(2)
(2)式中的等号成立,它们被称为支持向量,因此两个异类支持向量到超平面的距离之和为(结合
(
1
)
(1)
(1)式和图):
γ
=
2
∣
∣
W
∣
∣
(3)
\gamma=\frac{2}{||W||}\tag3
γ=∣∣W∣∣2(3)
图中支持向量线所夹区域称为“间隔”。
原问题一组支持向量,并且使正负样本的支持向量到决策线中的距离最远,也就是要找满足
(
2
)
(2)
(2)式条件的W和b,并使
γ
\gamma
γ最大,即:
(
m
a
x
W
,
b
)
2
∣
∣
W
∣
∣
s
.
t
.
Y
i
(
W
T
X
i
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
n
(4)
{max \choose W,b}\ \frac{2}{||W||}\\s.t.\ \ Y_i(W^TX_i+b)\geq1,\ \ \ i=1,2,...,n\tag4
(W,bmax) ∣∣W∣∣2s.t. Yi(WTXi+b)≥1, i=1,2,...,n(4)
(
4
)
(4)
(4)式就是支持向量机(SVM)的基本型。从式中可以看出,距离
γ
\gamma
γ只与
W
W
W有关系,与
b
b
b并无关系,那为什么在求极大值时加上
b
b
b呢。其实
b
b
b是通过约束条件影响着
W
W
W的取值,进而间接的对距离
γ
\gamma
γ产生影响。
此时
(
4
)
(4)
(4)式是一个不等式约束条件求极值问题,那么则可引用满足KKT条件的拉格朗日乘子法:
L
(
W
,
b
,
α
)
=
1
2
∣
∣
W
∣
∣
2
+
∑
i
=
1
n
α
i
(
1
−
Y
i
(
W
T
X
i
+
b
)
)
,
α
i
≥
0
(5)
L(W,b,\alpha)=\frac12||W||^2+\sum^n_{i=1}\alpha_i(1-Y_i(W^TX_i+b)),\ \alpha_i \geq0\tag5
L(W,b,α)=21∣∣W∣∣2+i=1∑nαi(1−Yi(WTXi+b)), αi≥0(5)注意这里之所以是
1
−
Y
i
(
W
T
X
i
+
b
)
1-Y_i(W^TX_i+b)
1−Yi(WTXi+b)而不是
Y
i
(
W
T
X
i
+
b
)
−
1
Y_i(W^TX_i+b)-1
Yi(WTXi+b)−1,是因为要使其小于等于0(至于为什么要小于等于0,可以看本人的另一篇文章)。
令拉格朗日函数
L
(
W
,
b
,
α
)
L(W,b,\alpha)
L(W,b,α)对
W
、
b
W、b
W、b的偏导为0得:
W
=
∑
i
=
1
n
α
i
Y
i
X
i
(6)
W = \sum^n_{i=1}\alpha_iY_iX_i\tag6
W=i=1∑nαiYiXi(6)
∑
i
=
1
n
α
i
Y
i
=
0
(7)
\sum^n_{i=1}\alpha_iY_i=0\tag7
i=1∑nαiYi=0(7)此时将
(
6
)
(6)
(6)式和
(
7
)
(7)
(7)式代入
(
5
)
(5)
(5)式,可将
L
(
W
,
b
,
α
)
L(W,b,\alpha)
L(W,b,α)中的
W
、
b
W、b
W、b消去,再考虑
(
7
)
(7)
(7)式中的约束可得到:
(
m
a
x
α
)
∑
i
=
1
n
α
i
−
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
Y
i
Y
j
X
i
T
X
j
s
.
t
.
∑
i
=
1
n
α
i
Y
i
=
0
,
α
i
≥
0
,
i
=
1
,
2
,
.
.
.
,
n
.
(8)
{max \choose \alpha}\ \sum^n_{i=1}\alpha_i-\frac12\sum^n_{i=1}\sum^n_{j=1}\alpha_i\alpha_jY_iY_jX_i^TX_j\\s.t.\ \ \sum^n_{i=1}\alpha_iY_i=0,\\\alpha_i\geq0,\ \ \ \ \ i=1,2,...,n.\tag8
(αmax) i=1∑nαi−21i=1∑nj=1∑nαiαjYiYjXiTXjs.t. i=1∑nαiYi=0,αi≥0, i=1,2,...,n.(8)对于
(
8
)
(8)
(8)式使用SMO算法求解。解出
α
\alpha
α后,可由
(
6
)
(6)
(6)式求出
W
W
W,SVM算法模型如下:
f
(
X
)
=
W
T
X
+
b
=
∑
i
=
1
n
α
i
Y
i
X
i
T
X
+
b
(9)
f(X)=W^TX+b\\=\sum^n_{i=1}\alpha_iY_iX_i^TX+b\tag9
f(X)=WTX+b=i=1∑nαiYiXiTX+b(9)由于是不等式约束条件最优化问题,因此上述的过程均服从以下KKT条件:
{
α
i
≥
0
Y
i
f
(
X
i
)
−
1
≥
0
α
i
(
Y
i
f
(
X
i
)
−
1
)
=
0
(10)
\begin{cases} \alpha_i\geq0\\ Y_if(X_i)-1\geq0\\ \alpha_i(Y_if(X_i)-1)=0 \end{cases} \tag{10}
⎩⎪⎨⎪⎧αi≥0Yif(Xi)−1≥0αi(Yif(Xi)−1)=0(10)
由KKT条件可以看出,对于任意样本
(
X
i
,
y
i
)
(X_i,y_i)
(Xi,yi),总有
α
i
\alpha_i
αi=0或
Y
i
f
(
X
i
)
=
1
Y_if(X_i)=1
Yif(Xi)=1。然而
α
\alpha
α=0,则该样本不会对f(x)有任何影响,也不会出现在
(
9
)
(9)
(9)式的求和中,因此只有
α
>
0
\alpha>0
α>0才有意义,那么此时
Y
i
f
(
X
i
)
=
1
Y_if(X_i)=1
Yif(Xi)=1,该式表示样本点在支持向量线上。由这个内容可以反应出:训练完成后,大部分的训练样本都是无效的,也无需保留,最终模型仅与支持向量有关。
因此通过下式可以解出b,其中
Y
s
Y_s
Ys和
X
s
X_s
Xs是支持向量其中之一:
Y
s
(
∑
i
=
1
n
α
i
Y
i
X
i
T
X
s
+
b
)
=
1
(11)
Y_s(\sum^n_{i=1}\alpha_iY_iX_i^TX_s+b)=1\tag{11}
Ys(i=1∑nαiYiXiTXs+b)=1(11)一般来说求b值只需取任意一个支持向量即可,但为了模型有更好的鲁棒性,常使用所有支持向量求b的平均值。
SMO算法简介及应用
若所求参数有(
α
1
,
α
2
,
.
.
.
,
α
n
\alpha_1,\alpha_2,...,\alpha_n
α1,α2,...,αn),该算法则是固定一个
α
i
\alpha_i
αi之外的所有参数(可以想象除了这个参数以外其他参数均已达到最优),求解目标函数得到
α
i
\alpha_i
αi,直到求完所有的
α
\alpha
α为止。
此时以求
(
8
)
(8)
(8)式中的
α
\alpha
α为例。该问题中有约束条件
∑
i
=
1
n
α
i
Y
i
=
0
\sum^n_{i=1}\alpha_iY_i=0
∑i=1nαiYi=0,其中Y_i是已知的,若SMO只是固定一个参数
α
i
\alpha_i
αi,那么该参数可直接由其他固定的参数导出,这样的话意义就不大了。因此,此时SMO是选择两个变量
α
i
、
α
j
\alpha_i、\alpha_j
αi、αj,并固定其他参数,这样,在参数初始化(
α
i
、
α
j
、
b
\alpha_i、\alpha_j、b
αi、αj、b)后SMO就可不断循环以下两步,直至所有参数都满足
(
10
)
(10)
(10)式中的条件为止:
(1)选择一对需要更新的变量
α
i
、
α
j
\alpha_i、\alpha_j
αi、αj(为了方便叙述);
(2)固定
α
i
、
α
j
\alpha_i、\alpha_j
αi、αj以外的参数,求解
(
8
)
(8)
(8)式的中的目标函数得到更新后的
α
i
、
α
j
\alpha_i、\alpha_j
αi、αj
注意:在选择变量进行更新是有一定策略的,选择参数时有一个不满足KKT条件,目标函数就会迭代后增大,KKT违背的程度越大,变量更新后可能导致的目标函数值增幅越大。因此为了突出这一特点,SMO采用了一个启发式:使选取的两变量所对应样本之间的间隔最大。这样的话理论上两变量会有很大差别。
此时选取
α
1
、
α
2
\alpha_1、\alpha_2
α1、α2作为需要更新的变量,那么其余变量都为固定值(理论最优值),
(
8
)
(8)
(8)式中约束可重写为:
α
1
Y
1
+
α
2
Y
2
=
c
,
α
1
≥
0
,
α
2
≥
0
(12)
\alpha_1Y_1+\alpha_2Y_2=c,\ \ \ \ \alpha_1\geq0,\tag{12}\alpha_2\geq0
α1Y1+α2Y2=c, α1≥0,α2≥0(12) 其中
c
=
−
∑
k
≠
1
,
2
α
k
Y
k
(13)
c=-\sum_{k\neq 1,2}\alpha_kY_k\tag{13}
c=−k=1,2∑αkYk(13)此时
(
8
)
(8)
(8)式目标函数也变下式(constant表示不含
α
1
,
α
2
\alpha_1,\alpha_2
α1,α2的项,需注意的是
Y
i
2
Y_i^2
Yi2=1):
m
a
x
Z
(
α
1
,
α
2
)
=
α
1
+
α
2
−
(
1
2
K
11
α
1
2
+
1
2
K
22
α
2
2
+
Y
1
Y
2
K
12
α
1
α
2
+
Y
1
V
1
α
1
+
Y
2
V
2
α
2
)
+
c
o
n
s
t
a
n
t
max \ Z(\alpha_1,\alpha_2)=\alpha_1+\alpha_2-(\frac12K_{11}\alpha_1^2+\frac12K_{22}\alpha_2^2+Y_1Y_2K_{12}\alpha_1\alpha_2+Y_1V_1\alpha_1+Y_2V_2\alpha_2)+constant
max Z(α1,α2)=α1+α2−(21K11α12+21K22α22+Y1Y2K12α1α2+Y1V1α1+Y2V2α2)+constant
K
i
j
=
X
i
T
X
j
=
X
i
X
j
T
,
i
,
j
∈
{
1
,
2
}
K_{ij}=X_i^TX_j=X_iX_j^T, \ \ \ \ i,j\in \{1,2\}
Kij=XiTXj=XiXjT, i,j∈{1,2}
V
i
=
∑
j
=
3
n
α
j
Y
j
K
i
j
,
i
∈
{
1
,
2
}
(14)
V_i=\sum_{j=3}^n\alpha_jY_jK_{ij}, \ \ \ \ i\in \{1,2\}\tag{14}
Vi=j=3∑nαjYjKij, i∈{1,2}(14) 将
(
12
)
(12)
(12)式代入
(
14
)
(14)
(14)式中消去
α
1
\alpha_1
α1得到一个只关于参数
α
2
\alpha_2
α2的一元函数:
m
a
x
Z
(
α
2
)
=
(
c
−
α
2
Y
2
)
Y
1
+
α
2
−
(
1
2
K
11
(
c
−
α
2
Y
2
)
2
+
1
2
K
22
α
2
2
+
Y
2
K
12
(
c
−
α
2
Y
2
)
α
2
+
V
1
(
c
−
α
2
Y
2
)
+
Y
2
V
2
α
2
)
+
c
o
n
s
t
a
n
t
(15)
max \ Z(\alpha_2)=(c-\alpha_2Y_2)Y_1+\alpha_2-(\frac12K_{11}(c-\alpha_2Y_2)^2+\frac12K_{22}\alpha_2^2+Y_2K_{12}(c-\alpha_2Y_2)\alpha_2+V_1(c-\alpha_2Y_2)+Y_2V_2\alpha_2)+constant\tag{15}
max Z(α2)=(c−α2Y2)Y1+α2−(21K11(c−α2Y2)2+21K22α22+Y2K12(c−α2Y2)α2+V1(c−α2Y2)+Y2V2α2)+constant(15) 可以看到这是一个一元二次函数求极值问题,可以对目标函数进行求导,并令导函数为0:
∂
Z
(
α
2
)
∂
α
2
=
c
K
11
Y
2
−
c
K
11
Y
2
−
(
K
11
+
K
22
−
2
K
12
)
α
2
−
Y
1
Y
2
+
V
1
Y
2
−
V
2
Y
2
+
1
=
0
(16)
\frac{\partial Z(\alpha_2)}{\partial \alpha_2}=cK_{11}Y_2-cK_{11}Y_2-(K_{11}+K_{22}-2K_{12})\alpha_2-Y_1Y_2+V_1Y_2-V_2Y_2+1=0\tag{16}
∂α2∂Z(α2)=cK11Y2−cK11Y2−(K11+K22−2K12)α2−Y1Y2+V1Y2−V2Y2+1=0(16)由于
α
2
\alpha_2
α2有初始化,因此此处假设初始化的
α
2
\alpha_2
α2为
α
2
o
l
d
\alpha_2^{old}
α2old,本次由梯度求出的
α
2
\alpha_2
α2为
α
2
n
e
w
\alpha_2^{new}
α2new。
定义
E
i
E_i
Ei表示该样本的预测值与真实值之差(其中
f
(
X
i
)
f(X_i)
f(Xi)是模型的预测结果式子同
(
9
)
(9)
(9)式:
E
i
=
f
(
X
i
)
−
Y
i
(17)
E_i=f(X_i)-Y_i\tag{17}
Ei=f(Xi)−Yi(17)用
(
9
)
(9)
(9)式的
f
(
x
i
)
f(x_i)
f(xi)来表示
(
14
)
(14)
(14)式的
V
1
,
V
2
V_1,V_2
V1,V2:
V
1
=
f
(
X
1
)
−
∑
j
=
1
2
α
j
Y
j
K
1
j
−
b
(18)
V_1=f(X_1)-\sum_{j=1}^2\alpha_jY_jK_{1j}-b\tag{18}
V1=f(X1)−j=1∑2αjYjK1j−b(18)
V
2
=
f
(
X
2
)
−
∑
j
=
1
2
α
j
Y
j
K
2
j
−
b
(19)
V_2=f(X_2)-\sum_{j=1}^2\alpha_jY_jK_{2j}-b\tag{19}
V2=f(X2)−j=1∑2αjYjK2j−b(19)将
(
12
)
,
(
18
)
,
(
19
)
(12),(18),(19)
(12),(18),(19)式代入
(
16
)
(16)
(16)式得:
(
K
11
+
K
22
−
2
K
12
)
α
2
n
e
w
=
(
K
11
+
K
22
−
2
K
12
)
α
2
o
l
d
+
Y
2
(
f
(
x
1
)
−
Y
1
−
f
(
x
2
)
+
Y
2
)
(20)
(K_{11}+K_{22}-2K_{12})\alpha_2^{new}=(K_{11}+K_{22}-2K_{12})\alpha_2^{old}+Y_2(f(x_1)-Y_1-f(x_2)+Y_2)\tag{20}
(K11+K22−2K12)α2new=(K11+K22−2K12)α2old+Y2(f(x1)−Y1−f(x2)+Y2)(20)将
(
17
)
(17)
(17)式代入上式,并令
(
K
11
+
K
22
−
2
K
12
)
=
η
(K_{11}+K_{22}-2K_{12})=\eta
(K11+K22−2K12)=η得:
α
2
n
e
w
=
α
2
o
l
d
+
Y
2
E
1
−
E
2
η
(21)
\alpha_2^{new}=\alpha_2^{old}+Y_2\frac{E_1-E_2}{\eta}\tag{21}
α2new=α2old+Y2ηE1−E2(21)上式则是拉格朗日乘子最终的更新公式。
此时可用求得的
α
2
n
e
w
\alpha_2^{new}
α2new去更新b值。由
α
2
n
e
w
\alpha_2^{new}
α2new求出的b值为
b
2
n
e
w
b_2^{new}
b2new。此时
X
2
X_2
X2就是”支持向量“,在
(
11
)
(11)
(11)式中的两边同时乘
Y
2
Y_2
Y2可得:
b
2
n
e
w
=
Y
2
−
∑
i
=
1
n
α
i
Y
i
X
i
T
X
2
(22)
b_2^{new}=Y_2-\sum^n_{i=1}\alpha_iY_iX_i^TX_2\tag{22}
b2new=Y2−i=1∑nαiYiXiTX2(22)由于其他n-2个参数是固定的,因此
α
1
n
e
w
Y
1
+
α
2
n
e
w
Y
2
=
α
1
o
l
d
Y
1
+
α
2
o
l
d
Y
2
(23)
\alpha_1^{new}Y_1+\alpha_2^{new}Y_2=\alpha_1^{old}Y_1+\alpha_2^{old}Y_2\tag{23}
α1newY1+α2newY2=α1oldY1+α2oldY2(23)此时则可求出
α
1
n
e
w
\alpha_1^{new}
α1new。之后
α
1
n
e
w
\alpha_1^{new}
α1new根据
(
22
)
(22)
(22)式可得到
b
1
n
e
w
b_1^{new}
b1new,为了使模型更鲁棒可以求平均:
b
n
e
w
=
1
2
(
b
1
n
e
w
+
b
2
n
e
w
)
(24)
b^{new}=\frac12(b_1^{new}+b_2^{new})\tag{24}
bnew=21(b1new+b2new)(24)
SVM的总结与扩展
1.SVM看上去是在更新权值(
W
W
W)和偏置(
b
b
b),实际上是在更新拉格朗日乘子
α
\alpha
α,因为模型的权值和偏置都可由
α
\alpha
α表示。
2.从文中的推导过程可以知道,算法消耗计算资源太大,不适用于处理太多的样本数据;
3.本文说描述的SVM只适用于做分类任务,其实它还可以做回归任务,只不过做回归任务时需换一种思维去理解支持向量线间的距离;
4.在SVM的简介中了解到,SVM不可解决线性不可分任务,但是可以让它在一定条件或函数的基础去解决线性可分问题。比如加入正则项使“硬间隔”变为“软间隔”,或通过核函数使线性不可分问题变为线性可分问题。