SVM支持向量机作为一种常用的分类器可以说是应用非常广泛的,我们直接进入正题,来手动推导SVM,让大家一起加深SVM的算法流程。首先SVM的意义就是在空间中找到一个超平面,把空点中的两个线性可分的点集完全分开,我们把这个超平面定义成
w
⋅
x
i
+
b
=
0
w \cdot {x_i} + b = 0
w⋅xi+b=0,其中
w
w
w是一个n维的向量
x
i
{x_i}
xi表示空间中的点。与此同时,我们不仅需要用超平面将空间中的两个点集分开,同时需要超平面两侧距离超平面最近的样本点到超平面的距离最大化。我们在二维的平面看看这些数据吧:
从二维平面可以看出,我们最终的目的就是最大化margin,两个类别中存在距离超平面最近的点我们称作支持向量,支持向量所在的与超平面平行的两个平面之间的距离被称为margin。在n维空间中,点
x
x
x到直线
w
T
⋅
x
i
+
b
=
0
{w^T} \cdot {x_i} + b = 0
wT⋅xi+b=0的距离为
∣
w
T
x
+
b
∣
∥
w
∥
\frac{{\left| {{w^T}x + b} \right|}}{{\left\| w \right\|}}
∥w∥∣wTx+b∣,其中
∥
w
∥
=
w
1
2
+
w
2
2
+
.
.
.
+
w
d
2
\left\| w \right\| = \sqrt {w_1^2 + w_2^2{\text{ + }}...{\text{ + }}w_d^2}
∥w∥=w12+w22 + ... + wd2,根据定义每个类别到超平面最近的点和超平面的距离为
d
d
d,那么这个类别其他所有的点到超平面的距离都是大于
d
d
d的,可以得到如下式子:
{
w
T
x
i
+
b
∥
w
∥
⩾
d
y
i
=
1
w
T
x
i
+
b
∥
w
∥
⩽
−
d
y
i
=
1
\begin{cases} \frac{{{w^T}{x_i} + b}}{{\left\| w \right\|}} \geqslant d\quad{y_i} = 1\\ \\ \frac{{{w^T}{x_i} + b}}{{\left\| w \right\|}} \leqslant - d\quad{y_i} = 1 \end{cases}
⎩⎪⎨⎪⎧∥w∥wTxi+b⩾dyi=1∥w∥wTxi+b⩽−dyi=1
同时也可以知道:
{
w
T
x
i
+
b
>
0
y
i
=
1
w
T
x
i
+
b
<
0
y
i
=
−
1
\begin{cases} {w^T}{x_i} + b > 0\quad{y_i} = 1\\ \\ {w^T}{x_i} + b < 0\quad{y_i} = -1 \end{cases}
⎩⎪⎨⎪⎧wTxi+b>0yi=1wTxi+b<0yi=−1
所以可以得到:
y
i
(
w
T
x
i
+
b
)
>
0
{y_i}({w^T}{x_i} + b) > 0
yi(wTxi+b)>0
因为margin就是最小的距离,所以可以得到以下式子:
max
m
a
r
g
i
n
=
max
min
∣
w
T
x
i
+
b
∣
∥
w
∥
;
s
.
t
.
y
i
(
w
T
x
i
+
b
)
>
0
\max\quad margin = \max\quad\min \frac{{\left| {{w^T}{x_i} + b} \right|}}{{\left\| w \right\|}};\quad\quad s.t.\quad{y_i}({w^T}{x_i} + b) > 0
maxmargin=maxmin∥w∥∣∣wTxi+b∣∣;s.t.yi(wTxi+b)>0
上述式子等价于:
max
m
a
r
g
i
n
=
max
min
(
w
T
x
i
+
b
)
y
i
∥
w
∥
;
s
.
t
.
y
i
(
w
T
x
i
+
b
)
>
0
\max\quad margin = \max\quad\min \frac{{ ({{w^T}{x_i} + b}){y_i} }}{{\left\| w \right\|}};\quad\quad s.t.\quad{y_i}({w^T}{x_i} + b) > 0
maxmargin=maxmin∥w∥(wTxi+b)yi;s.t.yi(wTxi+b)>0
我们可以将上述公式拆开来看:
max
m
a
r
g
i
n
=
max
1
∥
w
∥
m
i
n
(
w
T
x
i
+
b
)
y
i
;
s
.
t
.
y
i
(
w
T
x
i
+
b
)
>
0
\max\quad margin = \max \frac{{ 1 }}{{\left\| w \right\|}}min{{ ({{w^T}{x_i} + b}){y_i} }};\quad\quad s.t.\quad{y_i}({w^T}{x_i} + b) > 0
maxmargin=max∥w∥1min(wTxi+b)yi;s.t.yi(wTxi+b)>0
我们再来看看分类的图,我们要将所有的点分成+1和-1两个类,那么如图所示:
由上图可知,所有的点一定会在平面
w
T
x
i
+
b
=
1
{w^T}{x_i} + b = 1
wTxi+b=1和
w
T
x
i
+
b
=
−
1
{w^T}{x_i} + b =- 1
wTxi+b=−1两侧,所以
min
y
i
(
w
T
x
i
+
b
)
=
1
\min {y_i}({w^T}{x_i} + b) = 1
minyi(wTxi+b)=1,再结合上述公式我们可以得到:
max
m
a
r
g
i
n
=
max
1
∥
w
∥
;
s
.
t
.
y
i
(
w
T
x
i
+
b
)
⩾
1
\max margin = \max \frac{1}{{\left\| w \right\|}};\quad s.t.\quad{y_i}({w^T}{x_i} + b) \geqslant 1
maxmargin=max∥w∥1;s.t.yi(wTxi+b)⩾1
这个问题同样可以等价于:
max
m
arg
i
n
=
min
1
2
∥
w
∥
2
;
s
.
t
.
y
i
(
w
T
x
i
+
b
)
⩾
1
\max m\arg in = \min \frac{1}{2}{\left\| w \right\|^2};\quad s.t.\quad {y_i}({w^T}{x_i} + b) \geqslant 1
maxmargin=min21∥w∥2;s.t.yi(wTxi+b)⩾1
接下来就是求解SVM优化问题的过程:
1.构造拉格朗日函数
因为约束函数
y
i
(
w
T
x
i
+
b
)
⩾
1
⇔
1
−
y
i
(
w
T
x
i
+
b
)
⩽
0
{y_i}({w^T}{x_i} + b) \geqslant 1 \Leftrightarrow 1 - {y_i}({w^T}{x_i} + b) \leqslant 0
yi(wTxi+b)⩾1⇔1−yi(wTxi+b)⩽0,所以我们可以构造柱函数的拉格朗日函数:
L
(
w
,
b
,
λ
)
=
1
2
∥
w
∥
2
+
∑
i
=
1
m
λ
i
[
1
−
(
w
T
x
i
+
b
)
y
i
]
L(w,b,\lambda ) = \frac{1}{2}{\left\| w \right\|^2}{\text{ + }}\sum\limits_{i = 1}^m {{\lambda _i}[1 - ({w^T}{x_i} + b){y_i}]}
L(w,b,λ)=21∥w∥2 + i=1∑mλi[1−(wTxi+b)yi]
其中
λ
i
⩾
0
{\lambda _i} \geqslant 0
λi⩾0,
i
=
1
,
2
,
.
.
.
,
m
i = 1,2,...,m
i=1,2,...,m。
2.求拉格朗日函数对于w和b最小
原来的目标函数为:
max
m
a
r
g
i
n
=
min
w
,
b
max
λ
L
(
w
,
b
,
λ
)
\max \quad margin = {\min _{w,b}}\quad{\max _\lambda }L(w,b,\lambda )
maxmargin=w,bminλmaxL(w,b,λ)
上述式子我们可以用对偶关系转化一下:
max
m
a
r
g
i
n
=
max
λ
min
w
,
b
L
(
w
,
b
,
λ
)
;
s
.
t
.
λ
i
⩾
0
\max \quad margin = {\max _\lambda }\quad {\min _{w,b}}L(w,b,\lambda );\quad s.t.\quad {\lambda _i} \geqslant 0
maxmargin=λmaxw,bminL(w,b,λ);s.t.λi⩾0
一般来说要求一个数学表达式的极值的话,我们采用求偏导的方法,首先我们对
w
w
w求偏导,可以得到:
∂
L
∂
w
=
w
−
∑
i
=
1
m
λ
i
x
i
y
i
=
0
⇔
w
=
∑
i
=
1
m
λ
i
x
i
y
i
\frac{{\partial L}}{{\partial w}} = w - \sum\limits_{i = 1}^m {{\lambda _i}{x_i}{y_i} = 0} \Leftrightarrow w = \sum\limits_{i = 1}^m {{\lambda _i}{x_i}{y_i}}
∂w∂L=w−i=1∑mλixiyi=0⇔w=i=1∑mλixiyi
对
b
b
b求偏导数可以得到:
∂
L
∂
b
=
∑
i
=
1
m
λ
i
y
i
=
0
\frac{{\partial L}}{{\partial b}} = \sum\limits_{i = 1}^m {{\lambda _i}{y_i} = 0}
∂b∂L=i=1∑mλiyi=0
再将结果带入拉格朗日表达式中:
L
(
w
,
b
,
λ
)
=
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
x
i
x
j
+
∑
i
=
1
m
λ
i
−
∑
i
=
1
m
λ
i
y
i
(
(
∑
j
=
1
m
λ
j
y
j
x
j
)
x
i
+
b
)
L(w,b,\lambda ) = \frac{1}{2}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m {{\lambda _i}{\lambda _j}{y_i}{y_j}{x_i}{x_j} + \sum\limits_{i = 1}^m {{\lambda _i}} - \sum\limits_{i = 1}^m {{\lambda _i}{y_i}((\sum\limits_{j = 1}^m {{\lambda _j}{y_j}{x_j}){x_i} + b} )} } }
L(w,b,λ)=21i=1∑mj=1∑mλiλjyiyjxixj+i=1∑mλi−i=1∑mλiyi((j=1∑mλjyjxj)xi+b)
我们继续优化拉格朗日表达式:
L
(
w
,
b
,
λ
)
=
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
x
i
x
j
+
∑
i
=
1
m
λ
i
−
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
x
i
x
j
−
b
∑
i
=
1
m
λ
i
y
i
L(w,b,\lambda ) = \frac{1}{2}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m {{\lambda _i}{\lambda _j}{y_i}{y_j}{x_i}{x_j} + \sum\limits_{i = 1}^m {{\lambda _i} - \sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m {{\lambda _i}{\lambda _j}{y_i}{y_j}{x_i}{x_j} - b\sum\limits_{i = 1}^m {{\lambda _i}{y_i}} } } } } }
L(w,b,λ)=21i=1∑mj=1∑mλiλjyiyjxixj+i=1∑mλi−i=1∑mj=1∑mλiλjyiyjxixj−bi=1∑mλiyi
因为
∑
i
=
1
m
λ
i
y
i
=
0
{\sum\limits_{i = 1}^m {{\lambda _i}{y_i}} }=0
i=1∑mλiyi=0,所以整个式子可以简化成:
L
(
w
,
b
,
λ
)
=
∑
i
=
1
m
λ
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
x
i
x
j
L(w,b,\lambda ) = \sum\limits_{i = 1}^m {{\lambda _i}} - \frac{1}{2}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m {{\lambda _i}{\lambda _j}{y_i}{y_j}{x_i}{x_j}} }
L(w,b,λ)=i=1∑mλi−21i=1∑mj=1∑mλiλjyiyjxixj
3.求 min w , b L ( w , b , λ ) {\min _{w,b}}L(w,b,\lambda ) minw,bL(w,b,λ)对 λ \lambda λ最大
上述说过用对偶转换,整体的目标函数可以写成:
min
w
,
b
L
(
w
,
b
,
λ
)
=
max
λ
L
(
w
,
b
,
λ
)
{\min _{w,b}}L(w,b,\lambda ) = {\max _\lambda }L(w,b,\lambda )
w,bminL(w,b,λ)=λmaxL(w,b,λ)
那么现在的求解变成了如下表达式:
max
λ
L
(
w
,
b
,
λ
)
=
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
{\max _\lambda }L(w,b,\lambda ) = {\max _\lambda }[\sum\limits_{i = 1}^m {{\lambda _i}} - \frac{1}{2}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m {{\lambda _i}{\lambda _j}{y_i}{y_j}{x_i}{x_j}} } ];\quad s.t.\quad\sum\limits_{i = 1}^m{{\lambda _i}{y_i} = 0} \quad{\lambda _i} \geqslant 0
λmaxL(w,b,λ)=λmax[i=1∑mλi−21i=1∑mj=1∑mλiλjyiyjxixj];s.t.i=1∑mλiyi=0λi⩾0
为了方便计算,我们将表达式前面加上一个负号,那么求极大值就变成了极小值:
min
λ
L
(
w
,
b
,
λ
)
=
min
λ
[
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
x
i
x
j
−
∑
i
=
1
m
λ
i
]
;
s
.
t
.
∑
i
=
1
m
λ
i
y
i
=
0
λ
i
⩾
0
{\min _\lambda }L(w,b,\lambda ) = {\min _\lambda }[\frac{1}{2}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m {{\lambda _i}{\lambda _j}{y_i}{y_j}{x_i}{x_j}} }-\sum\limits_{i = 1}^m {{\lambda _i}} ];\quad s.t.\quad\sum\limits_{i = 1}^m{{\lambda _i}{y_i} = 0} \quad{\lambda _i} \geqslant 0
λminL(w,b,λ)=λmin[21i=1∑mj=1∑mλiλjyiyjxixj−i=1∑mλi];s.t.i=1∑mλiyi=0λi⩾0
4.求解 w ∗ {w^*} w∗和 b ∗ {b^*} b∗
对于原始问题和对偶问题,充分必要条件就是满足KTT条件,于是可以得到如下公式:
1.
∂
L
(
w
,
b
,
λ
)
∂
w
=
0
\frac{{\partial L(w,b,\lambda )}}{{\partial w}} = 0
∂w∂L(w,b,λ)=0
2. ∂ L ( w , b , λ ) ∂ b = 0 \frac{{\partial L(w,b,\lambda )}}{{\partial b}} = 0 ∂b∂L(w,b,λ)=0
3. ∂ L ( w , b , λ ) ∂ λ = 0 \frac{{\partial L(w,b,\lambda )}}{{\partial \lambda}} = 0 ∂λ∂L(w,b,λ)=0
4. λ i ( 1 − y i ( w T x i + b ) ) = 0 {\lambda _i}(1 - {y_i}({w^T}{x_i} + b)) = 0 λi(1−yi(wTxi+b))=0
5. λ i ⩾ 0 {\lambda _i} \geqslant 0 λi⩾0
6. 1 − y i ( w T x i + b ) ⩽ 0 1 - {y_i}({w^T}{x_i} + b) \leqslant 0 1−yi(wTxi+b)⩽0
我们假设整个问题的最优解是
w
∗
{w^*}
w∗,
b
∗
{b^*}
b∗和
λ
∗
{\lambda ^*}
λ∗,由KTT条件可以推断出不可能所有的
λ
i
{\lambda _i}
λi都是0,如果所有的
λ
i
{\lambda _i}
λi都等于0的话,那么
w
∗
=
0
{w^*}=0
w∗=0,这显然是错误的,所以至少有一个
λ
{\lambda}
λ是大于0的,这个时候根据第4个公式可以得到:
1
−
y
i
(
w
∗
x
i
+
b
∗
)
=
0
1 - {y_i}({w^*}{x_i} + {b^*}) = 0
1−yi(w∗xi+b∗)=0因为由公式1可以得到:
w
∗
=
∑
i
=
1
m
λ
i
∗
y
i
x
i
{w^*} = \sum\limits_{i = 1}^m {\lambda _i^*{y_i}{x_i}}
w∗=i=1∑mλi∗yixi
这个时候我们可以将
w
∗
{w^*}
w∗带入到
1
−
y
i
(
w
∗
x
i
+
b
∗
)
=
0
1 - {y_i}({w^*}{x_i} + {b^*}) = 0
1−yi(w∗xi+b∗)=0中去,因为
y
i
=
±
1
{y_i} = \pm 1
yi=±1,所以
y
i
2
=
1
y_i^2 = 1
yi2=1,由上述公式可以得到:
y
j
−
y
j
2
(
∑
i
=
1
m
λ
i
∗
y
i
x
i
x
j
+
b
∗
)
=
0
{y_j} - y_j^2(\sum\limits_{i = 1}^m {\lambda _i^*{y_i}{x_i}{x_j} + {b^*}} ) = 0
yj−yj2(i=1∑mλi∗yixixj+b∗)=0最终可以求得:
b
∗
=
y
j
−
∑
i
=
1
m
λ
i
∗
y
i
x
i
x
j
=
y
j
−
∑
i
=
1
m
λ
i
∗
y
i
(
x
i
x
j
)
{b^*} = {y_j} - \sum\limits_{i = 1}^m {\lambda _i^*{y_i}{x_i}{x_j}} = {y_j} - \sum\limits_{i = 1}^m {\lambda _i^*{y_i}({x_i}{x_j}} )
b∗=yj−i=1∑mλi∗yixixj=yj−i=1∑mλi∗yi(xixj)
这个时候我们就求出了所有的
w
∗
{w^*}
w∗和
b
∗
{b^*}
b∗,就可以求出分类的超平面为:
∑
i
=
1
m
λ
i
∗
y
i
(
x
x
i
)
+
b
∗
=
0
\sum\limits_{i = 1}^m {\lambda _i^*{y_i}(x{x_i})} + {b^*} = 0
i=1∑mλi∗yi(xxi)+b∗=0
同理,分类决策函数就可以写成:
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
m
λ
i
∗
y
i
(
x
x
i
)
+
b
∗
)
f(x) = sign(\sum\limits_{i = 1}^m {\lambda _i^*{y_i}(x{x_i})} + {b^*})
f(x)=sign(i=1∑mλi∗yi(xxi)+b∗)
到这里,整个SVM的推导过程就完成了,希望这篇博文能够帮助大家对SVM分类的理解有所帮助,SVM是一种基础的很重要的分类算法,也希望大家能够理解和掌握,文中如有纰漏,请大家不吝指教;如有转载,也请标明出处,谢谢大家。