支持向量机从入门到放肆(一)
1. 支持向量机基本原理
假设有训练数据
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1, y_1),(x_2, y_2),...,(x_N ,y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)},
y
i
∈
{
−
1
,
+
1
}
y_i\in\{-1,+1\}
yi∈{−1,+1}。最简单的分类想法就是找到一个超平面,将不同类别的样本分开。这样的超平面可能有很多,可以通过最大化超平面与样本之间的距离找到最优解。对于空间中一超平面
(
w
′
)
⊤
x
+
b
′
=
0
\left(\boldsymbol{w}^{\prime}\right)^{\top} \boldsymbol{x}+b^{\prime}=0
(w′)⊤x+b′=0。如果这个超平面可以正确分类两类样本,则对于任意样本
(
x
i
,
y
i
)
∈
D
\left(\boldsymbol{x}_{i}, y_{i}\right) \in D
(xi,yi)∈D:
{
(
w
′
)
⊤
x
i
+
b
′
>
0
,
y
i
=
+
1
(
w
′
)
⊤
x
i
+
b
′
<
0
,
y
i
=
−
1
\left\{\begin{array}{ll}{\left(\boldsymbol{w}^{\prime}\right)^{\top} \boldsymbol{x}_{i}+b^{\prime}>0,} & {y_{i}=+1} \\ {\left(\boldsymbol{w}^{\prime}\right)^{\top} \boldsymbol{x}_{i}+b^{\prime}<0,} & {y_{i}=-1}\end{array}\right.
{(w′)⊤xi+b′>0,(w′)⊤xi+b′<0,yi=+1yi=−1
根据几何间隔,上式中的0可以用一个极小的大于0的常数代替,这个极小的常数
ζ
\zeta
ζ表示距离超平面非常近:
{
(
w
′
)
⊤
x
i
+
b
′
≥
+
ζ
,
y
i
=
+
1
(
w
′
)
⊤
x
i
+
b
′
≤
−
ζ
,
y
i
=
−
1
\left\{\begin{array}{ll}{\left(\boldsymbol{w}^{\prime}\right)^{\top} \boldsymbol{x}_{i}+b^{\prime} \geq+\zeta,} & {y_{i}=+1} \\ {\left(\boldsymbol{w}^{\prime}\right)^{\top} \boldsymbol{x}_{i}+b^{\prime} \leq-\zeta,} & {y_{i}=-1}\end{array}\right.
{(w′)⊤xi+b′≥+ζ,(w′)⊤xi+b′≤−ζ,yi=+1yi=−1
前后同时除以
ζ
\zeta
ζ,再次修正上式:
{
(
1
ζ
w
′
)
⊤
x
i
+
b
′
ζ
≥
+
1
,
y
i
=
+
1
(
1
ζ
w
′
)
⊤
x
i
+
b
′
ζ
≤
−
1
,
y
i
=
−
1
\left\{\begin{array}{ll}{\left(\frac{1}{\zeta} \boldsymbol{w}^{\prime}\right)^{\top} \boldsymbol{x}_{i}+\frac{b^{\prime}}{\zeta} \geq+1,} & {y_{i}=+1} \\ {\left(\frac{1}{\zeta} \boldsymbol{w}^{\prime}\right)^{\top} \boldsymbol{x}_{i}+\frac{b^{\prime}}{\zeta} \leq-1,} & {y_{i}=-1}\end{array}\right.
⎩⎪⎨⎪⎧(ζ1w′)⊤xi+ζb′≥+1,(ζ1w′)⊤xi+ζb′≤−1,yi=+1yi=−1
令
w
=
1
ζ
w
′
,
b
=
b
′
ζ
w=\frac{1}{\zeta} w^{\prime}, b=\frac{b^{\prime}}{\zeta}
w=ζ1w′,b=ζb′,有:
{
w
T
x
i
+
b
⩾
+
1
,
y
i
=
+
1
w
T
x
i
+
b
⩽
−
1
,
y
i
=
−
1
\left\{\begin{array}{ll}{\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \geqslant+1,} & {y_{i}=+1} \\ {\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \leqslant-1,} & {y_{i}=-1}\end{array}\right.
{wTxi+b⩾+1,wTxi+b⩽−1,yi=+1yi=−1
已知点到平面的距离为
r
=
∣
w
T
x
+
b
∣
∥
w
∥
r=\frac{\left|\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b\right|}{\|\boldsymbol{w}\|}
r=∥w∥∣wTx+b∣。不难理解SVM的最优解就是使得两个异类的样本距离超平面的距离之和
r
=
2
∥
w
∥
r=\frac{2}{\|\boldsymbol{w}\|}
r=∥w∥2最大的超平面。这个问题就变成了如下问题:
max
w
,
b
2
∥
w
∥
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
\begin{array}{l}{\max _{\boldsymbol{w}, b} \frac{2}{\|\boldsymbol{w}\|}} \\ {\text { s.t. } y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m}\end{array}
maxw,b∥w∥2 s.t. yi(wTxi+b)⩾1,i=1,2,…,m
最大化
2
∥
w
∥
\frac{2}{\|\boldsymbol{w}\|}
∥w∥2等价于最小化
∥
w
∥
2
\|w\|^2
∥w∥2,即上式可以写为:
min
w
,
b
1
2
∥
w
∥
2
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
\begin{array}{l}{\min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2}} \\ {\text { s.t. } y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m}\end{array}
minw,b21∥w∥2 s.t. yi(wTxi+b)⩾1,i=1,2,…,m
即在满足
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
{y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m}
yi(wTxi+b)⩾1,i=1,2,…,m这个条件的情况下,找到合适的
w
\boldsymbol{w}
w和
b
b
b使得
1
2
∥
w
∥
\frac{1}{2}\|\boldsymbol{w}\|
21∥w∥最小。
2. 求解SVM的对偶问题
在上一节中,SVM的求解问题已经确定,现在需要运用数学方法来求解合适的
w
\boldsymbol{w}
w和
b
b
b。这里我们采用更高效的拉格朗日乘子法。先将SVM求解问题可以写成:
min
w
,
b
1
2
∥
w
∥
2
s.t.
1
−
y
i
(
w
T
x
i
+
b
)
≤
0
\begin{array}{l}{\min _{\boldsymbol{w},b}\frac{1}{2}\|\boldsymbol{w}\|^2}\\{\text{s.t. }1-y_i\left(\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}_i+b\right)\leq0}\end{array}
minw,b21∥w∥2s.t. 1−yi(wTxi+b)≤0
用拉格朗日乘子法求解即:
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
⊤
x
i
+
b
)
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}+\sum_{i=1}^{m} \alpha_{i}\left(1-y_{i}\left(\boldsymbol{w}^{\top} \boldsymbol{x}_{i}+b\right)\right)
L(w,b,α)=21∥w∥2+i=1∑mαi(1−yi(w⊤xi+b))
先对上式变形:
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
=
1
2
∥
w
∥
2
+
∑
i
=
1
m
(
α
i
−
α
i
y
i
w
T
x
i
−
α
i
y
i
b
)
=
1
2
w
T
w
+
∑
i
=
1
m
α
i
−
∑
i
=
1
m
α
i
y
i
w
T
x
i
−
∑
i
=
1
m
α
i
y
i
b
\begin{aligned} L(\boldsymbol{w}, b, \boldsymbol{\alpha}) &=\frac{1}{2}\|\boldsymbol{w}\|^2+\sum_{i=1}^m \alpha_i\left(1-y_i\left(\boldsymbol{w}^{T}\boldsymbol{x}_i+b\right)\right)\\ &=\frac{1}{2}\|\boldsymbol{w}\|^2+\sum_{i=1}^m\left(\alpha_i-\alpha_iy_i\boldsymbol{w}^{T}\boldsymbol{x}_i-\alpha_iy_ib\right)\\ &=\frac{1}{2}\boldsymbol{w}^{T}\boldsymbol{w}+\sum_{i=1}^m\alpha_i-\sum_{i=1}^m\alpha_iy_i\boldsymbol{w}^{T}\boldsymbol{x}_i-\sum_{i=1}^m\alpha_iy_ib \end{aligned}
L(w,b,α)=21∥w∥2+i=1∑mαi(1−yi(wTxi+b))=21∥w∥2+i=1∑m(αi−αiyiwTxi−αiyib)=21wTw+i=1∑mαi−i=1∑mαiyiwTxi−i=1∑mαiyib
对上式中
w
\boldsymbol{w}
w和
b
b
b求导,使导数为0,得到:
∂
L
∂
w
=
1
2
×
2
×
w
+
0
−
∑
i
=
1
m
α
i
y
i
x
i
−
0
=
0
⟹
w
=
∑
i
=
1
m
α
i
y
i
x
i
∂
L
∂
b
=
0
+
0
−
0
−
∑
i
=
1
m
α
i
y
i
=
0
⟹
∑
i
=
1
m
α
i
y
i
=
0
\begin{aligned}\frac{\partial{L}}{\partial{\boldsymbol{w}}}=\frac{1}{2}\times2\times\boldsymbol{w}+0-\sum_{i=1}^{m}\alpha_iy_i\boldsymbol{x}_i-0=0 &\Longrightarrow \boldsymbol{w}=\sum_{i=1}^{m}\alpha_iy_i\boldsymbol{x}_i\\ \frac{\partial{L}}{\partial{b}}=0+0-0-\sum_{i=1}^{m}\alpha_iy_i=0&\Longrightarrow\sum_{i=1}^{m}\alpha_iy_i=0 \end{aligned}
∂w∂L=21×2×w+0−i=1∑mαiyixi−0=0∂b∂L=0+0−0−i=1∑mαiyi=0⟹w=i=1∑mαiyixi⟹i=1∑mαiyi=0
将
w
=
∑
i
=
1
m
α
i
y
i
x
i
\boldsymbol{w}=\sum_{i=1}^{m}\alpha_iy_i\boldsymbol{x}_i
w=∑i=1mαiyixi和
∑
i
=
i
m
α
i
y
i
=
0
\sum_{i=i}^{m}\alpha_iy_i=0
∑i=imαiyi=0代入
L
(
w
,
b
,
α
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})
L(w,b,α),则有:
L
(
w
,
b
,
α
)
=
1
2
w
T
w
+
∑
i
=
1
m
α
i
−
w
T
w
+
0
=
∑
i
=
1
m
α
i
−
1
2
w
T
w
=
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
\begin{aligned} L(\boldsymbol{w},b,\boldsymbol{\alpha})&=\frac{1}{2}\boldsymbol{w}^{T}\boldsymbol{w}+\sum_{i=1}^m\alpha_i-\boldsymbol{w}^{T}\boldsymbol{w}+0\\ &=\sum_{i=1}^m\alpha_i-\frac{1}{2}\boldsymbol{w}^{T}\boldsymbol{w}\\ &=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\boldsymbol{x}_i^{T}\boldsymbol{x}_j \end{aligned}
L(w,b,α)=21wTw+i=1∑mαi−wTw+0=i=1∑mαi−21wTw=i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj
即现在寻找合适的
α
\boldsymbol{\alpha}
α来最大化
L
(
w
,
b
,
α
)
L(\boldsymbol{w},b,\boldsymbol{\alpha})
L(w,b,α),即:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
s.t.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
m
\begin{aligned} \max_{\boldsymbol{\alpha}}&\text{ }\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\boldsymbol{x}_i^{T}\boldsymbol{x}_j\\ &\text{s.t. }\sum_{i=1}^{m}\alpha_iy_i=0,\\ &\alpha_i\geqslant0,i=1,2,...,m \end{aligned}
αmax i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxjs.t. i=1∑mαiyi=0,αi⩾0,i=1,2,...,m
上述问题是二次规划问题,可以使用二次规划算分来求解,但是这样求解的复杂度正比与训练样本的数量。实际上有更快速的算法,这里介绍使用序列最小化优化算法(Sequential Minimal Optimization, SMO)算法。SMO的基本思路是先固定
α
i
\alpha_i
αi以外其他参数,找到目标函数在
α
i
\alpha_i
αi上的最值。但是由于约束条件
∑
i
=
1
m
α
i
y
i
=
0
\sum_{i=1}^{m}\alpha_iy_i=0
∑i=1mαiyi=0存在,
α
i
\alpha_i
αi可以用别的参数表示出,因此先选择两个参数
α
i
、
α
j
\alpha_i、\alpha_j
αi、αj,固定其他参数,找到在参数
α
i
、
α
j
\alpha_i、\alpha_j
αi、αj上的最大值。
由于约束条件
∑
i
=
1
m
α
i
y
i
=
0
\sum_{i=1}^{m}\alpha_iy_i=0
∑i=1mαiyi=0,且固定了其他参数,有:
α
i
y
i
+
α
j
y
j
=
c
,
α
i
⩾
0
,
α
j
⩾
0
\alpha_iy_i+\alpha_jy_j=c,\alpha_i\geqslant0,\alpha_j\geqslant0
αiyi+αjyj=c,αi⩾0,αj⩾0
上式中可以小区
α
j
\alpha_j
αj,代入原问题,则可以得到
α
i
\alpha_i
αi和
α
j
\alpha_j
αj的解。这样不断选取两个参数进行优化,直到收敛可得到所有
α
\alpha
α的解。
对于任何支持向量
(
x
s
,
y
s
)
(\boldsymbol{x}_s,y_s)
(xs,ys)都有:
y
s
(
∑
i
∈
S
α
i
y
i
x
i
T
x
j
+
b
)
=
1
y_s\left(\sum_{i\in S}\alpha_iy_i\boldsymbol{x}_i^{T}\boldsymbol{x}_j+b\right)=1
ys(i∈S∑αiyixiTxj+b)=1
其中,
S
S
S是所有支持向量的集合。因此,代入任何一个支持向量就可以求得
b
b
b。实际操作中,常用更鲁棒的方法:使用所有支持向量的平均值来求解
b
b
b,即:
b
=
1
∣
S
∣
∑
s
∈
S
(
1
y
s
−
∑
i
∈
S
α
i
y
i
x
i
T
x
j
)
b=\frac{1}{|S|}\sum_{s \in S}\left(\frac{1}{y_s}-\sum_{i \in S}\alpha_iy_i\boldsymbol{x}_i^{T}\boldsymbol{x}_j\right)
b=∣S∣1s∈S∑(ys1−i∈S∑αiyixiTxj)
至此,最基本的支持向量机原理及求解过程已经叙述完毕。
3. 核函数
上述过程都默认能找到一个超平面,可以线性的对所有样本分类。但是在实际情况中,线性分类器往往不能实现正确分类。这时,可以将样本映射到高维的特征空间,在特征空间可以实现线性划分。用
ϕ
(
x
)
\phi(\boldsymbol{x})
ϕ(x)表示样本
x
\boldsymbol{x}
x映射后的特征向量。则支持向量机待解决的问题转化为:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
ϕ
(
x
i
)
T
ϕ
(
x
j
)
s.t.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
m
\begin{aligned} \max_{\boldsymbol{\alpha}}&\text{ }\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\phi(\boldsymbol{x}_i)^{T}\phi(\boldsymbol{x}_j)\\ &\text{s.t. }\sum_{i=1}^{m}\alpha_iy_i=0,\\ &\alpha_i\geqslant0,i=1,2,...,m \end{aligned}
αmax i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjϕ(xi)Tϕ(xj)s.t. i=1∑mαiyi=0,αi⩾0,i=1,2,...,m
上式中
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\phi(\boldsymbol{x}_i)^{T}\phi(\boldsymbol{x}_j)
ϕ(xi)Tϕ(xj)是样本
x
i
\boldsymbol{x}_i
xi和
x
j
\boldsymbol{x}_j
xj的内积,如果样本维度过高,计算量会很大。为了避免这个问题,引入核函数
κ
(
⋅
,
⋅
)
\kappa(·,·)
κ(⋅,⋅)使得样本
x
i
\boldsymbol{x}_i
xi和
x
j
\boldsymbol{x}_j
xj的内积等于核函数的结果,即:
κ
(
x
i
,
x
j
)
=
⟨
ϕ
(
x
i
)
,
ϕ
(
x
j
)
⟩
=
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\kappa(\boldsymbol{x}_i,\boldsymbol{x}_j)=\langle \phi(\boldsymbol{x}_i),\phi(\boldsymbol{x}_j) \rangle=\phi(\boldsymbol{x}_i)^{T}\phi(\boldsymbol{x}_j)
κ(xi,xj)=⟨ϕ(xi),ϕ(xj)⟩=ϕ(xi)Tϕ(xj)
这样就简化了计算。因此支持向量机的求解变为:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
κ
(
x
i
,
x
j
)
s.t.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
m
\begin{aligned} \max_{\boldsymbol{\alpha}}&\text{ }\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\kappa (\boldsymbol{x}_i,\boldsymbol{x}_j)\\ &\text{s.t. }\sum_{i=1}^{m}\alpha_iy_i=0,\\ &\alpha_i\geqslant0,i=1,2,...,m \end{aligned}
αmax i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjκ(xi,xj)s.t. i=1∑mαiyi=0,αi⩾0,i=1,2,...,m
即要解决非线性划分问题,只需要找到合适的特征变换,并找到这个变换对应的核函数就可以求解分线性支持向量机。事实上,只要一个对称的函数所对应的核矩阵是半正定的,它就可以当成核函数使用,且总能找到一个对应的映射
ϕ
\phi
ϕ。
常用的核函数有:
名称 | 表达式 | 参数 |
---|---|---|
线性核 | κ ( x i , x j ) = x i T x j \kappa (\boldsymbol{x}_i,\boldsymbol{x}_j)=\boldsymbol{x}_i^{T}\boldsymbol{x}_j κ(xi,xj)=xiTxj | |
多项式核 | κ ( x i , x j ) = ( x i T x j ) d \kappa (\boldsymbol{x}_i,\boldsymbol{x}_j)=(\boldsymbol{x}_i^{T}\boldsymbol{x}_j)^d κ(xi,xj)=(xiTxj)d | d ⩾ 1 d\geqslant1 d⩾1为多项式的次数 |
高斯核 | κ ( x i , x j ) = exp ( − ∥ x i − x j ∥ 2 2 σ 2 ) \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\exp \left(-\frac{\left\|\boldsymbol{x}_{i}-\boldsymbol{x}_{j}\right\|^{2}}{2 \sigma^{2}}\right) κ(xi,xj)=exp(−2σ2∥xi−xj∥2) | σ > 0 \sigma>0 σ>0为高斯核的贷款 |
拉普拉斯核 | κ ( x i , x j ) = exp ( − ∥ x i − x j ∥ σ ) \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\exp \left(-\frac{\left\|\boldsymbol{x}_{i}-\boldsymbol{x}_{j}\right\|}{\sigma}\right) κ(xi,xj)=exp(−σ∥xi−xj∥) | σ > 0 \sigma>0 σ>0 |
Sigmoid核 | κ ( x i , x j ) = tanh ( β x i T x j + θ ) \kappa (\boldsymbol{x}_i,\boldsymbol{x}_j)=\text{tanh}(\beta\boldsymbol{x}_i^{T}\boldsymbol{x}_j+\theta) κ(xi,xj)=tanh(βxiTxj+θ) | tanh为双曲正切函数, β > 0 , θ < 0 \beta>0,\theta<0 β>0,θ<0 |
另外,将核函数 κ 1 , κ 2 \kappa_1,\kappa_2 κ1,κ2进行下列组合之后仍是核函数:
- 线性组合 γ κ 1 + γ 2 κ 2 \gamma\kappa_1+\gamma_2\kappa_2 γκ1+γ2κ2仍为核函数
- 核函数的直积 κ 1 ⨂ κ 2 ( x , z ) = κ 1 ( x , z ) κ 2 ( x , z ) \kappa_1\bigotimes\kappa_2(\boldsymbol{x},\boldsymbol{z})=\kappa_1(\boldsymbol{x},\boldsymbol{z})\kappa_2(\boldsymbol{x},\boldsymbol{z}) κ1⨂κ2(x,z)=κ1(x,z)κ2(x,z)仍为核函数
- 对于任意函数 g ( x ) g(\boldsymbol{x}) g(x), κ ( x , z ) = g ( x ) κ 1 ( x , z ) g ( z ) \kappa(\boldsymbol{x},\boldsymbol{z})=g(\boldsymbol{x})\kappa_1(\boldsymbol{x},\boldsymbol{z})g(\boldsymbol{z}) κ(x,z)=g(x)κ1(x,z)g(z)仍是核函数
吼吼,今天先到这里。后续会更新。