前言
自己最近在看周志华的《机器学习》,想要和大家一起分享自己的学习过程。
这是自己第一次写博客,排版什么的可能会有不少问题,希望大家多多包涵。
支持向量机
背景
在支持向量机之前,就已经接触过了逻辑回归。在逻辑回归中,代价函数与每个点的值都相关,通过一个激活函数来决定这个点是否被良好分类。所以,最终得到的直线将和样本中所有的点有关。
而在支持向量机中,思想十分简单,就是找到在两类样本点中,距离最近的,然后取他们的中间线,来作为分界线。之前在看吴恩达老师的”机器学习“的时候,就感觉支持向量机的思想十分简单,但是在读了西瓜书之后,才明白,原来最重要的是思想背后的实现。尤其是通过拉格朗日乘子法求对偶问题和SMO算法求出最优解,都是支持向量机问题中的精髓。
间隔和支持向量
首先,可以用一个线性方程来描述这个划分超平面:
ω
T
x
+
b
=
0.
\boldsymbol\omega^{\mathbf T}\boldsymbol x+b=0.
ωTx+b=0.
这个时候,空间中任意点x到这个平面的距离可以写成:
r
=
∣
ω
T
x
+
b
∣
∣
∣
ω
∣
∣
.
r=\frac{\left|\boldsymbol\omega^{\mathbf T}\boldsymbol x+b\right|}{\left|\left|\boldsymbol\omega\right|\right|}.
r=∣∣ω∣∣∣∣ωTx+b∣∣.
这时候假设这个超平面
(
ω
,
b
)
(\boldsymbol\omega,b)
(ω,b),能够将样本正确分类,也就是说对于任意
(
x
i
,
y
i
)
∈
D
(\boldsymbol x^i,y^i)\in D
(xi,yi)∈D,都能得到,若yi=+1,则有
ω
T
x
i
+
b
>
0
\boldsymbol\omega^T{\boldsymbol x}_i+b>0
ωTxi+b>0;若yi=-1,则有
ω
T
x
i
+
b
<
0
\boldsymbol\omega^T{\boldsymbol x}_i+b<0
ωTxi+b<0。通过缩放变换,就可以使其满足:
{
ω
T
x
+
b
≥
+
1
,
y
i
=
+
1
;
ω
T
x
+
b
≤
−
1
,
y
i
=
−
1
;
\left\{\begin{array}{l}\omega^Tx+b\geq+1,\;\;y_i=+1;\\\omega^Tx+b\leq-1,\;\;y_i=-1;\end{array}\right.
{ωTx+b≥+1,yi=+1;ωTx+b≤−1,yi=−1;
使等号成立的训练样本点叫做”支持向量“,这个时候的距离之和为:
γ
=
2
∥
ω
∥
\gamma=\frac2{\parallel\boldsymbol\omega\parallel}
γ=∥ω∥2
它就被称为”间隔“。
所以,为了找到一个最大间隔来作为划分超平面,这个时候需要来寻找合适的参数w和b的值来使得”间隔”最大化,即:
m
a
x
ω
,
b
2
∥
ω
∥
s
.
t
.
y
i
(
ω
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
⋯
,
m
\underset{\omega,b}{max}\frac2{\parallel\omega\parallel}\\s.t.\;\;y_i(\omega^Tx_i+b)\geq1,\;\;i=1,2,\cdots,m
ω,bmax∥ω∥2s.t.yi(ωTxi+b)≥1,i=1,2,⋯,m
为了计算方便,就需要等价为:
m
a
x
1
2
ω
,
b
∥
ω
∥
2
s
.
t
.
y
i
(
ω
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
⋯
,
m
\underset{\omega,b}{max\frac12}\parallel\omega\parallel^2\\s.t.\;\;y_i(\omega^Tx_i+b)\geq1,\;\;i=1,2,\cdots,m
ω,bmax21∥ω∥2s.t.yi(ωTxi+b)≥1,i=1,2,⋯,m
这就得到了支持向量机的基本型了。
核函数与非线性支持向量机
为了在后面的优化计算过程中得到通式,这里就像介绍核函数。可以看到,采用上述方法,只能对线性可分的变量进行划分,这样的支持向量机叫做线性可分支持向量机,而对于线性不可分的样本,可以通过将样本从原始空间映射到更高维的特征空间,使其在这个空间内线性可分。这本书中讲到,如果原始空间是有限维,那么一定存在一个高位特征空间使样本可分。我们可以假设这个映射函数为
ϕ
(
x
)
\phi(x)
ϕ(x),此时的模型就可以表示为:
f
(
x
)
=
ω
T
ϕ
(
x
)
+
b
f(x)=\omega^T\phi(x)+b
f(x)=ωTϕ(x)+b
此时我们的优化目标就变为:
m
a
x
1
2
ω
,
b
∥
ω
∥
2
s
.
t
.
y
i
(
ω
T
ϕ
(
x
i
)
+
b
)
≥
1
,
i
=
1
,
2
,
⋯
,
m
\underset{\omega,b}{max\;\frac12}\parallel\omega\parallel^2\\s.t.\;\;y_i(\omega^T\phi(x_i)+b)\geq1,\;\;i=1,2,\cdots,m
ω,bmax21∥ω∥2s.t.yi(ωTϕ(xi)+b)≥1,i=1,2,⋯,m
在后续计算中,会涉及到
ϕ
(
x
i
)
T
ϕ
(
x
i
)
\phi{(x_i)}^T\phi(x_i)
ϕ(xi)Tϕ(xi),我们就定义一个函数:
K
i
j
=
κ
(
x
i
,
x
j
)
=
ϕ
(
x
i
)
ϕ
(
x
j
)
K_{ij}=\kappa(x_i,x_j)=\phi(x_i)\phi(x_j)
Kij=κ(xi,xj)=ϕ(xi)ϕ(xj)
而,
κ
(
⋅
,
⋅
)
\kappa(\cdot,\cdot)
κ(⋅,⋅)就是“核函数”。
常用的核函数有:
通过拉格朗日乘子法进行优化
对于上述问题,可以通过拉格朗日乘子法进行优化(具体拉格朗日乘子法和自行百度),求出其对偶问题,添加拉格朗日乘子
α
i
≥
0
\alpha_i\geq0
αi≥0,那么可以将拉格朗日函数写为:
L
(
ω
,
b
,
α
)
=
1
2
∥
ω
∥
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
ω
T
ϕ
(
x
i
)
+
b
)
)
L(\omega,b,\alpha)=\frac12\parallel\omega\parallel^2+\sum_{i=1}^m\alpha_i(1-y_i(\omega^T\phi(x_i)+b))
L(ω,b,α)=21∥ω∥2+i=1∑mαi(1−yi(ωTϕ(xi)+b))
这个时候对w和b求偏导并置0,可以得到:
ω
=
∑
i
=
1
m
α
i
y
i
ϕ
(
x
i
)
∑
i
=
1
m
α
i
y
i
=
0
\omega=\sum_{i=1}^m\alpha_iy_i\phi(x_i)\\\sum_{i=1}^m\alpha_iy_i=0
ω=i=1∑mαiyiϕ(xi)i=1∑mαiyi=0
将这个两个式子代入上式,就可以得到:
L
(
ω
,
b
,
α
)
=
1
2
∥
ω
∥
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
ω
T
ϕ
(
x
i
)
+
b
)
)
=
1
2
∑
i
=
1
m
α
i
y
i
ϕ
(
x
i
)
∑
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
)
)
T
ϕ
(
x
i
)
−
∑
i
=
1
m
α
i
y
i
b
(
c
o
n
s
t
)
=
∑
i
=
1
m
α
i
−
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
ϕ
(
x
i
)
T
ϕ
(
x
j
)
=
∑
i
=
1
m
α
i
−
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
K
i
j
L(\omega,b,\alpha)=\frac12\parallel\omega\parallel^2+\sum_{i=1}^m\alpha_i(1-y_i(\omega^T\phi(x_i)+b))\\=\frac12\sum_{i=1}^m\alpha_iy_i\phi(x_i)\sum_{j=1}^m\alpha_jy_j\phi(x_j)+\sum_{i=1}^m\alpha_i-\sum_{i=1}^m\alpha_iy_i(\sum_{j=1}^m\alpha_jy_j\phi{(x_j))}^T\phi(x_i)-\sum_{i=1}^m\alpha_iy_ib\;\;(const)\\=\sum_{i=1}^m\alpha_i-\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\phi{(x_i)}^T\phi(x_j)\\=\sum_{i=1}^m\alpha_i-\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jK_{ij}
L(ω,b,α)=21∥ω∥2+i=1∑mαi(1−yi(ωTϕ(xi)+b))=21i=1∑mαiyiϕ(xi)j=1∑mαjyjϕ(xj)+i=1∑mαi−i=1∑mαiyi(j=1∑mαjyjϕ(xj))Tϕ(xi)−i=1∑mαiyib(const)=i=1∑mαi−i=1∑mj=1∑mαiαjyiyjϕ(xi)Tϕ(xj)=i=1∑mαi−i=1∑mj=1∑mαiαjyiyjKij
从而对偶问题为:
m
a
x
α
∑
i
=
1
m
α
i
−
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
K
i
j
s
.
t
.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
≥
0
,
i
=
1
,
2
,
…
,
m
.
\underset\alpha{max}\;\sum_{i=1}^m\alpha_i-\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jK_{ij}\\s.t.\;\sum_{i=1}^m\alpha_iy_i=0,\\\alpha_i\geq0,\;\;i=1,2,\dots,m.
αmaxi=1∑mαi−i=1∑mj=1∑mαiαjyiyjKijs.t.i=1∑mαiyi=0,αi≥0,i=1,2,…,m.
此时,我们通过求对偶问题,将一个三个参数的优化问题,转化成了仅有
α
\alpha
α的优化问题,并且能够解得
α
\alpha
α的最优值,
ω
\omega
ω和b的最优值使用KKT条件来求得:
{
α
i
⩾
0
y
i
f
(
x
i
)
−
1
⩾
0
α
i
(
y
i
f
(
x
i
)
−
1
)
=
0
\left\{\begin{array}{c}\alpha_i\geqslant0\\y_if(x_i)-1\geqslant0\\\alpha_i(y_if(x_i)-1)=0\end{array}\right.
⎩⎨⎧αi⩾0yif(xi)−1⩾0αi(yif(xi)−1)=0
将w的值代入原函数,此时原函数就变成了:
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
κ
(
x
,
x
i
)
+
b
f(x)=\sum_{i=1}^m\alpha_iy_i\kappa(x,x_i)+b
f(x)=i=1∑mαiyiκ(x,xi)+b
SMO算法求解最优解
在上述对偶问题中,我们需要找到
α
i
\alpha_i
αi的最优值,来使目标函数最大,这是一个二次规划问题,但是如果使用常规二次规划算法,开销将非常大。这时候就介绍了一种很高效的算法,SMO算法,由Platt在1998年提出来。
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
\alpha_i
αi的值也可被导出。所以,SMO算法每次选择两个变量
α
i
\alpha_i
αi和
α
j
\alpha_j
αj,并固定其他参数,然后不断求出所有
α
i
\alpha_i
αi的值。(SMO算法这块,西瓜书上讲的并不详细,我又参考了李航的《统计学习方法》,来将这块补充完整)这两个变量的选择使用的是启发式算法,一个是违反KKT条件最严重的那一个,一个是由约束条件确定,这里具体不多讲述,有兴趣可以自己查阅相关资料。下面是具体优化算法。
假设此时只有
α
1
\alpha_1
α1和
α
2
\alpha_2
α2是变量,所以优化问题可以写成:
m
i
n
α
1
,
α
2
W
(
α
1
,
α
2
)
=
1
2
K
11
α
1
2
+
1
2
K
22
α
2
2
+
y
1
y
2
K
12
α
1
α
2
−
(
α
1
+
α
2
)
+
y
1
α
1
∑
i
=
3
m
α
i
y
i
K
i
1
+
y
2
α
2
∑
i
=
3
m
α
i
y
i
K
i
2
s
.
t
.
α
1
y
1
+
α
2
y
2
=
−
∑
i
=
3
m
α
i
y
i
=
ς
,
α
i
≥
0
,
i
=
1
,
2.
\underset{\alpha_1,\alpha_2}{min}\;\;W(\;\alpha_1,\alpha_2)=\frac12K_{11}\alpha_1^2+\frac12K_{22}\alpha_2^2+y_1y_2K_{12}\alpha_1\alpha_2-(\alpha_1+\alpha_2)+y_1\alpha_1\sum_{i=3}^m\alpha_iy_iK_{i1}+y_2\alpha_2\sum_{i=3}^m\alpha_iy_iK_{i2}\\s.t.\;\alpha_1y_1+\alpha_2y_2=\overset m{\underset{i=3}{-\sum}}\alpha_iy_i=\varsigma,\\\alpha_i\geq0,\;\;i=1,2.
α1,α2minW(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1i=3∑mαiyiKi1+y2α2i=3∑mαiyiKi2s.t.α1y1+α2y2=i=3−∑mαiyi=ς,αi≥0,i=1,2.
为了计算方便,我们令:
E
i
=
(
∑
i
=
1
N
α
j
y
j
K
(
x
j
,
x
i
)
+
b
)
−
y
i
,
i
=
1
,
2
E_i=(\sum_{i=1}^N\alpha_jy_jK(x_j,x_i)+b)-y_i,\;\;\;\;i=1,2
Ei=(i=1∑NαjyjK(xj,xi)+b)−yi,i=1,2
v
i
=
∑
j
=
3
m
α
j
y
j
K
i
j
v_i=\sum_{j=3}^m\alpha_jy_jK_{ij}
vi=j=3∑mαjyjKij
而由于
α
1
y
1
=
ς
−
α
2
y
2
\alpha_1y_1=\varsigma-\alpha_2y_2
α1y1=ς−α2y2以及
y
i
2
=
1
y_i^2=1
yi2=1,可得:
α
1
=
(
ς
−
y
2
α
2
)
y
1
\alpha_1=(\varsigma-y_2\alpha_2)y_1
α1=(ς−y2α2)y1
从而最终得到一个关于
α
2
\alpha_2
α2的单变量优化目标函数:
W
(
α
2
)
=
1
2
K
11
(
ς
−
α
2
y
2
)
2
+
1
2
K
22
α
2
2
+
y
2
K
12
(
ς
−
α
2
y
2
)
α
2
−
(
ς
−
α
2
y
2
)
y
1
−
α
2
+
v
1
(
ς
−
α
2
y
2
)
+
y
2
v
2
α
2
W(\alpha_2)=\frac12K_{11}(\varsigma-\alpha_2y_2)^2+\frac12K_{22}\alpha_2^2+y_2K_{12}(\varsigma-\alpha_2y_2)\alpha_2-(\varsigma-\alpha_2y_2)y_1-\alpha_2+v_1(\varsigma-\alpha_2y_2)+y_2v_2\alpha_2
W(α2)=21K11(ς−α2y2)2+21K22α22+y2K12(ς−α2y2)α2−(ς−α2y2)y1−α2+v1(ς−α2y2)+y2v2α2
这个时候只需对
α
2
\alpha_2
α2求导:
∂
W
∂
α
2
=
K
11
α
2
+
K
22
α
2
−
2
K
12
α
2
−
K
11
ς
y
2
+
K
12
ς
y
2
+
y
1
y
2
−
1
−
v
1
y
2
+
y
2
v
1
\frac{\partial W}{\partial\alpha_2}=K_{11}\alpha_2+K_{22}\alpha_2-2K_{12}\alpha_2-K_{11}\varsigma y_2+K_{12}\varsigma y_2+y_1y_2-1-v_1y_2+y_2v_1
∂α2∂W=K11α2+K22α2−2K12α2−K11ςy2+K12ςy2+y1y2−1−v1y2+y2v1
令其为0,经过化简可以得到最终解:
α
2
n
e
w
=
α
2
+
y
2
(
E
1
−
E
2
)
η
\alpha_2^{new}=\alpha_2+\frac{y_2(E_1-E_2)}\eta
α2new=α2+ηy2(E1−E2)
再通过约束求得
α
1
\alpha_1
α1,从而得到最终结果。
总结
在支持向量机中,最重要的是使用了拉格朗日乘子法和SMO算法。拉格朗日乘子法的重要作用是将w的计算提前并消除w,使得优化函数变为拉格朗日乘子的单一参数优化问题。而SMO提供了一种巧妙地方法来解决二次优化问题。
在KKT条件中,我们可以看到,
α
i
=
0
\alpha_i=0
αi=0或
y
i
f
(
x
i
)
=
1
y_if(x_i)=1
yif(xi)=1,这就说明只与使等号成立的支持向量有关,这也是支持向量机和逻辑分类的区别。
在支持向量机中,还有一部分引入了软间隔的概念,提出了线性支持向量机,使得SVM能够处理一些出错样本。
随着我自己学习的深入,也会了解到更多更深的知识,这些东西以后再写把,这次就先到这里了。
公式纯手打,如有错误,敬请谅解。