SVM前人已经研究得很透了,在学习了惊呼——SVM支持向量机三重境界!之后,觉得有必要整理一下思路。
分类函数
SVM是使用一个分类超平面来分类的:
f
(
x
)
=
ω
T
x
+
b
f(x)=\omega^T x+b
f(x)=ωTx+b
其中
ω
\omega
ω为分类超平面的法向量。因此样本到分类超平面的距离(Margin)是有正负之分的。当样本到分类超平面的距离>0时,类别为1,距离<0时,类别为-1。距离是这样计算的:
d
(
x
i
)
=
ω
T
x
i
+
b
∣
∣
ω
∣
∣
d(x_i)=\frac{\omega^T x_i+b}{||\omega||}
d(xi)=∣∣ω∣∣ωTxi+b
如果想计算距离的绝对值,就可以利用样本的类别标签
y
i
y_i
yi(前提是假设所有样本zai
f
(
x
)
=
ω
T
x
+
b
f(x)=\omega^T x+b
f(x)=ωTx+b下都分类正确)
目标函数
目标是使间隔最大化,这隐含了一个最大化函数(最大化支持向量到分类超平面的间隔),和一个约束条件(所有样本都能正确分类,且所有样本到分类超平面的距离不大于间隔):
m
a
x
  
(
ω
T
x
m
+
b
)
∣
∣
ω
∣
∣
y
m
s
.
t
.
  
(
ω
T
x
i
+
b
)
∣
∣
ω
∣
∣
y
i
≥
(
ω
T
x
m
+
b
)
∣
∣
ω
∣
∣
y
m
  
,
i
=
1
,
2
,
.
.
.
,
M
max\,\, \frac{(\omega^T x_m+b)}{||\omega||}y_m \\ s.t. \,\, \frac{( \omega^T x_i+b)}{||\omega||}y_i \geq \frac{(\omega^T x_m+b)}{||\omega||}y_m\,\,,i=1,2,...,M
max∣∣ω∣∣(ωTxm+b)yms.t.∣∣ω∣∣(ωTxi+b)yi≥∣∣ω∣∣(ωTxm+b)ym,i=1,2,...,M
同时对
ω
\omega
ω和
b
b
b按比例缩放,不会改变分类超平面,如果我们假设
ω
\omega
ω和
b
b
b按比例缩放到一定程度,此时Margin,即
(
ω
T
x
m
+
b
)
y
m
(\omega^T x_m+b)y_m
(ωTxm+b)ym刚好为1,那么目标函数变为:
m
a
x
  
1
∣
∣
ω
∣
∣
s
.
t
.
  
(
ω
T
x
i
+
b
)
∣
∣
ω
∣
∣
y
i
≥
1
∣
∣
ω
∣
∣
  
,
i
=
1
,
2
,
.
.
.
,
M
max\,\, \frac{1}{||\omega||} \\ s.t. \,\, \frac{( \omega^T x_i+b)}{||\omega||}y_i \geq \frac{1}{||\omega||}\,\,,i=1,2,...,M
max∣∣ω∣∣1s.t.∣∣ω∣∣(ωTxi+b)yi≥∣∣ω∣∣1,i=1,2,...,M
约束条件左右两边的分母都可以去掉:
m
a
x
  
1
∣
∣
ω
∣
∣
s
.
t
.
  
(
ω
T
x
i
+
b
)
y
i
≥
1
  
,
i
=
1
,
2
,
.
.
.
,
M
max\,\, \frac{1}{||\omega||} \\ s.t. \,\, ( \omega^T x_i+b)y_i \geq 1\,\,,i=1,2,...,M
max∣∣ω∣∣1s.t.(ωTxi+b)yi≥1,i=1,2,...,M
目标函数$ \frac{1}{||\omega||}$求导数比较复杂,可以变为:
m
i
n
  
1
2
∣
∣
ω
∣
∣
2
s
.
t
.
  
(
ω
T
x
i
+
b
)
y
i
≥
1
  
,
i
=
1
,
2
,
.
.
.
,
M
min\,\, \frac{1}{2}||\omega||^2 \\ s.t. \,\, ( \omega^T x_i+b)y_i \geq 1\,\,,i=1,2,...,M
min21∣∣ω∣∣2s.t.(ωTxi+b)yi≥1,i=1,2,...,M
这就得到了SVM最终的目标函数啦。
求解过程
这是个带约束的最小化问题,可以用拉格朗日数乘法,先写出拉格朗日函数:
L
(
ω
,
b
,
α
)
=
1
2
∣
∣
ω
∣
∣
2
+
∑
i
=
1
M
α
i
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
  
,
i
=
1
,
2
,
.
.
.
,
M
,
α
i
≥
0
L(\omega,b,\alpha)= \frac{1}{2}||\omega||^2+\sum_{i=1}^M \alpha_i(1- ( \omega^T x_i+b)y_i )\,\,,i=1,2,...,M,\alpha_i\geq0
L(ω,b,α)=21∣∣ω∣∣2+i=1∑Mαi(1−(ωTxi+b)yi),i=1,2,...,M,αi≥0
当我不管
ω
\omega
ω和
b
b
b的时候,我令
α
i
\alpha_i
αi在
α
i
≥
0
\alpha_i\geq0
αi≥0的范围内变化,最大化
L
(
ω
,
b
,
α
)
L(\omega,b,\alpha)
L(ω,b,α):
H
(
ω
,
b
)
=
m
a
x
α
i
≥
0
  
L
(
ω
,
b
,
α
)
=
1
2
∣
∣
ω
∣
∣
2
H(\omega,b)=max_{\alpha_i\geq0} \,\, L(\omega,b,\alpha)= \frac{1}{2}||\omega||^2
H(ω,b)=maxαi≥0L(ω,b,α)=21∣∣ω∣∣2
此时
H
(
ω
,
b
)
H(\omega,b)
H(ω,b)就相当于原目标函数
1
2
∣
∣
ω
∣
∣
2
\frac{1}{2}||\omega||^2
21∣∣ω∣∣2。这是因为,对于所有样本来说,由于假设全部分类正确,那么一定有
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
<
0
(1- ( \omega^T x_i+b)y_i )<0
(1−(ωTxi+b)yi)<0,如果想让
α
i
\alpha_i
αi在
α
i
≥
0
\alpha_i\geq0
αi≥0的范围内最大化
L
(
ω
,
b
,
α
)
L(\omega,b,\alpha)
L(ω,b,α),那么
α
i
\alpha_i
αi一定会让
α
i
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
\alpha_i(1- ( \omega^T x_i+b)y_i )
αi(1−(ωTxi+b)yi)负得最少,负得最少的时候刚好就是0,此时
L
(
ω
,
b
,
α
)
L(\omega,b,\alpha)
L(ω,b,α)刚好等于
1
2
∣
∣
ω
∣
∣
2
\frac{1}{2}||\omega||^2
21∣∣ω∣∣2。
因此我们要最小化
1
2
∣
∣
ω
∣
∣
2
\frac{1}{2}||\omega||^2
21∣∣ω∣∣2就相当于:
m
i
n
ω
,
b
  
m
a
x
α
i
≥
0
  
L
(
ω
,
b
,
α
)
min_{\omega,b} \,\, max_{\alpha_i\geq0} \,\, L(\omega,b,\alpha)
minω,bmaxαi≥0L(ω,b,α)
这个式子就包括了SVM的目标函数和约束条件了,下一步我们要求解这个式子。
如果直接求解这个式子,首先要求内层的M个
α
i
\alpha_i
αi,求解非常复杂。为了简化求解,我们可以把上述式子转化为它的对偶问题,它的对偶问题相对较好求解,而且对偶问题能引入核函数,后面再详细解释核函数:
m
a
x
α
i
≥
0
  
m
i
n
ω
,
b
  
L
(
ω
,
b
,
α
)
max_{\alpha_i\geq0} \,\, min_{\omega,b} \,\,L(\omega,b,\alpha)
maxαi≥0minω,bL(ω,b,α)
下面用精确求解法求解此对偶问题。让
L
(
ω
,
b
,
α
)
L(\omega,b,\alpha)
L(ω,b,α)对
ω
\omega
ω和
b
b
b分别求导,让导数等于零:
d
L
(
ω
,
b
,
α
)
d
ω
=
d
(
1
2
∣
∣
ω
∣
∣
2
+
∑
i
=
1
M
α
i
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
)
d
ω
=
ω
−
∑
i
=
1
M
α
i
y
i
x
i
=
0
d
L
(
ω
,
b
,
α
)
d
b
=
∑
i
=
1
M
α
i
y
i
=
0
\begin{aligned} \frac{dL(\omega,b,\alpha)}{d\omega}= &\frac{d ( \frac{1}{2}||\omega||^2+\sum_{i=1}^M \alpha_i(1- ( \omega^T x_i+b)y_i ))}{d\omega} \\ =& \omega - \sum_{i=1}^M \alpha_iy_i x_i \\ =& 0 \\ \frac{dL(\omega,b,\alpha)}{d b}=& \sum_{i=1}^M \alpha_iy_i \\ =& 0 \end{aligned}
dωdL(ω,b,α)===dbdL(ω,b,α)==dωd(21∣∣ω∣∣2+∑i=1Mαi(1−(ωTxi+b)yi))ω−i=1∑Mαiyixi0i=1∑Mαiyi0
因此求得
ω
=
∑
i
=
1
M
α
i
y
i
x
i
∑
i
=
1
M
α
i
y
i
=
0
\begin{aligned} & \omega=\sum_{i=1}^M \alpha_iy_i x_i \\ & \sum_{i=1}^M \alpha_iy_i=0 \end{aligned}
ω=i=1∑Mαiyixii=1∑Mαiyi=0
把这两个式子代回到
L
(
ω
,
b
,
α
)
L(\omega,b,\alpha)
L(ω,b,α),得到:
L
(
ω
,
b
,
α
)
=
1
2
∣
∣
ω
∣
∣
2
+
∑
i
=
1
M
α
i
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
=
1
2
ω
T
ω
+
∑
i
=
1
M
α
i
−
∑
i
=
1
M
α
i
y
i
ω
T
x
i
−
∑
i
=
1
M
α
i
b
y
i
=
1
2
(
∑
i
=
1
M
α
i
y
i
x
i
T
)
(
∑
j
=
1
M
α
j
y
j
x
j
)
+
∑
i
=
1
M
α
i
−
∑
i
=
1
M
α
i
y
i
(
∑
j
=
1
M
α
j
y
j
x
j
)
x
i
−
0
=
∑
i
=
1
M
α
i
−
1
2
∑
i
=
1
M
∑
j
=
1
M
α
i
y
i
α
j
y
j
x
i
T
x
j
=
∑
i
=
1
M
α
i
−
1
2
∑
i
=
1
M
∑
j
=
1
M
α
i
y
i
α
j
y
j
<
x
i
,
x
j
>
\begin{aligned} L(\omega,b,\alpha)=& \frac{1}{2}||\omega||^2+\sum_{i=1}^M \alpha_i(1- ( \omega^T x_i+b)y_i ) \\ = & \frac{1}{2}\omega^T \omega+\sum_{i=1}^M \alpha_i-\sum_{i=1}^M \alpha_iy_i\omega^Tx_i-\sum_{i=1}^M \alpha_iby_i \\ =& \frac{1}{2} (\sum_{i=1}^M \alpha_iy_i x_i^T)(\sum_{j=1}^M \alpha_jy_j x_j )+\sum_{i=1}^M \alpha_i-\sum_{i=1}^M \alpha_iy_i(\sum_{j=1}^M \alpha_jy_j x_j)x_i-0 \\ =& \sum_{i=1}^M \alpha_i-\frac{1}{2} \sum_{i=1}^M\sum_{j=1}^M \alpha_iy_i \alpha_jy_j x_i^Tx_j \\ =& \sum_{i=1}^M \alpha_i-\frac{1}{2} \sum_{i=1}^M\sum_{j=1}^M \alpha_iy_i \alpha_jy_j < x_i,x_j> \end{aligned}
L(ω,b,α)=====21∣∣ω∣∣2+i=1∑Mαi(1−(ωTxi+b)yi)21ωTω+i=1∑Mαi−i=1∑MαiyiωTxi−i=1∑Mαibyi21(i=1∑MαiyixiT)(j=1∑Mαjyjxj)+i=1∑Mαi−i=1∑Mαiyi(j=1∑Mαjyjxj)xi−0i=1∑Mαi−21i=1∑Mj=1∑MαiyiαjyjxiTxji=1∑Mαi−21i=1∑Mj=1∑Mαiyiαjyj<xi,xj>
由于要求
α
i
≥
0
\alpha_i\geq0
αi≥0,因此得到下一步优化的目标函数和约束条件:
m
a
x
  
∑
i
=
1
M
α
i
−
1
2
∑
i
=
1
M
∑
j
=
1
M
α
i
y
i
α
j
y
j
<
x
i
,
x
j
>
s
.
t
.
  
α
i
≥
0
  
,
i
=
1
,
2
,
.
.
.
,
M
∑
i
=
1
M
α
i
y
i
=
0
max\,\, \sum_{i=1}^M \alpha_i-\frac{1}{2} \sum_{i=1}^M\sum_{j=1}^M \alpha_iy_i \alpha_jy_j < x_i,x_j> \\ s.t. \,\, \alpha_i\geq0\,\, ,i=1,2,...,M \\ \sum_{i=1}^M \alpha_iy_i=0
maxi=1∑Mαi−21i=1∑Mj=1∑Mαiyiαjyj<xi,xj>s.t.αi≥0,i=1,2,...,Mi=1∑Mαiyi=0
具体怎么求
α
i
\alpha_i
αi,要使用SMO算法。
据说只有支持向量的
α
i
\alpha_i
αi是不等于零的,其他样本对应的
α
i
\alpha_i
αi都等于零。因为对于其他样本,
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
(1- ( \omega^T x_i+b)y_i )
(1−(ωTxi+b)yi)都是小于零的,想要最大化
α
i
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
\alpha_i(1- ( \omega^T x_i+b)y_i )
αi(1−(ωTxi+b)yi),必须让它们的
α
i
\alpha_i
αi都等于零。对于支持向量,
(
1
−
(
ω
T
x
i
+
b
)
y
i
)
(1- ( \omega^T x_i+b)y_i )
(1−(ωTxi+b)yi)都是等于零的,因此
α
i
\alpha_i
αi是大于零的。
对偶形式下的分类函数
由于对偶问题给出了
ω
=
∑
i
=
1
M
α
i
y
i
x
i
\omega=\sum_{i=1}^M \alpha_iy_i x_i
ω=i=1∑Mαiyixi的结果,我们可以把这个结论代回去原来的分类函数,得到:
f
(
x
)
=
ω
T
x
+
b
=
∑
i
=
1
M
α
i
y
i
x
i
T
x
+
b
=
∑
i
=
1
M
α
i
y
i
<
x
i
,
x
>
+
b
\begin{aligned} f(x)= & \omega^T x+b \\ =& \sum_{i=1}^M \alpha_iy_i x_i^T x+b \\ =& \sum_{i=1}^M \alpha_iy_i <x_i, x>+b \end{aligned}
f(x)===ωTx+bi=1∑MαiyixiTx+bi=1∑Mαiyi<xi,x>+b
因此得到了对偶形式下的分类函数形式,由于只有支持向量的 α i \alpha_i αi是不等于零的,因此对于一个新样本 x x x,只要求支持向量与 x x x的内积,就可以预测其类别。
核函数
上面的分类函数可以写成:
f
(
x
)
=
∑
i
=
1
M
α
i
y
i
<
x
i
,
x
>
+
b
=
∑
i
=
1
M
α
i
y
i
ϕ
(
x
i
,
x
)
+
b
\begin{aligned} f(x)= & \sum_{i=1}^M \alpha_iy_i <x_i, x>+b \\ =& \sum_{i=1}^M \alpha_iy_i \phi (x_i, x)+b \end{aligned}
f(x)==i=1∑Mαiyi<xi,x>+bi=1∑Mαiyiϕ(xi,x)+b
其中
ϕ
(
x
i
,
x
)
\phi (x_i, x)
ϕ(xi,x)可以是
x
i
,
x
x_i, x
xi,x的内积,我们也可以用别的类似内积的函数替换,这就是核函数。它可以求两个样本的内积。
<
x
i
,
x
>
<x_i, x>
<xi,x>相当于线性核函数。它可以是更复杂的函数,把变量映射到非线性的更高维空间里,这样做的好处是,可以把线性不可分的样本映射到更高维的空间里,有可能就可分了。核函数还可以用低维的简单计算式子去近似复杂的高维内积计算,简化计算复杂度。常见的核函数有以下几种,分别是多项式核,高斯核,线性核:
ϕ
(
x
1
,
x
2
)
=
(
<
x
1
,
x
2
>
+
1
)
2
ϕ
(
x
1
,
x
2
)
=
e
−
∣
∣
x
1
−
x
2
∣
∣
2
2
σ
2
ϕ
(
x
1
,
x
2
)
=
(
<
x
1
,
x
2
>
)
\begin{aligned} &\phi(x_1,x_2)=(<x_1,x_2>+1)^2 \\ &\phi(x_1,x_2)=e^{-\frac{||x_1-x_2||^2}{2\sigma^2}} \\ &\phi(x_1,x_2)=(<x_1,x_2>) \end{aligned}
ϕ(x1,x2)=(<x1,x2>+1)2ϕ(x1,x2)=e−2σ2∣∣x1−x2∣∣2ϕ(x1,x2)=(<x1,x2>)
这里重点说一下高斯核,它是把原样本点映射到无线维的,因为
e
x
e^x
ex可以泰勒展开成无穷多项式,同理
e
−
∣
∣
x
1
−
x
2
∣
∣
2
2
σ
2
e^{- \frac {||x_1-x_2||^2} {2\sigma^2} }
e−2σ2∣∣x1−x2∣∣2也可以展开成无穷多项式,因此就是无穷维了。其中
σ
\sigma
σ较大时,两个不同的点经过映射后,成为高维空间上的同一个点(相互之间距离为0),这样一来,所有的样本点将被划分成同一个类,无法区分开来。
σ
\sigma
σ较小时,所有映射后的点彼此之间的距离都很大,这样一来每个样本点将被单独形成一个分类,容易过拟合。具体参考:关于支持向量机(SVM)的高斯核和惩罚因子C的理解(简单易懂)。
高斯核是映射到无穷维空间的原因参考。
引入松弛变量
上面的分析都是基于这么一个假设:“所有样本是线性可分的”,但实际情况远没有这么理想,虽然通过核函数可以一定程度上解决线性不可分的问题,但有时导致这个问题可能是离群值,此时用核函数未必能完全可分。由于SVM的分类超平面完全由那几个支持向量决定,因此它对离群值挺敏感的,万一其中一个支持向量是离群值,它对分类超平面影响很大。
为了解决这个问题,SVM允许数据点在一定程度上偏离一下超平面,具体来说,就是到超平面的距离可以小于1。因此目标函数和约束条件可以改为:
m
i
n
  
1
2
∣
∣
ω
∣
∣
2
+
C
∑
i
=
1
M
ξ
i
s
.
t
.
  
(
ω
T
x
i
+
b
)
y
i
≥
1
−
ξ
i
  
,
i
=
1
,
2
,
.
.
.
,
M
min\,\, \frac{1}{2}||\omega||^2+C \sum_{i=1}^M \xi_i \\ s.t. \,\, ( \omega^T x_i+b)y_i \geq 1- \xi_i\,\,,i=1,2,...,M
min21∣∣ω∣∣2+Ci=1∑Mξis.t.(ωTxi+b)yi≥1−ξi,i=1,2,...,M
其中
ξ
i
\xi_i
ξi是允许偏离的距离,称为松弛变量,
(
1
−
ξ
i
)
(1- \xi_i)
(1−ξi)是样本点到超平面的距离。把
C
∑
i
=
1
M
ξ
i
C \sum_{i=1}^M \xi_i
C∑i=1Mξi放入目标函数可以尽量减少这种偏离,
C
C
C是惩罚因子,这个惩罚类似于正则化惩罚项。
SVM多分类问题
例如对于5分类问题
one vs all:训练5个分类器,每个都是“类i or 非类i”。缺点是,存在分类重叠现象(超过一个分类器给出是)和不可分类现象(没有一个分类器给出是)
one vs one:训练
C
5
2
C_5^2
C52个分类器,对5个类两两组合,每个分类器都是“类i or 类j”。缺点是,存在分类重叠现象(但是可以通过投票决定),分类时调用
C
5
2
C_5^2
C52个分类器,太多了(但是可以通过构建有向无环图解决,DAGSVM)
参考此处
one vs all的损失函数,形式类似合页损失函数,假设样本的真实类别为
i
i
i,
g
a
p
i
gap_i
gapi是样本距离
i
i
i分类超平面的距离(有正负),这里希望
g
a
p
i
gap_i
gapi比
g
a
p
k
gap_k
gapk大,而且至少大
Δ
\Delta
Δ那么多,否则就会有损失
m
a
x
(
0
,
∑
k
!
=
i
Δ
−
(
g
a
p
i
−
g
a
p
k
)
)
max(0, \sum_{k!=i} \Delta-(gap_i-gap_k))
max(0,k!=i∑Δ−(gapi−gapk))
参考
另一个角度看SVM
软间隔最大化的目标(损失)函数还可以写为:
∑
i
=
1
N
[
1
−
y
i
∗
(
w
⋅
x
i
+
b
)
]
+
+
λ
∣
∣
w
∣
∣
2
\sum_{i=1}^N\left[1-y_i*(w\cdot x_i+b)\right]_++\lambda||w||^2
i=1∑N[1−yi∗(w⋅xi+b)]++λ∣∣w∣∣2
这里依然令间隔为1,如果样本分类正确但离分类超平面的距离小于1,那么此样本的损失为
1
−
间
隔
1-间隔
1−间隔,如果分类错误,那么此样本的损失为
1
+
间
隔
1+间隔
1+间隔,这里的间隔是有正负的。如下图所示,此损失函数成为合页损失函数(hinge损失),它不仅要求分类正确,还要求分类间隔要大于1,可以写成:
m
a
x
(
0
,
1
−
y
i
∗
(
w
⋅
x
i
+
b
)
)
max(0,1-y_i*(w\cdot x_i+b))
max(0,1−yi∗(w⋅xi+b))