https://www.tinymind.cn/articles/655
https://www.tinymind.cn/articles/3915
https://www.cnblogs.com/zhizhan/p/4430253.html
支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类(binary classification)的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。
思考
如果是一个下图所示的二维坐标系,我们可以轻松的看出两类数据之间的差别。当有新的数据进来时,我们也可以基于其所处的位置,轻松地将新的数据分为某一类。
当新的数据处于两类数据之间的空白区,我们无法准确地判断它属于哪一类,那么我们可以用一条直线给两类样本划分出一个合适界限,根据新的数据在分界线的哪一侧来判断它的类别。
分界线的划分依据是尽可能地同时远离两个类,因为能够将两类数据正确分类的直线有无数条。保持在两个类的正中间,让分解线的“风险”更小,为每个分类的数据分布留出了一些摇动的空间,因而能在测试数据上取得更好的概括性。
当然,我们通过可视化的方法,很容易就能判断出来一个简单的分类器。但是机器不行,如果能让机器具有这样的分辨能力,那么通常情况下,机器比人类判断的会更加准确和精细。所以怎么样才能让机器学得如图上那样的一条“分界线”呢?
思路如下:上面说过,能够将数据正确分类的直线有无数条,我们在找到的所有直线中,选择那条离最接近的数据点距离最远的直线即可。直观地表示出来就是两类数据之间的间隔足够大,能够充分证明分类的正确性,并且为每个新分类的数据留出了一些摇动的空间,而我们这样选择能够让摇动的空间最大化。
如果数据是三维的呢?显然,一条直线是无法将三维的数据区分开,就像一跟细长的针插进了一堆沙子,我们只有用一块平面,才能将这堆沙子隔开。同理,我们用同样的思路,只不过把选择那条离最接近的数据点距离最远的直线,换成选择那个离最接近的数据点距离最远的平面。
以此类推,如果数据是四维的,或者维度更高呢?基于同样的思路,我们训练的目的是得到一个能够将不同样本数据分开的超平面。
支持向量机
给定一个样本数据
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D=\{(x_1, y_1),(x_2, y_2),...,(x_m, y_m)\}
D={(x1,y1),(x2,y2),...,(xm,ym)},
y
i
∈
{
−
1
,
+
1
}
y_i\in\{-1, +1\}
yi∈{−1,+1},包含两类样本。
目标是找到一个超平面
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0,将
D
D
D中的两类样本分开,其中
w
w
w为法向量,决定超平面的方向;
b
b
b为位移项,决定超平面距原点的距离。
样本空间
D
D
D中的任一点
x
x
x,到超平面
(
w
,
b
)
(w,b)
(w,b)的距离可写为:
r
=
∣
w
T
+
b
∣
∣
∣
w
∣
∣
r=\frac{\left|w^T+b\right|}{\left|\left|w\right|\right|}
r=∣∣w∣∣∣∣wT+b∣∣
若超平面能将训练样本正确分类,即对于
D
D
D中任意点
{
x
i
,
y
i
}
\{x_i, y_i\}
{xi,yi}:
- 若目标值 y i = + 1 y_i=+1 yi=+1,则必有 w T + b > 0 w^T+b>0 wT+b>0;对应于样本数据位于超平面上方
- 若目标值 y i = − 1 y_i=-1 yi=−1,则必有 w T + b < 0 w^T+b<0 wT+b<0。对应于样本数据位于超平面下方
我们令
w
T
+
b
w^T+b
wT+b分别等于
±
1
±1
±1,此举直观上相当于将原本没有厚度的超平面,纵向扩展为了一个厚度为2的"体",划分超平面有了上下边界。我们称距超平面上下边界最近的样本点为支持向量,两个异类支持向量到超平面的距离之和为:
γ
=
2
∣
∣
w
∣
∣
\gamma=\frac{2}{\left|\left|w\right|\right|}
γ=∣∣w∣∣2
称为间隔。
按我们最初的思考,到了这一步的目标就是最大化这个间隔。
由间隔的表达形式可见,最大化间隔,仅需最大化
∣
∣
w
∣
∣
−
1
{\left|\left|w\right|\right|}^{-1}
∣∣w∣∣−1,等价于最小化
∣
∣
w
∣
∣
2
{\left|\left|w\right|\right|}^{2}
∣∣w∣∣2。即:
min
m
b
1
2
∣
∣
w
∣
∣
2
\min_{m b}\frac{1}{2}\left|\left|w\right|\right|^2
mbmin21∣∣w∣∣2
s
.
t
.
y
i
(
w
T
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
m
.
s.t.y_i(w^T+b)≥1,i=1,2,...,m.
s.t.yi(wT+b)≥1,i=1,2,...,m.
这就是支持向量机的基本型。
对偶问题
支持向量机的基本型本身是一个凸二次规划问题,可用现成的优化计算包进行求解,但是我们可以有更高效的办法。
对支持向量机的基本型使用拉格朗日乘子法,给每条约束添加拉格朗日乘子
α
i
≥
0
\alpha_i\ge0
αi≥0,则该问题的拉格朗日函数为:
L
(
ω
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
ω
T
x
i
+
b
)
)
L(\omega,b,\alpha)=\frac12\left|\left|w\right|\right|^2+\sum_{i=1}^{m}\alpha_i(1-y_i(\omega^Tx_i+b))
L(ω,b,α)=21∣∣w∣∣2+i=1∑mαi(1−yi(ωTxi+b))
令
L
(
ω
,
b
,
α
)
L(\omega,b,\alpha)
L(ω,b,α)对
ω
\omega
ω和
b
b
b的偏导为0可得:
ω
=
∑
i
=
1
m
α
i
y
i
x
i
\omega=\sum_{i=1}m\alpha_iy_ix_i
ω=i=1∑mαiyixi
0
=
∑
i
=
1
m
α
i
y
i
0=\sum_{i=1}m\alpha_iy_i
0=i=1∑mαiyi
代入拉格朗日函数可得到其对偶问题:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
\max_\alpha\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx^T_ix_j
αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj
s
.
t
.
∑
i
=
1
m
α
i
y
i
=
0
,
s.t.\sum_{i=1}^m\alpha_iy_i=0,
s.t.i=1∑mαiyi=0,
α
≥
0
,
i
=
1
,
2
,
.
.
.
,
m
\alpha\ge0,i=1,2,...,m
α≥0,i=1,2,...,m
利用SMO算法解出
α
\alpha
α后可求出
ω
\omega
ω和
b
b
b即可得到模型:
f
(
x
)
=
ω
T
x
+
b
=
∑
i
=
1
m
α
i
y
i
x
i
T
x
+
b
f(x)=\omega^Tx+b=\sum_{i=1}m\alpha_iy_ix_i^Tx+b
f(x)=ωTx+b=i=1∑mαiyixiTx+b
且过程中需满足KKT条件:
{
α
i
≥
0
;
y
i
f
(
x
i
)
−
1
≥
0
;
α
i
(
y
i
f
(
x
i
)
−
1
)
=
0
\begin{cases} \alpha_i\ge0; \\ y_if(x_i)-1\ge0; \\ \alpha_i(y_if(x_i)-1)=0 \end{cases}
⎩⎪⎨⎪⎧αi≥0;yif(xi)−1≥0;αi(yif(xi)−1)=0
于是,对于任意训练样本,总有
α
i
=
0
\alpha_i=0
αi=0或者
y
i
f
(
x
i
)
=
1
y_if(x_i)=1
yif(xi)=1。
若
α
i
=
0
\alpha_i=0
αi=0,则该样本
x
i
,
y
i
x_i,y_i
xi,yi不会在模型的求和中出现;若
y
i
f
(
x
i
)
=
1
y_if(x_i)=1
yif(xi)=1,即所有的样本点都位于最大间隔边界上,即全都是支持向量。这是SVM的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终的模型仅与支持向量有关。
SMO算法
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,固定其他参数,这样在参数初始化后,SMO不断执行如下步骤直至收敛:
- 选取一对需要更新的变量 α i \alpha_i αi和 α j \alpha_j αj
- 固定 α i \alpha_i αi和 α j \alpha_j αj以外的参数,求解对偶问题获得更新后的 α i \alpha_i αi和 α j \alpha_j αj
核函数-核技巧
在上面的讨论中,我们都假定训练样本
D
D
D在它所组成的样本空间内,存在一个划分超平面能将样本正确分类,也成为线性可分。然而现实任务中,原始的样本空间也许不存在这样的超平面,即样本线性不可分。
对于这样的问题,我们的解决办法是:将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。
可以知道的是:如果原始空间的维度是有限的,即属性数量是有限的,那么一定存在一个高维的特征空间使样本线性可分。