前提:经过了感知器等基本概念的学习,我们以及知道如何训练出可以用于解决分类问题的超平面
说明:本文将讨论一个同样能够完成分类问题的较为复杂的想法——支持向量机 SVM(Support Vector Machines)
它由 美国计算机学家 Vladimir Vapnik 提出,用来确定分类问题的决策边界
参考:https://www.youtube.com/watch?v=_PwhiWxHK8o
Intro 引入
目前我们有很多方法能够画出各种决策边界
Vapnik 对此提出:
- 对空间中的线性可分的两类样本,要画出决策边界,无非是一个超平面,但是选择哪一个边界是个问题。
- 例如下图的例子,我们希望的是画出一个与两类样本间隔最宽的直线(下图虚线),把这个空白的间隔范围(两个橙色线之间)想象成一个沟渠。
-
其中, ω ⃗ \vec{\omega} ω 是垂直于决策边界的任意长度向量, v ⃗ \vec{v} v 是我们想判断分类的样本点
-
如果 w ⃗ ⋅ u ⃗ ≥ C \vec{w}\cdot\vec{u}\geq C w⋅u≥C 那么样本很明显是在直线右侧的一类(+)
-
换个方式来描述这个分类规则, 令 C = − b C=-b C=−b,有 :
-
w ⃗ ⋅ u ⃗ + b ≥ 0 , T H E N ( + ) , [ ∗ 公式 1 ] \vec{w}\cdot\vec{u}+b\geq 0 , THEN (+) , [*公式1] w⋅u+b≥0,THEN(+),[∗公式1]
- $\vec{u} $ 是我们已知,待分类的样本
- ω ⃗ \vec{\omega} ω 和 b b b ,分别是我们需要进一步确定的 权值 和 偏置
- 由于我们希望确定一个唯一的最优结果,所以我们要考虑这个优化问题的限制。
Support Vector 支持向量
对于我们已知的训练集,它包含两类样本,分别是
x
+
x_+
x+和
x
−
x_-
x−
ω
⃗
⋅
x
+
⃗
+
b
≥
1
,
对于
+
样本
ω
⃗
⋅
x
−
⃗
+
b
≤
−
1
,
对于
−
样本
\vec{\omega}\cdot\vec{x_+}+b \geq 1 , 对于+样本\\ \vec{\omega}\cdot\vec{x_-}+b \leq -1, 对于-样本
ω⋅x++b≥1,对于+样本ω⋅x−+b≤−1,对于−样本
- 这两类样本之间存在一个空白区域从-1到1
我们引入一个变量
y
i
y_i
yi来明确第
i
i
i个样本属于哪一类:
y
i
=
+
1
,
对于
+
样本
y
i
=
−
1
,
对于
−
样本
y_i=+1, 对于+样本\\ y_i=-1, 对于-样本
yi=+1,对于+样本yi=−1,对于−样本
这样我们将得到
y
i
(
w
⃗
⋅
x
i
⃗
+
b
)
≥
1
y_i(\vec{w} \cdot \vec{x_i}+b) \geq 1
yi(w⋅xi+b)≥1
把1移到左边
y
i
(
w
⃗
⋅
x
i
⃗
+
b
)
−
1
≥
0
,
[
∗
公式
2
]
y_i(\vec{w} \cdot \vec{x_i}+b) -1\geq 0, [*公式2]
yi(w⋅xi+b)−1≥0,[∗公式2]
如果
y
i
(
w
⃗
⋅
x
i
⃗
+
b
)
−
1
=
0
y_i(\vec{w} \cdot \vec{x_i}+b) -1= 0
yi(w⋅xi+b)−1=0, 这个样本
x
i
⃗
\vec{x_i}
xi在沟渠边界,其实就是支持向量,如下图在两个边界上的点
- 这个间隔的宽度等于正负边界上的支持向量的差
(
x
+
⃗
−
x
−
⃗
)
(\vec{x_+}-\vec{x_-})
(x+−x−)乘上垂直于边界的单位方向向量,在前面我们有
ω
⃗
\vec{\omega}
ω 是垂直于决策边界的任意长度向量,那么它除以自身的模就是单位向量了,因此有:
W i d t h = ( x + ⃗ − x − ⃗ ) ⋅ w ⃗ ∣ ∣ w ⃗ ∣ ∣ Width = (\vec{x_+}-\vec{x_-})\cdot \frac{\vec{w}}{||\vec{w}||} Width=(x+−x−)⋅∣∣w∣∣w
Max the width 最大间隔问题
-
从**[*公式2]**可以知道对于一个支持向量 x + ⃗ \vec{x_+} x+ 有:
- y i ( w ⃗ ⋅ x + ⃗ + b ) − 1 = 0 y_i(\vec{w} \cdot \vec{x_+}+b) -1= 0 yi(w⋅x++b)−1=0
- $ y_i=+1, 对于+样本$
- 因此: w ⃗ ⋅ x + ⃗ = 1 − b \vec{w} \cdot \vec{x_+}=1-b w⋅x+=1−b
-
类似的对于支持向量 x − ⃗ \vec{x_-} x−
- y i ( w ⃗ ⋅ x − ⃗ + b ) − 1 = 0 y_i(\vec{w} \cdot \vec{x_-}+b) -1= 0 yi(w⋅x−+b)−1=0
- y i = − 1 , 对于 − 样本 y_i=-1, 对于-样本 yi=−1,对于−样本
- 因此: w ⃗ ⋅ x − ⃗ = − 1 − b \vec{w} \cdot \vec{x_-}=-1-b w⋅x−=−1−b
- w ⃗ ⋅ x + ⃗ − w ⃗ ⋅ x − ⃗ = 1 − b − ( − 1 − b ) = 2 \vec{w} \cdot \vec{x_+}-\vec{w} \cdot \vec{x_-}=1-b-(-1-b)=2 w⋅x+−w⋅x−=1−b−(−1−b)=2
-
所以宽度公式可以进一步表示为
W i d t h = ( x + ⃗ − x − ⃗ ) ⋅ w ⃗ ∣ ∣ w ⃗ ∣ ∣ = 2 ∣ ∣ w ⃗ ∣ ∣ , [ ∗ 公式 3 ] Width = (\vec{x_+}-\vec{x_-})\cdot \frac{\vec{w}}{||\vec{w}||}=\frac{2}{||\vec{w}||},[*公式3] Width=(x+−x−)⋅∣∣w∣∣w=∣∣w∣∣2,[∗公式3] -
我们的问题就在于如何得到最大的间隔宽度 W i d t h Width Width
-
忽略掉常数,我们需要最大化 1 ∣ ∣ w ⃗ ∣ ∣ \frac{1}{||\vec{w}||} ∣∣w∣∣1,也就是要最小化 ∣ ∣ w ⃗ ∣ ∣ {||\vec{w}||} ∣∣w∣∣
-
更进一步,最小化 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 \frac{1}{2}{||\vec{w}||}^2 21∣∣w∣∣2, 这种形式方便我们直接套用数学上的优化问题的解决方法——拉格朗日公式
Lagrange mutipliers 拉格朗日乘子
-
对于一个有限制(边界条件)的函数,用拉格朗日乘子可以求函数的极值
-
L = 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 − ∑ α i [ y i ( w ⃗ ⋅ x i ⃗ + b ) − 1 ] L=\frac{1}{2}{||\vec{w}||}^2-\sum\alpha_i[y_i(\vec{w} \cdot \vec{x_i}+b) -1] L=21∣∣w∣∣2−∑αi[yi(w⋅xi+b)−1]
- L 表示我们要最大化的量
- α i \alpha_i αi 是拉格朗日乘子,支持向量对应的是1,其他的是0
- y i ( w ⃗ ⋅ x i ⃗ + b ) − 1 y_i(\vec{w} \cdot \vec{x_i}+b) -1 yi(w⋅xi+b)−1是限制条件
- 如果需要进一步了解可以参考https://zhuanlan.zhihu.com/p/542402242
-
要求一个函数的极值,我们可以先求导来判断
∂ L ∂ w ⃗ = w ⃗ − ∑ α i y i x i ⃗ = 0 \frac{\partial L}{\partial \vec{w}}=\vec{w}-\sum\alpha_iy_i\vec{x_i}=0 ∂w∂L=w−∑αiyixi=0-
对于向量的求导我们不做展开说明,其基本形式与标量类似,特殊情况我们再做说明。
-
w ⃗ = ∑ α i y i x i ⃗ , [ ∗ 公式 4 ] \vec{w}=\sum\alpha_iy_i\vec{x_i},[*公式4] w=∑αiyixi,[∗公式4]
-
-
接下来我们对 b b b求偏导
∂ L ∂ b = − ∑ α i y i = 0 \frac{\partial L}{\partial b}=-\sum\alpha_iy_i=0 ∂b∂L=−∑αiyi=0
-
∑ α i y i = 0 , [ ∗ 公式 5 ] \sum\alpha_iy_i=0,[*公式5] ∑αiyi=0,[∗公式5]
-
我们把[*公式4]带入到拉格朗日公式里得到
L = 1 2 ( w ⃗ ) 2 − ∑ α i y i x i ⃗ ( w ⃗ ) − ∑ α i y i b + ∑ α i = 1 2 ( ∑ α i y i x i ⃗ ) ⋅ ( ∑ α j y j x j ⃗ ) ① − ( ∑ α i y i x i ) ⋅ ( ∑ α j y j x j ⃗ ) ② − ∑ α i y i b ③ + ∑ α i ④ L=\frac{1}{2}{(\vec{w})}^2-\sum\alpha_iy_i\vec{x_i}(\vec{w})-\sum\alpha_iy_ib+\sum\alpha_i\\ =\frac{1}{2}{(\sum\alpha_iy_i\vec{x_i})}\cdot{(\sum\alpha_jy_j\vec{x_j})} ①\\-(\sum\alpha_iy_ix_i)\cdot(\sum\alpha_jy_j\vec{x_j})②\\-\sum\alpha_iy_ib③+\sum\alpha_i④ L=21(w)2−∑αiyixi(w)−∑αiyib+∑αi=21(∑αiyixi)⋅(∑αjyjxj)①−(∑αiyixi)⋅(∑αjyjxj)②−∑αiyib③+∑αi④
-
上面的结果一共有①-④项,我们来分析一下
- ①和②是同类项,合并后系数为 − 1 2 -\frac{1}{2} −21
- ③中b对于求和来说是常数,可以提出来,由 ∑ α i y i = 0 , [ 公式 5 ] \sum\alpha_iy_i=0,[公式5] ∑αiyi=0,[公式5]发现③项等于0
- ④项保留
-
L = − 1 2 ( ∑ α i y i x i ⃗ ) ⋅ ( ∑ α j y j x j ⃗ ) + ∑ α i L=-\frac{1}{2}{(\sum\alpha_iy_i\vec{x_i})}\cdot{(\sum\alpha_jy_j\vec{x_j})} +\sum\alpha_i L=−21(∑αiyixi)⋅(∑αjyjxj)+∑αi
-
最终得到
-
L = ∑ α i − 1 2 ∑ i ∑ j α i α j y i y j x i ⃗ ⋅ x j ⃗ , [ ∗ 公式 6 ] L=\sum\alpha_i-\frac{1}{2}\sum_i\sum_j\alpha_i\alpha_jy_iy_j \vec{x_i}\cdot\vec{x_j}, [*公式6] L=∑αi−21i∑j∑αiαjyiyjxi⋅xj,[∗公式6]
至此,我们所有的问题都转化为了,求[*公式6]这个表达式的最大值
这个形式清楚的表达了,这个最大值与这些样本向量(训练集)的关系。
我们发现这个最优值取决于这些样本,它们两两之间的内积,也就是** x i ⃗ ⋅ x j ⃗ \vec{x_i}\cdot \vec{x_j} xi⋅xj**
-
同样带入[公式4]我们的决策条件(分类规则)[*公式1]也变成了:
-
∑ α i y i x i ⃗ ⋅ u ⃗ + b ≥ 0 , T H E N ( + ) \sum\alpha_iy_i\vec{x_i}\cdot\vec{u}+b\geq 0 , THEN (+) ∑αiyixi⋅u+b≥0,THEN(+)
分类规则也同样取决于训练集的样本(支持向量)和测试样本之间的内积, x i ⃗ ⋅ u ⃗ \vec{x_i}\cdot \vec{u} xi⋅u
Kernel Function 核函数
在当前维度,如果样本线性不可分,可以使用核(Kernel)来把样本映射到更高维的空间,使样本线性可分。
x
⃗
→
ϕ
(
x
⃗
)
\vec{x} \rightarrow \phi(\vec{x})
x→ϕ(x)
上一小节我们得出结论:无论是优化问题还是分类规则都与样本向量两两间的内积有关,因此我们可以考虑映射后的内积的表达
- 对于 L L L, 需要求:
ϕ ( x i ⃗ ) ⋅ ϕ ( x j ⃗ ) \phi(\vec{x_i})\cdot\phi(\vec{x_j}) ϕ(xi)⋅ϕ(xj)
- 对于分类规则,需要:
ϕ ( x i ⃗ ) ⋅ ϕ ( u ⃗ ) \phi(\vec{x_i})\cdot\phi(\vec{u}) ϕ(xi)⋅ϕ(u)
因此我们定义核函数为:
K
(
x
i
⃗
,
x
j
⃗
)
=
ϕ
(
x
i
⃗
)
⋅
ϕ
(
x
j
⃗
)
K(\vec{x_i},\vec{x_j})=\phi(\vec{x_i})\cdot\phi(\vec{x_j})
K(xi,xj)=ϕ(xi)⋅ϕ(xj)
我们甚至无需确定映射的规则(
ϕ
(
x
⃗
)
\phi(\vec{x})
ϕ(x) 的表达式),只需要知道核函数
K
(
x
i
⃗
,
x
j
⃗
)
K(\vec{x_i},\vec{x_j})
K(xi,xj) 的表达式足矣
-
几种常用的核函数:
-
K ( u , v ) = ( u T ⋅ v + 1 ) n K(u,v)=(u^T\cdot v+1)^n K(u,v)=(uT⋅v+1)n
-
K ( u , v ) = u T ⋅ v K(u,v)=u^T\cdot v K(u,v)=uT⋅v
-
K ( u , v ) = e − ∣ ∣ u − v ∣ ∣ σ K(u,v)=e^{-\frac{||u-v||}{\sigma}} K(u,v)=e−σ∣∣u−v∣∣
-