文章目录
1. 概述
支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机。
SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法
2. SVM 理论
支持向量机的目的是用训练数据集的间隔最大化找到一个最优分离超平面。
下边用一个例子来理解下间隔和分离超平面两个概念。现在有一些人的身高和体重数据,将它们绘制成散点图,是这样的:
如果现在给你一个未知男女的身高和体重,你能分辨出性别吗?直接将已知的点划分为两部分,这个点落在哪一部分就对应相应的性别。那就可以画一条直线,直线以上是男生,直线以下是女生。
现在这个是一个二维平面,可以画直线,如果是三维的呢?该怎么画?我们知道一维平面是点,二维平面是线,三维平面是面。注意:后面的直线、平面都直接叫超平面了。
继续刚才的问题,我们刚才是通过一个分离超平面分出了男和女,这个超平面唯一吗?很明显,并不唯一,这样的超平面有若干个。
如何在众多分离超平面中选择一个最优分离超平面?下面这两个分离超平面,你选哪个?绿色的还是黑色的?
当然是黑色的,可是原理是什么?很简单,原理有两个,分别是:
- 对训练数据进行正确的分类
- 对未知数据也能很好的分类
最优分离超平面其实是和两侧样本点有关,而且只和这些点有关
如上图,当间隔达到最大,到两侧样本点的距离相等的超平面为最优分离超平面。对应上图,Margin对应的就是最优分离超平面的间隔,此时的间隔达到最大。
一般来说,间隔中间是无点区域,里面不会有任何点(理想状态下)。给定一个超平面,我们可以算出这个超平面与和它最接近的数据点之间的距离。那么间隔(Margin)就是这个距离的两倍。
如下图,间隔MarginB小于上张图的MarginA。当出现新的未知点,MarginB分离超平面的泛化能力不如MarginA,用MarginB的分离超平面去分类,错误率大于MarginA
2.1 小结
支持向量机是通过最大化间隔找到一个最优分离超平面。在决定分离超平面的时候,只有极限位置的那两个点有用,其他点根本没有大作用,因为只要极限位置离超平面的距离最大,就是最优的分离超平面了。
3.如何确定最大间隔
如果我们能够确定两个平行超平面,那么两个超平面之间的最大距离就是最大化间隔。如下图所示
左右两个平行超平面将数据完美的分开,我们只需要计算上述两个平行超平面的距离即可。所以,我们找最大化间隔:
(1)找到两个平行超平面,可以划分数据集并且两平面之间没有数据点
(2)最大化上述两个超平面之间的间隔
3.1 确定两个平行超平面
超平面的方程为:
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0
推广到n维空间,方程中
W
,
X
W, X
W,X分别为:
W
=
[
w
1
,
w
2
,
.
.
.
,
w
n
]
T
W = [w_1, w_2,...,w_n]^T
W=[w1,w2,...,wn]T
X
=
[
x
1
,
x
2
,
.
.
.
,
x
n
]
T
X= [x_1, x_2, ..., x_n]^T
X=[x1,x2,...,xn]T
如何确保两超平面之间没有数据点?我们的目的是通过两个平行超平面对数据进行分类,那我们可以这样定义两个超平面。
对每个向量
x
i
x_i
xi满足:
w
⋅
x
i
+
b
≥
1
f
o
r
x
i
属
于
类
别
1
w \cdot x_i+b \geq 1\ \ \ for \ \ \ x_i属于类别1
w⋅xi+b≥1 for xi属于类别1
或者
w
⋅
x
i
+
b
≤
−
1
f
o
r
x
i
属
于
类
别
−
1
w \cdot x_i+b \leq -1 \ \ \ \ for \ \ \ x_i属于类别-1
w⋅xi+b≤−1 for xi属于类别−1
即如下图所示,所有红点都是1类,所有的蓝点都是−1类。
可以将上述两个式子合并为一个:
y
i
(
w
⋅
x
i
+
b
)
≥
1
for all
1
≤
i
≤
n
y_{i}\left(\mathbf{w} \cdot \mathbf{x}_{i}+b\right) \geq 1 \text { for all } 1 \leq i \leq n
yi(w⋅xi+b)≥1 for all 1≤i≤n
3.2 如何确定间隔
假设
h
0
h_0
h0是满足约束
w
⋅
x
i
+
b
=
1
w \cdot x_i+b=1
w⋅xi+b=1的超平面;
h
1
h_1
h1是满足约束
w
⋅
x
i
+
b
=
−
1
w \cdot x_i+b= -1
w⋅xi+b=−1的超平面,且
x
0
x_0
x0是
h
0
h_0
h0上的一点;则
x
0
x_0
x0到平面
h
1
h_1
h1的垂直距离
m
m
m就是我们要的间隔
m
=
w
x
0
+
b
+
1
∣
∣
w
∣
∣
=
2
∣
∣
w
∣
∣
m=\frac{wx_0+b+1}{||w||}=\frac{2}{||w||}
m=∣∣w∣∣wx0+b+1=∣∣w∣∣2
其中
∣
∣
w
∣
∣
||w||
∣∣w∣∣表示
w
w
w的范数,即求所有元素的平方和然后开方
间隔最大化目标如下所示:
max
w
,
b
2
∣
∣
w
∣
∣
s
.
t
y
i
(
w
x
i
+
b
)
⩾
1
(
3.1
)
\underset{w,b}{\max}\frac{2}{||w||} \ \ \ \ \ s.t \ \ y_i\left( wx_i+b \right) \geqslant 1 \ \ (3.1)
w,bmax∣∣w∣∣2 s.t yi(wxi+b)⩾1 (3.1)
上面的最优超平面问题是一个凸优化问题,可以转换成了拉格朗日的对偶问题,判断是否满足KKT条件,然后求解。
式(3.1)可变换成如下所示:
min
w
,
b
1
2
w
T
w
s
.
t
.
1
−
y
i
(
w
⋅
x
i
+
b
)
⩽
0
\underset{w, b}{\min}\,\,\frac{1}{2}w^Tw\,\, \,\, s.t.\,\,\,\,1-y_i\left( w\cdot x_i+b \right) \leqslant 0
w,bmin21wTws.t.1−yi(w⋅xi+b)⩽0
然后可求得拉格朗日函数:
L
(
w
,
b
,
λ
)
=
1
2
w
T
w
+
∑
i
=
1
N
λ
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
L\left( w, b, \lambda \right) =\frac{1}{2}w^Tw+\sum_{i=1}^N{\lambda _i}\left( 1-y_i\left( w^Tx_i+b \right) \right)
L(w,b,λ)=21wTw+i=1∑Nλi(1−yi(wTxi+b))
上式可以转换成如下形式:
min
w
,
b
max
λ
L
(
w
,
b
,
λ
)
s
.
t
.
λ
i
⩾
0
(
3.2
)
\min_{w, b} \underset{\lambda}{\max}\,\,L\left( w, b, \lambda \right) \,\,\,\, s.t.\ \ \ \lambda _i\geqslant 0 \ \ \ \ \ \ \ (3.2)
w,bminλmaxL(w,b,λ)s.t. λi⩾0 (3.2)
对上式的解释:
若
1
−
y
i
(
w
T
x
i
+
b
)
>
0
1-y_i\left( w^Tx_i+b \right) > 0
1−yi(wTxi+b)>0,则
max
λ
L
(
w
,
b
,
λ
)
=
1
2
w
T
w
+
∞
=
∞
\underset{\lambda}{\max}L\left( w, b, \lambda \right) =\frac{1}{2}w^Tw+\infty=\infty
λmaxL(w,b,λ)=21wTw+∞=∞
若
1
−
y
i
(
w
T
x
i
+
b
)
≤
0
1-y_i\left( w^Tx_i+b \right) \leq 0
1−yi(wTxi+b)≤0,则
max
λ
L
(
w
,
b
,
λ
)
=
1
2
w
T
w
+
0
=
1
2
w
T
w
\underset{\lambda}{\max}L\left( w, b, \lambda \right) =\frac{1}{2}w^Tw+0=\frac{1}{2}w^Tw
λmaxL(w,b,λ)=21wTw+0=21wTw
所以:
min
w
,
b
max
λ
L
(
w
,
b
,
λ
)
=
min
w
,
b
(
∞
,
1
2
w
T
w
)
=
1
2
w
T
w
\underset{w, b}{\min} \underset{\lambda}{\max}\,\,L\left( w, b, \lambda \right)=\underset{w,b}{\min}(\infty, \frac{1}{2}w^Tw)=\frac{1}{2}w^Tw
w,bminλmaxL(w,b,λ)=w,bmin(∞,21wTw)=21wTw
式(3.2)继续转换成如下形式:
max
λ
min
w
,
b
L
(
w
,
b
,
λ
)
s
.
t
.
λ
i
⩾
0
(
3.3
)
\underset{\lambda}{\max}\min_{w, b} \,\,L\left( w, b, \lambda \right) \,\,\,\, s.t.\ \ \ \lambda _i\geqslant 0 \ \ \ \ \ \ \ (3.3)
λmaxw,bminL(w,b,λ)s.t. λi⩾0 (3.3)
求导得
∂
L
∂
b
=
−
∑
i
=
1
N
λ
i
y
i
=
0
\frac{\partial L}{\partial b}=-\sum_{i=1}^N{\lambda _iy_i=0}
∂b∂L=−i=1∑Nλiyi=0
将上式代入L中得:
L
(
w
,
b
,
λ
)
=
1
2
w
T
w
+
∑
i
=
1
N
λ
i
−
∑
i
=
1
N
λ
i
y
i
w
T
x
i
L\left( w,b,\lambda \right) =\frac{1}{2}w^Tw+\sum_{i=1}^N{\lambda _i-\sum_{i=1}^N{\lambda _iy_iw^Tx_i}}
L(w,b,λ)=21wTw+i=1∑Nλi−i=1∑NλiyiwTxi
再
L
L
L对
w
w
w求导为0得:
w
=
∑
i
=
1
N
λ
i
y
i
x
i
w\,\,=\,\,\sum_{i=1}^N{\lambda _iy_ix_i}
w=i=1∑Nλiyixi
同理可以求得其他参数,具体见笔记本。
3.3 软间隔SVM
上面例子中提到的样本点都是线性可分的,我们就可以通过分类将样本点完全分类准确,不存在分类错误的情况,这种叫硬间隔,这类模型叫做硬间隔线性SVM。
同样的,可以通过分类将样本点不完全分类准确,存在少部分分类错误的情况,这叫软间隔,这类模型叫做软间隔线性SVM。
不一样的是,因为有分类错误的样本点,但我们仍需要将错误降至最低,所以需要添加一个惩罚项来进行浮动,所以此时求解的最大间隔就变成了这样:
min
ω
,
b
1
2
∥
ω
∥
2
+
C
∑
i
=
1
N
ϵ
i
s
⋅
t
⋅
y
i
(
ω
⋅
x
i
+
b
)
≥
1
−
ϵ
i
,
ϵ
i
≥
0
,
i
=
1
,
2
,
…
,
N
\begin{array}{l} \min _{\omega, b} \frac{1}{2}\|\omega\|^{2}+C \sum_{i=1}^{N} \epsilon_{i} \\ \mathrm{s} \cdot \mathrm{t} \cdot \mathrm{y}_{\mathrm{i}}\left(\omega \cdot \mathrm{x}_{\mathrm{i}}+\mathrm{b}\right) \geq 1-\epsilon_{\mathrm{i}}, \quad \epsilon_{\mathrm{i}} \geq 0, \mathrm{i}=1,2, \ldots, \mathrm{N} \end{array}
minω,b21∥ω∥2+C∑i=1Nϵis⋅t⋅yi(ω⋅xi+b)≥1−ϵi,ϵi≥0,i=1,2,…,N
C代表的是在线性不可分的情况下,对分类错误的惩罚程度;C值越大,分类器就越不愿意允许分类错误(“离群点”)。如果C值太大,分类器就会竭尽全力地在训练数据上少犯错误,而实际上这是不可能/没有意义的,于是就造成过拟合;而C值过小时,分类器就会过于“不在乎”分类错误,于是分类性能就会较差。
3.4 SVM 的损失函数
SVM的原始优化目标和约束条件:
min w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i s ⋅ t ⋅ y i ( ω ⋅ x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 , i = 1 , 2 , … , N \begin{array}{l} \underset {w, b}{\min}\frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i} \\ \\ \mathrm{s} \cdot \mathrm{t} \cdot \mathrm{y}_{\mathrm{i}}\left(\omega \cdot \mathrm{x}_{\mathrm{i}}+\mathrm{b}\right) \geq 1-\xi_{i}, \quad \xi_i \geq 0, \mathrm{i}=1,2, \ldots, \mathrm{N} \end{array} w,bmin21∥w∥2+C∑i=1Nξis⋅t⋅yi(ω⋅xi+b)≥1−ξi,ξi≥0,i=1,2,…,N
线性支持向量机学习除了原始最优化问题,还有另外⼀种解释,就是最优化以下目标函数:
min w , b ∑ i N [ 1 − y i ( w ⋅ x i + b ) ] + + λ ∥ w ∥ 2 \underset {w, b}{\min} \sum_{i}^{N}\left[1-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+}+\lambda\|w\|^{2} w,bmini∑N[1−yi(w⋅xi+b)]++λ∥w∥2
上式也就是SVM的损失函数,目标函数的第一项是经验损失或经验风险,函数
L
(
y
⋅
(
w
⋅
x
+
b
)
)
=
[
1
−
y
(
w
⋅
x
+
b
)
]
+
L(y \cdot(w \cdot x+b))=[1-y(w \cdot x+b)]_{+}
L(y⋅(w⋅x+b))=[1−y(w⋅x+b)]+称为合页损失函数(hinge loss),下标"+"
表示以下取正值的函数
[ z ] + = { z , z > 0 0 , z ≤ 0 [z]_{+}=\left\{\begin{array}{l}z, z>0 \\ 0, z \leq 0\end{array}\right. [z]+={z,z>00,z≤0
这就是说,当样本点 ( x i , y i ) (x_i, y_i) (xi,yi)被正确分类且函数间隔(确信度) y i ( w x i + b ) y_i(wx_i+b) yi(wxi+b)大于1时,损失是0,否则损失是 1 − y i ( w x i + b ) 1-y_i(wx_i+b) 1−yi(wxi+b)。目标函数的第二项是系数为λ的 w w w的L2范数,是正则化项。
接下来证明线性支持向量机原始最优化问题 min w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i s ⋅ t ⋅ y i ( ω ⋅ x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 , i = 1 , 2 , … , N \begin{array}{l} \underset {w, b}{\min}\frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i} \,\,\,\,\,\,\,\, \mathrm{s} \cdot \mathrm{t} \cdot \mathrm{y}_{\mathrm{i}}\left(\omega \cdot \mathrm{x}_{\mathrm{i}}+\mathrm{b}\right) \geq 1-\xi_{i}, \quad \xi_i \geq 0, \mathrm{i}=1,2, \ldots, \mathrm{N} \end{array} w,bmin21∥w∥2+C∑i=1Nξis⋅t⋅yi(ω⋅xi+b)≥1−ξi,ξi≥0,i=1,2,…,N等价于最优化问题 min w , b ∑ i N [ 1 − y i ( w ⋅ x i + b ) ] + + λ ∥ w ∥ 2 \underset {w, b}{\min} \sum_{i}^{N}\left[1-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+}+\lambda\|w\|^{2} w,bmin∑iN[1−yi(w⋅xi+b)]++λ∥w∥2
先令 [ 1 − y i ( w ⋅ x i + b ) ] + = ξ i [1-y_{i}\left(w \cdot x_{i}+b\right)]_{+}=\xi_{i} [1−yi(w⋅xi+b)]+=ξi, 则 ξ i ≥ 0 \xi_i \geq 0 ξi≥0 第二个约束条件成立, 当 1 − y i ( w ⋅ x i + b ) > 0 1-y_{i}\left(w \cdot x_{i}+b\right)>0 1−yi(w⋅xi+b)>0时, 有 y i ( w ⋅ x i + b ) = 1 − ξ i y_{i}\left(w \cdot x_{i}+b\right)= 1-\xi_{i} yi(w⋅xi+b)=1−ξi;当 1 − y i ( w ⋅ x i + b ) ≤ 0 1-y_{i}\left(w \cdot x_{i}+b\right) \leq 0 1−yi(w⋅xi+b)≤0时, ξ = 0 \xi = 0 ξ=0, 因此 y i ( w ⋅ x i + b ) ≥ 1 − ξ i y_{i}\left(w \cdot x_{i}+b\right) \geq 1-\xi_{i} yi(w⋅xi+b)≥1−ξi,所以第一个约束条件成立。所以两个约束条件都满足,优化问题可以写成:
min w , b ∑ i N ξ i + λ ∥ w ∥ 2 \underset {w, b}{\min} \sum_{i}^{N}\xi_i+\lambda\|w\|^{2} w,bmini∑Nξi+λ∥w∥2
若取 λ = 1 2 C \lambda = \frac{1}{2C} λ=2C1 则:
min w , b 1 C ( 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i ) \underset{w, b}{\min} \frac{1}{C}\left(\frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i}\right) w,bminC1(21∥w∥2+Ci=1∑Nξi)
与原始优化问题等价。
3.5 针对非线性可分样本
使用核函数,在非线性SVM中,核函数的选择关系到SVM的分类效果,核函数可以分为线性核函数、多项式核函数、高斯核函数、sigmoid核函数等等,甚至你还可以将这些核函数进行组合,以达到最优线性可分的效果
3.6 多分类SVM
3.6.1. 一对多法
一对多法讲究的是将所有的分类分成两类:一类只包含一个分类,另一类包含剩下的所有分类
举个例子:现在有A、B、C、D四种分类,根据一对多法可以这样分:
①:样本A作为正集,B、C、D为负集
②:样本B作为正集,A、C、D为负集
③:样本C作为正集,A、B、D为负集
④:样本D作为正集,A、B、C为负集
该方法分类速度较快,但训练速度较慢,添加新的分类,需要重新构造分类器
3.6.2.一对一
一对一法讲究的是从所有分类中只取出两类,一个为正类一个为负类
再举个例子:现在有A、B、C三种分类,根据一对一法可以这样分:
①分类器:样本A、B
②分类器:样本A、C
③分类器:样本B、C
该方法的优点是:当新增一类时,只需要训练与该类相关的分类器即可,训练速度较快。缺点是:当类的种类K很多时,分类器个数K(K-1)/2会很多,训练和测试时间较慢
4. QA
4.1 SVM简介
SVM 是一种二分类模型。它的基本思想是在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类,具体来讲,有三种情况(不加核函数的话就是个线性模型,加了之后才会升级为一个非线性模型):
- 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机
- 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
- 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机
4.2 SVM 为什么采用间隔最大化(与感知机的区别)
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。
4.3 SVM的目标(硬间隔)
有两个目标:
- 第一个是使间隔最大化 min w , b 1 2 ∣ ∣ w ∣ ∣ 2 \min_{w, b}\frac{1}{2}||w||^2 minw,b21∣∣w∣∣2
- 第二个是使样本正确分类 y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m y_i(w^Tx_i+b)\geq1, \,\,i=1,2,...,m yi(wTxi+b)≥1,i=1,2,...,m
其中 w w w是超平面参数,目标一是从点到面的距离公式化简来的,具体不展开,目标二就相当于感知机,只是把大于等于0进行缩放变成了大于等于1,为了后面的推导方便。有了两个目标,写在一起,就变成了svm的终极目标:拉格朗日函数。
4.4 求解目标(硬间隔)
(1)将问题三中地两个式子写成拉格朗日函数
(2)满足Slater定理的时候,且过程满足KKT条件的时候,原问题转换成对偶问题
(3)先求内部最小值,对
w
w
w 和
b
b
b 求偏导并令其等于0,将计算结果代入上式。
(4)求解不等式系数
α
\alpha
α,使用SMO(序列最小优化)算法
4.5 SMO算法介绍
SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m} \alpha_{i} y_{i}=0 ∑i=1mαiyi=0,将 α 3 , α 4 . . . α m \alpha_3, \alpha_4... \alpha_m α3,α4...αm都固定住,则 α 1 和 α 2 \alpha_1和\alpha_2 α1和α2的关系也就确定了,这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题
smo两个变量如何选择
SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点
选取的两个变量所对应的样本之间间隔要尽可能大,因为这样更新会带给目标函数值更大的变化
4.6 核函数
满足 K ( x , z ) = ϕ ( x ) ∙ ϕ ( z ) K(x, z)=\phi(x) \bullet \phi(z) K(x,z)=ϕ(x)∙ϕ(z)的 K K K称为核函数,其中 ϕ \phi ϕ是将 x x x从低维空间映射到高维空间的函数,我们在求参数 α i \alpha_i αi时的优化函数为 min ⏟ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i ⋅ x j − ∑ i = 1 m α i \underbrace{\min }_{\alpha} \frac{1}{2} \sum_{i=1, j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i} \cdot x_{j}-\sum_{i=1}^{m} \alpha_{i} α min21∑i=1,j=1mαiαjyiyjxi⋅xj−∑i=1mαi,如果直接将 x i x_i xi和 x j x_j xj映射到高维再计算,计算量非常大,因此使用核函数,将 x i , x j x_i,x_j xi,xj带入核函数 K K K中得到: min ⏟ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j K ( x i , x j ) − ∑ i = 1 m α i \underbrace{\min }_{\alpha} \frac{1}{2} \sum_{i=1, j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} K\left(x_{i}, x_{j}\right)-\sum_{i=1}^{m} \alpha_{i} α min21∑i=1,j=1mαiαjyiyjK(xi,xj)−∑i=1mαi,在用smo算法求解,这样在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题,其他参数和硬间隔svm求法相同