支持向量机涉及到的理论还是比较复杂的,特别是关于模型参数的求解,很多文章都有详细的公式推导分析,本文主要简单推导一下支持向量机的思想。
支持向量机的主要应用场景还是二分类问题。
对于一个二分类问题,分类的边界要么是线性要么是非线性的,所以我们先从线性边界开始讨论。
对于n维线性可分的数据,n-1维的分类子空间称为超平面,像二维数据中的线、三维数据中的面都属于超平面,支持向量机的目标,就是找出一个超平面,对数据进行分类。
继续以二维数据为例,我们可以看到其实能够实现分类效果的超平面有很多,而支持向量机就认为,最好的那个超平面应该是处于两类样本数据的正中间,这样超平面受到噪声、数据扰动等因素的变化才会最小,模型鲁棒性最强。
接下来,我们就需要从数学角度更形式化地描述什么是"处于两类样本数据的正中间",首先线性超平面我们可以定义为
w T x + b = 0 w^Tx+b=0 wTx+b=0
还是以二维数据为例,超平面实际上就是
w 1 x 1 + w 2 x 2 + b = 0 w_1x_1+w_2x_2+b=0 w1x1+w2x2+b=0
假设我们已经求出了具体的参数w和b是什么,我们就可以把数据代进去方程,如果结果大于0数据就属于类别1,小于0则属于类别2,这就是支持向量机的预测过程。
所以接下来的问题就是如何求解参数w和b,我看了很多文章,他们写得很好,但是我觉得切入的角度很难让人一下子就理解,所以我这里尝试从最简单的角度出发说一下我的理解。
首先我们可以想象一下,假设我们已经求出了超平面,这时候我们移动超平面,也就是改变b的取值,直至超平面分别接触到两类样本数据,此时有
w
T
x
+
b
1
=
0
w^Tx+b_1=0
wTx+b1=0
w T x + b 2 = 0 w^Tx+b_2=0 wTx+b2=0
这两个超平面之间的距离称为间隔,接触到两个超平面的样本数据就称为支持向量,之所以叫支持向量是因为其实其他向量对于支持向量机的求解没有什么帮助,我们只需要利用支持向量即可完成整个模型的分析。实际上,我们的目标就是通过最大化间隔从而确定出分类超平面。接下来我们先看看怎么计算间隔,
设x1、x2为两个支持向量,w为支持向量机的参数向量,同时也是分类超平面的法向量,gamma为间隔长度,有
γ = ∣ ∣ x 2 − x 1 ∣ ∣ ∗ c o s θ \gamma = ||x_2 - x_1|| * cos \theta γ=∣∣x2−x1∣∣∗cosθ
c o s θ = w T ∗ ( x 2 − x 1 ) ∣ ∣ w ∣ ∣ ∗ ∣ ∣ x 2 − x 1 ∣ ∣ cos \theta = \frac{w^T * (x_2 - x_1)}{||w|| * ||x_2 - x_1|| } cosθ=∣∣w∣∣∗∣∣x2−x1∣∣wT∗(x2−x1)
cos的计算可回顾一下余弦计算公式,代入得
γ = ∣ ∣ x 2 − x 1 ∣ ∣ ∗ w T ∗ ( x 2 − x 1 ) ∣ ∣ w ∣ ∣ ∗ ∣ ∣ x 2 − x 1 ∣ ∣ \gamma = ||x_2 - x_1|| * \frac{w^T * (x_2 - x_1)}{||w|| * ||x_2 - x_1|| } γ=∣∣x2−x1∣∣∗∣∣w∣∣∗∣∣x2−x1∣∣wT∗(x2−x1)
γ = w T ∗ x 2 − w T ∗ x 1 ∣ ∣ w ∣ ∣ \gamma = \frac{w^T * x_2 - w^T * x_1}{||w||} γ=∣∣w∣∣wT∗x2−wT∗x1
因为x1和x2来自于上面的两个超平面,所以有
γ = − b 1 − ( − b 2 ) ∣ ∣ w ∣ ∣ \gamma = \frac{-b_1 - (-b_2)}{||w|| } γ=∣∣w∣∣−b1−(−b2)
我们的目标是最大化分类间隔,所以就相当于最大化gamma,也就是同时最小化w和最大化b2-b1,最小化w没问题,可是b2-b1会随着样本数据的改变而改变,所以接下来的重点就是分析如何处理b2-b1。我们回到分类超平面是
w T x + b = 0 w^Tx+b=0 wTx+b=0
注意,如果我们同时对w和b乘上缩放因子c,超平面是不变的
c ∗ w T x + c ∗ b = 0 c * w^Tx+c * b = 0 c∗wTx+c∗b=0
w T x = − c − 1 c ∗ b w^Tx = -c^{-1}c * b wTx=−c−1c∗b
w T x + b = 0 w^Tx + b=0 wTx+b=0
支持向量上的两个超平面到分类超平面的距离是一样的,因此有等式(b的差值与距离差成比例)
b 1 − b = b − b 2 b_1 - b = b - b_2 b1−b=b−b2
我们用delta表示偏置项的差,可得到支持向量上的两个超平面的新的表达式:
w
T
x
+
b
+
δ
=
0
w^Tx+b + \delta=0
wTx+b+δ=0
w
T
x
+
b
−
δ
=
0
w^Tx+b - \delta=0
wTx+b−δ=0
因为缩放对超平面不影响,所以我们对两个超平面进行缩放,得到
w
T
δ
x
+
b
δ
+
δ
δ
=
0
\frac{w^T}{\delta} x+ \frac{b}{\delta} + \frac{\delta}{\delta}=0
δwTx+δb+δδ=0
w
T
δ
x
+
b
δ
−
δ
δ
=
0
\frac{w^T}{\delta} x+ \frac{b}{\delta} - \frac{\delta}{\delta}=0
δwTx+δb−δδ=0
简化一下公式,得到分类超平面、支持向量上的两个超平面分别为
w
′
T
x
+
b
′
=
0
w'^Tx+b' =0
w′Tx+b′=0
w
′
T
x
+
b
′
+
1
=
0
w'^T x+ b' + 1=0
w′Tx+b′+1=0
w
′
T
x
+
b
′
−
1
=
0
w'^T x+ b' - 1=0
w′Tx+b′−1=0
其实w和b怎么写影响都不大,毕竟都是待求参数,这里想强调的是,为什么很多文章都设置间隔边界值为正负1
实际上就是放缩不影响超平面,再回到间隔的计算公式
γ
=
(
1
−
b
′
)
−
(
−
1
−
b
′
)
∣
∣
w
′
∣
∣
\gamma = \frac{(1- b') - (-1 - b')}{||w'|| }
γ=∣∣w′∣∣(1−b′)−(−1−b′)
γ
=
2
∣
∣
w
′
∣
∣
\gamma = \frac{2}{||w'|| }
γ=∣∣w′∣∣2
终于推出了这条式子,接下来再看看约束条件,我们需要保证所有的数据都能正确地被分类超平面分类,假设用yi表示第i个数据的类别,取值为正负1,根据上面求得的超平面公式,有
w
′
T
x
i
+
b
′
≥
1
,
y
i
=
1
w'^T x_i +b' \geq 1, \quad y_i=1
w′Txi+b′≥1,yi=1
w
′
T
x
i
+
b
′
≤
−
1
,
y
i
=
−
1
w'^T x_i +b' \leq -1, \quad y_i=-1
w′Txi+b′≤−1,yi=−1
我们可以合并一下,得到:
y i ∗ ( w ′ T x i + b ′ ) ≥ 1 y_i *(w'^T x_i +b') \geq 1 yi∗(w′Txi+b′)≥1
这也是分类结果用正负1表示的目的,到这里,我们就把支持向量机形式化表示出来了,实际上,这就是一个约束最优化问题,
m
a
x
2
∣
∣
w
∣
∣
max \quad \frac{2}{||w||}
max∣∣w∣∣2
s
.
t
.
y
i
∗
(
w
′
T
x
i
+
b
′
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
m
s.t. \quad y_i *(w'^T x_i +b') \geq 1, \quad i=1,2,...,m
s.t.yi∗(w′Txi+b′)≥1,i=1,2,...,m
后续的问题,还有如何求解该约束最优化问题、如何处理非线性分类的情况等等,有兴趣的朋友可以进一步深入了解,这里暂不展开。