之前看吴恩达的机器学习视频,以为自己已经理解了SVM,今天看《统计学习方法》重新学习SVM,才发现之前自己的理解都只浮于表面,实际上要复杂的多。接下来我将从五个方面讲述一下我对SVM的认识,文章将分为上下两篇,这一篇讲解硬间隔支持向量机、软间隔支持向量机和非线性支持向量机,下一篇机器学习(4)-支持向量机的理解与代码实现(下)介绍了SMO算法和代码实现。
硬间隔支持向量机
依然从三个方面理解支持向量机(1)模型(2)策略(3)算法
模型:在刚接触SVM的过程中,是不是觉得这个模型似曾相识,对就是感知机,如果对感知机还不太清楚的话可以看我之前的博文机器学习(3)-感知机的理解与代码实现,在感知机这个模型中我们需要求解一个超平面对输入数据进行划分,使得正样本的输出大于零,负样本的输出小于零,满足上述条件的超平面实际上有无穷多个。支持向量机就是在感知机的基础上,加了约束条件,希望所有点到这个超平面的距离都尽可能大,即以更高的置信度对样本点进行划分。同样对于给定的输入样本
x
x
x,输出可以表示为:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x+b)
f(x)=sign(w⋅x+b)
策略:我们先定义一些基本概念,我们定义
γ
i
^
=
y
i
(
w
⋅
x
i
+
b
)
\hat{\gamma_i}=y_i(w\cdot x_i+b)
γi^=yi(w⋅xi+b)为超平面
(
w
,
b
)
(w,b)
(w,b)关于样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的函数间隔,定义
γ
^
=
min
i
=
1
,
.
.
.
,
N
γ
i
^
\hat{\gamma}=\min\limits_{i=1,...,N}\hat{\gamma_i}
γ^=i=1,...,Nminγi^为超平面关于训练集中样本点函数间隔的最小值,定义
γ
i
=
y
i
(
w
⋅
x
i
+
b
)
∥
w
∥
{\gamma_i}=\frac{y_i(w\cdot x_i+b)}{\lVert w\rVert}
γi=∥w∥yi(w⋅xi+b)为样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)到超平面的几何间隔,定义
γ
=
min
i
=
1
,
.
.
.
,
N
γ
i
\gamma=\min\limits_{i=1,...,N}{\gamma_i}
γ=i=1,...,Nminγi为数据集中所有样本点到超平面的几何间隔(距离)的最小值,在模型中我们已经讲过希望所有点到超平面距离尽可能大,因此可以得到优化目标,即我们的学习策略:
max
w
,
b
γ
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
∥
w
∥
≥
γ
,
i
=
1
,
2
,
.
.
.
,
N
\max\limits_{w,b}\gamma\\s.t.\quad \frac{y_i(w\cdot x_i+b)}{\lVert w\rVert}\geq\gamma, \quad i=1,2,...,N
w,bmaxγs.t.∥w∥yi(w⋅xi+b)≥γ,i=1,2,...,N
我们再对优化目标做一些化简,从定义我们知道
γ
=
γ
^
∥
w
∥
\gamma=\frac{\hat\gamma}{\lVert w\rVert}
γ=∥w∥γ^,将这个关系代入上面的式子替换掉
γ
\gamma
γ,并且取
γ
^
=
1
\hat\gamma=1
γ^=1,得到:
max
w
,
b
1
∥
w
∥
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
N
\max\limits_{w,b}\frac{1}{\lVert w\rVert}\\s.t.\quad {y_i(w\cdot x_i+b)}\geq1, \quad i=1,2,...,N
w,bmax∥w∥1s.t.yi(w⋅xi+b)≥1,i=1,2,...,N
为什么可以取
γ
^
=
1
\hat\gamma=1
γ^=1呢?因为
γ
^
\hat\gamma
γ^的取值并不影响最优化问题的解,比如说我们将
w
w
w和
b
b
b等比例的增大
λ
\lambda
λ倍,这时函数间隔也会等比例的增加
λ
\lambda
λ倍,
γ
^
\hat\gamma
γ^也会变为
λ
γ
^
\lambda\hat\gamma
λγ^,改变
γ
^
\hat\gamma
γ^不会影响目标函数的优化,最优超平面也还是原来那个超平面,因此为了计算方便取
γ
^
=
1
\hat\gamma=1
γ^=1,上述问题问题等价于下面的约束最优化问题:
min
w
,
b
1
2
∥
w
∥
2
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
−
1
≥
0
,
i
=
1
,
2
,
.
.
.
,
N
\min\limits_{w,b}\frac{1}{2}{\lVert w\rVert}^2\\s.t.\quad {y_i(w\cdot x_i+b)}-1\geq0, \quad i=1,2,...,N
w,bmin21∥w∥2s.t.yi(w⋅xi+b)−1≥0,i=1,2,...,N
上面的变化也是为了计算方便
算法:得到待优化的目标函数,接下来就是考虑用什么算法得到参数的最优解。上面的优化问题时一个凸二次规划问题,我们通过求解对偶问题得到原问题的最优解。首先构建拉格朗日函数,引入拉格朗日乘子
α
i
≥
0
,
(
i
=
1
,
2
,
.
.
.
,
N
)
\alpha_i\geq0,(i=1,2,...,N)
αi≥0,(i=1,2,...,N),得到拉格朗日函数:
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
+
∑
i
=
1
N
α
i
(
1
−
y
i
(
w
⋅
x
i
+
b
)
)
L(w,b,\alpha)=\frac{1}{2}\lVert w\rVert^2+\sum_{i=1}^{N}\alpha_i(1-y_i(w\cdot x_i+b))
L(w,b,α)=21∥w∥2+i=1∑Nαi(1−yi(w⋅xi+b))
原问题的对偶问题为
max
α
min
w
,
b
L
(
w
,
b
,
α
)
\max\limits_{\alpha}\min\limits_{w,b}L(w,b,\alpha)
αmaxw,bminL(w,b,α),先求
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L(w,b,α)关于
w
,
b
w,b
w,b的极小值,对
w
,
b
w,b
w,b分别求导可到:
∂
L
(
w
,
b
,
α
)
∂
w
=
w
−
∑
i
=
1
N
α
i
y
i
x
i
=
0
∂
L
(
w
,
b
,
α
)
∂
b
=
−
∑
i
=
1
N
α
i
y
i
=
0
\frac{\partial L(w,b,\alpha)}{\partial w}=w-\sum_{i=1}^{N}\alpha_iy_ix_i=0\\\frac{\partial L(w,b,\alpha)}{\partial b}=-\sum_{i=1}^{N}\alpha_iy_i=0
∂w∂L(w,b,α)=w−i=1∑Nαiyixi=0∂b∂L(w,b,α)=−i=1∑Nαiyi=0
将上面的两个式子代入拉格朗日函数,化简可得到:
L
(
w
,
b
,
α
)
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
L(w,b,\alpha)=-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)}+\sum_{i=1}^{N}\alpha_i
L(w,b,α)=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
同时满足下面的约束条件
∑
i
=
1
N
α
i
y
i
=
0
α
i
≥
0
,
i
=
1
,
2
,
.
.
.
,
N
\sum_{i=1}^{N}\alpha_iy_i=0\\\alpha_i\geq0, i=1,2,...,N
i=1∑Nαiyi=0αi≥0,i=1,2,...,N
原问题就转化为求在满足约束条件时,求上面的朗格朗日函数的最大值,令
α
∗
,
w
∗
,
b
∗
\alpha^*,w^*,b^*
α∗,w∗,b∗为对偶问题
max
α
min
w
,
b
L
(
w
,
b
,
α
)
\max\limits_{\alpha}\min\limits_{w,b}L(w,b,\alpha)
αmaxw,bminL(w,b,α)的解,当KTT条件成立时,
α
∗
,
w
∗
,
b
∗
\alpha^*,w^*,b^*
α∗,w∗,b∗也是原问题的解。根据KKT条件我们可以得到:
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
w
=
∑
i
=
1
N
α
i
∗
y
i
x
i
b^*=y_j-\sum_{i=1}^{N}\alpha_i^*y_i(x_i\cdot x_j)\\w=\sum_{i=1}^{N}\alpha_i^*y_ix_i
b∗=yj−i=1∑Nαi∗yi(xi⋅xj)w=i=1∑Nαi∗yixi
j
j
j是从训练样本中任取一个满足
α
j
∗
>
0
\alpha_j^*>0
αj∗>0的样本的下标,可以看出
w
,
b
w,b
w,b的求解只和
α
i
∗
>
0
\alpha_i^*>0
αi∗>0的样本相关,这些样本决定了超平面,所以称作支持向量。
软间隔支持向量机
在实际运用中,很多情况数据都是无法完全线性可分的,如果只是存在少量噪声点或异常值,这时我们可以在约束条件中引入松弛变量
ξ
i
≥
0
\xi_i\geq0
ξi≥0,适当减小函数间隔的阈值,使原来没办法满足满足函数间隔大于等于一的异常点此时也可以满足约束条件:
y
i
(
w
⋅
x
i
+
b
)
≥
1
−
ξ
i
,
i
=
1
,
2
,
.
.
.
,
N
{y_i(w\cdot x_i+b)}\geq1-\xi_i, \quad i=1,2,...,N
yi(w⋅xi+b)≥1−ξi,i=1,2,...,N
但是为了在最大程度上保证超平面对数据的区分能力,不能让函数间隔无限制的小,即不能让
ξ
i
\xi_i
ξi特别大,因此我们对那些不满足约束条件的点添加一些惩罚,具体可以体现在优化函数上:
min
w
,
b
1
2
∥
w
∥
2
+
C
∑
i
=
1
N
ξ
i
\min\limits_{w,b}\frac{1}{2}{\lVert w\rVert}^2+C\sum_{i=1}^{N}\xi_i
w,bmin21∥w∥2+Ci=1∑Nξi
C
C
C为惩罚系数,在新的约束条件下,同样通过求解对偶问题的最优化来求解原问题,首先定义新的拉格朗日函数:
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
+
C
∑
i
=
1
N
ξ
i
+
∑
i
=
1
N
α
i
(
1
−
y
i
(
w
⋅
x
i
+
b
)
−
ξ
i
)
−
∑
i
=
1
N
μ
i
ξ
i
L(w,b,\alpha)=\frac{1}{2}\lVert w\rVert^2+C\sum_{i=1}^{N}\xi_i+\sum_{i=1}^{N}\alpha_i(1-y_i(w\cdot x_i+b)-\xi_i)-\sum_{i=1}^{N}\mu_i\xi_i
L(w,b,α)=21∥w∥2+Ci=1∑Nξi+i=1∑Nαi(1−yi(w⋅xi+b)−ξi)−i=1∑Nμiξi
对拉格朗日函数求关于
w
,
b
,
ξ
w,b,\xi
w,b,ξ的极小,令偏导等于零,在将得到的关系式代入拉格朗日函数化简后可得到:
L
(
w
,
b
,
α
)
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
L(w,b,\alpha)=-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)}+\sum_{i=1}^{N}\alpha_i
L(w,b,α)=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
则原问题转化为对偶问题:
max
α
L
(
w
,
b
,
α
)
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
0
≤
α
i
≤
C
,
i
=
1
,
2
,
.
.
.
,
N
\max_{\alpha}L(w,b,\alpha)=-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)}+\sum_{i=1}^{N}\alpha_i\\ s.t.\quad \sum_{i=1}^{N}\alpha_iy_i=0\\0\leq\alpha_i\leq C, i=1,2,...,N
αmaxL(w,b,α)=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαis.t.i=1∑Nαiyi=00≤αi≤C,i=1,2,...,N
同样在满足KKT条件时,我们可以通过对偶问题求得原问题的解:
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
j
∈
{
i
∣
0
<
α
i
∗
<
C
,
i
=
1
,
2
,
.
.
.
,
N
}
w
=
∑
i
=
1
N
α
i
∗
y
i
x
i
b^*=y_j-\sum_{i=1}^{N}\alpha_i^*y_i(x_i\cdot x_j) \quad j\in\{ i|0<\alpha_i^*<C , i=1,2,...,N\}\\w=\sum_{i=1}^{N}\alpha_i^*y_ix_i
b∗=yj−i=1∑Nαi∗yi(xi⋅xj)j∈{i∣0<αi∗<C,i=1,2,...,N}w=i=1∑Nαi∗yixi
非线性支持向量机
到目前位置,前面介绍的支持向量机都只能运用于线性可分问题,如果原来的问题在输入空间没有办法线性可分,是不是我们就不能用SVM来解决这个问题呢?当然不是,我们先把最优解代入我们的假设模型得到决策函数:
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
)
+
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
)
f(x)=sign(\sum_{i=1}^{N}\alpha_i^*y_i(x_i\cdot x)+y_j-\sum_{i=1}^{N}\alpha_i^*y_i(x_i\cdot x_j))
f(x)=sign(i=1∑Nαi∗yi(xi⋅x)+yj−i=1∑Nαi∗yi(xi⋅xj))
从上面我们可以看出输出只和
x
x
x和
x
i
x_i
xi的内积相关,这是在线性可分的情况下,对于线性不可分的情况,我们定义核函数:
K
(
x
,
z
)
=
ϕ
(
x
)
⋅
ϕ
(
z
)
K(x,z)=\phi(x)\cdot\phi(z)
K(x,z)=ϕ(x)⋅ϕ(z)
为函数
ϕ
(
x
)
\phi(x)
ϕ(x)和
ϕ
(
z
)
\phi(z)
ϕ(z)的点积,函数
ϕ
(
⋅
)
\phi(\sdot)
ϕ(⋅)为映射函数,将训练数据从输入空间映射到特征空间,我们不需要显示地定义映射函数,只需要找到一个核函数直接定义在特征空间的点积就可以了,则非线性支持向量机的决策函数表示为:
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
α
i
∗
y
i
K
(
x
i
,
x
)
+
y
j
−
∑
i
=
1
N
α
i
∗
y
i
K
(
x
i
,
x
j
)
)
f(x)=sign(\sum_{i=1}^{N}\alpha_i^*y_iK(x_i, x)+y_j-\sum_{i=1}^{N}\alpha_i^*y_iK(x_i, x_j))
f(x)=sign(i=1∑Nαi∗yiK(xi,x)+yj−i=1∑Nαi∗yiK(xi,xj))
核函数计算的其实是原来在特征空间的两个向量,先向高维做映射之后再做点积的结果,核函数的好处是我们不用显式的求得低维向高维做映射的函数的具体形式,因为我们最终需要的只是在高维对应的特征之间的点积,而之所以要做映射是因为这样可以将原本的线性不可分问题转化为线性可分问题。