7.1引言
支持向量机(SupportVector Machines)是最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出,目前的版本(soft margin)是由Corinna Cortes 和 Vapnik在1993年提出,并在1995年发表。深度学习(2012)出现之前,SVM被认为机器学习中近十几年来最成功,表现最好的算法。好了,开始进入正题吧。
我们知道,分类的目的是学会一个分类函数或分类模型(或者叫做分类器),该模型能把数据库中的数据项映射到给定类别中的某一个,从而可以用于预测未知类别。对于用于分类的支持向量机,它是个二分类的分类模型。也就是说,给定一个包含正例和反例(正样本点和负样本点)的样本集合,支持向量机的目的是寻找一个超平面来对样本进行分割,把样本中的正例和反例用超平面分开,但是不是简单地分看,其原则是使正例和反例之间的间隔最大。学习的目标是在特征空间中找到一个分类超平面 w x + b = 0 wx+b=0 wx+b=0,分类面由法向量w和截距b决定。分类超平面将特征空间划分两部分,一部分是正类,一部分是负类。法向量指向的一侧是正类,另一侧为负类。
用一个二维空间里仅有两类样本的分类问题来举个小例子。假设我们给定了下图左图所示的两类点Class1和Class2(也就是正样本集和负样本集)。我们的任务是要找到一个线,把他们划分开。你会告诉我,那简单,挥笔一画,洋洋洒洒五颜六色的线就出来了,然后很得意的和我说,看看吧,下面右图,都是你要的答案,如果你还想要,我还可以给你画出无数条。对,没错,的确可以画出无数条。那哪条最好呢?你会问我,怎么样衡量“好”?对于分类来说,我们需要确定一个分类的线,如果新的一个样本到来,如果落在线的左边,那么这个样本就归为class1类,如果落在线的右边,就归为class2这一类。那哪条线才是最好的呢?我们仍然认为是中间的那条,因为这样,对新的样本的划分结果我们才认为最可信,那这里的“好”就是可信了。另外,在二维空间,分类的就是线,如果是三维的,分类的就是面了,更高维,也就是超平面了,所以一般将任何维的分类边界都统称为超平面。
好了。对于人来说,我们可以轻易的找到这条线或者超平面(当然了,那是因为你可以看到样本具体的分布是怎样的,如果样本的维度大于三维的话,我们就没办法把这些样本像上面的图一样画出来了,这时候就看不到了,这时候靠人的双眼也无能为力了。但计算机怎么知道怎么找到这条线呢?我们怎么把我们的找这条线的方法告诉他,让他按照我们的方法来找到这条线呢?呃,我们要建模,把我们的意识“强加”给计算机的某个数学模型,让他去求解这个模型,得到某个解,这个解就是我们的这条线,那这样目的就达到了。
支持向量机模型由简至繁可分为三种模型:当训练数据训练可分时,通过硬间隔最大化,可学习到硬间隔支持向量机,又叫线性可分支持向量机;当训练数据训练近似可分时,通过软间隔最大化,可学习到软间隔支持向量机,又叫线性支持向量机;当训练数据训练不可分时,通过软间隔最大化及核技巧(kernel trick),可学习到非线性支持向量机。当数据集较大时,就不易求解出最优参数,本文要讲解的就是序列最小最优算法(SMO)。好了,开始算法学习吧。
7.2线性可分支持向量机与硬间隔最大化
在讲解线性可分支持向量机与硬间隔最大化之前,我们先回顾一下感知机的模型,感知机的模型就是尝试找到一条直线,能够把二元数据隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类分开。关于感知机的模型具体算法及实现请参看博文:
理论讲解:https://blog.csdn.net/u013162035/article/details/83895099
算法实现(Python):https://blog.csdn.net/u013162035/article/details/83899200
给定一个数据集,
T
=
{
(
x
1
,
y
1
)
,
(
x
1
,
y
1
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{ (x_1,y_1),(x_1,y_1),...,(x_N,y_N)\}
T={(x1,y1),(x1,y1),...,(xN,yN)},
x
i
∈
χ
⊆
R
n
x_i \in \chi \subseteq R^n
xi∈χ⊆Rn ,
y
i
∈
Y
=
{
+
1
,
−
1
}
y_i \in Y=\{+1,-1\}
yi∈Y={+1,−1} ,
i
=
1
,
2
,
3
,
.
.
.
,
N
i=1,2,3,...,N
i=1,2,3,...,N 。
分类超平面:
w
⋅
x
+
b
=
0
w\cdot x+b=0
w⋅x+b=0
分类决策函数:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x+b)
f(x)=sign(w⋅x+b)
若是二分问题,则可通过分类决策函数进行分类,对于感知机我们只需将数据进行分类,然而在SVM中,我们不仅要进行分类,还要是的分类间隔最大,请读者朋友进行对比学习。
二分问题就转化为间隔最大化或等价求解显相应的凸二次规划的问题。接下来我会带领大家一步一步进行推到求解。
7.2.1函数间隔和几何间隔
我们需要先了解下函数间隔和几何间隔的知识。
- 函数间隔
在分离超平面固定为 w T ⋅ x + b = 0 w^T\cdot x+b=0 wT⋅x+b=0的时候, ∣ w T ⋅ x + b ∣ |w^T\cdot x+b| ∣wT⋅x+b∣表示点 x x x到超平面的相对距离。通过观察 ∣ w ⋅ x + b ∣ |w\cdot x+b| ∣w⋅x+b∣和 y y y是否同号,我们判断分类是否正确,这些知识我们在感知机模型里都有讲到。
定义这里我们引入函数间隔的概念,对于给定的训练数据集
T
T
T和超平面
(
w
,
b
)
(w,b)
(w,b) ,定义超平面
(
w
,
b
)
(w,b)
(w,b)和样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的函数间隔
γ
′
\gamma '
γ′为:
γ
′
=
y
(
w
T
⋅
x
+
b
)
\gamma '=y(w^T\cdot x+b)
γ′=y(wT⋅x+b)
可以看到,它就是感知机模型里面的误分类点到超平面距离的分子。对于训练集中
m
m
m个样本点对应的
m
m
m个函数间隔的最小值,就是整个训练集的函数间隔。
函数间隔并不能正常反应点到超平面的距离,在感知机模型里我们也提到,当分子成比例的增长时,分母也是成倍增长。为了统一度量,我们需要对法向量 w w w上约束条件,这样我们就得到了几何间隔。
- 几何间隔
对于上述的函数间隔,若 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣,则函数间隔就成为了几何间隔。为了更加详细的说明,下图3给出了超平面 ( w , b ) (w,b) (w,b)以及法向量 w w w。点 A A A表示某一实例 x i x_i xi ,其类标记为 y i = + 1 y_i=+1 yi=+1。点 A A A与超平面 ( w , b ) (w,b) (w,b)的距离由线段 A B AB AB给出,记作 γ i \gamma _i γi。
γ i = w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ \gamma _i = \frac{w}{||w||}\cdot x_i+ \frac{b}{||w||} γi=∣∣w∣∣w⋅xi+∣∣w∣∣b
其中, ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣ 为 w w w的 L L L范数。这是点 A A A在超平面正的一侧的情况。如果点 A A A在超平面负的一侧,即 y i = − 1 y_i=-1 yi=−1 ,那么点与超平面的距离为:
γ i = − w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ \gamma _i = -\frac{w}{||w||}\cdot x_i+ \frac{b}{||w||} γi=−∣∣w∣∣w⋅xi+∣∣w∣∣b
一般地,当样本点 ( x i , y i ) (x_i,y_i) (xi,yi)被超平面 ( w , b ) (w,b) (w,b)正确分类时,点 x i x_i xi与超平面 ( w , b ) (w,b) (w,b)的距离是:
γ
i
=
y
i
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
\gamma _i = y_i\frac{w}{||w||}\cdot x_i+ \frac{b}{||w||}
γi=yi∣∣w∣∣w⋅xi+∣∣w∣∣b
下面就给出几何间隔的概念。
==(定义)==对于给定的训练数据集
T
T
T 和超平面
(
w
,
b
)
(w,b)
(w,b) ,定义超平面
(
w
,
b
)
(w,b)
(w,b)和样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的几何间隔为:
γ i = − w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ \gamma _i = -\frac{w}{||w||}\cdot x_i+ \frac{b}{||w||} γi=−∣∣w∣∣w⋅xi+∣∣w∣∣b
几何间隔才是点到超平面的真正距离,感知机模型里用到的距离就是几何距离。
函数间隔和几何间隔的关系如下:
γ = γ ^ ∣ ∣ w ∣ ∣ \gamma = \frac{\hat{\gamma}}{||w||} γ=∣∣w∣∣γ^
如果 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣ ,如果函数间隔和几何间隔相同。
7.2.2间隔最大化
支持向量机的基本思想是政务划分数据集并找到几何间隔最大的分离超平面。
- 最大间隔分离超平面
由上一节内容,我们找到了几何间隔,由此可以表述为下面的约束最优问题:
m
a
x
w
,
b
γ
^
∣
∣
w
∣
∣
max_{w,b}\frac{\hat{\gamma}}{||w||}
maxw,b∣∣w∣∣γ^
s
.
t
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
≥
γ
^
,
i
=
1
,
2
,
.
.
.
,
N
s.t y_i(\frac{w}{||w||}\cdot x_i+ \frac{b}{||w||}) \geq \hat{\gamma},i=1,2,...,N
s.tyi(∣∣w∣∣w⋅xi+∣∣w∣∣b)≥γ^,i=1,2,...,N
考虑到几何间隔和函数间隔的关系,我们可以将上式改为如下形式:
m
a
x
w
,
b
γ
max_{w,b}\gamma
maxw,bγ
s
.
t
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
≥
γ
,
i
=
1
,
2
,
.
.
.
,
N
s.t y_i(\frac{w}{||w||}\cdot x_i+ \frac{b}{||w||}) \geq \gamma,i=1,2,...,N
s.tyi(∣∣w∣∣w⋅xi+∣∣w∣∣b)≥γ,i=1,2,...,N
函数间隔并不影响几何间隔,这样就可以取 γ ^ = 1 \hat{\gamma} = 1 γ^=1代替,最大化 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} ∣∣w∣∣1和最小化 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}||w||^2 21∣∣w∣∣2是等价的,因此还可以将上述式子改为如下形式:
m
i
n
w
,
b
1
2
∣
∣
w
∣
∣
2
min_{w,b}\frac{1}{2}||w||^2
minw,b21∣∣w∣∣2
s
.
t
y
i
(
w
⋅
x
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
N
s.t y_i(w\cdot x +b) \geq 1 ,i=1,2,...,N
s.tyi(w⋅x+b)≥1,i=1,2,...,N
这就成了一个二次凸优化问题。什么叫凸?凸集是指有这么一个点的集合,其中任取两个点连一条直线,这条线上的点仍然在这个集合内部,因此说“凸”是很形象的。例如下图,对于凸函数(在数学表示上,满足约束条件是仿射函数,也就是线性的 A x + b Ax+b Ax+b的形式)来说,局部最优就是全局最优,但对非凸函数来说就不是了。二次表示目标函数是自变量的二次函数。
好了,既然是凸二次规划问题,就可以通过一些现成的 QP (Quadratic Programming) 的优化工具来得到最优解。所以,我们的问题到此为止就算全部解决了。虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过 Lagrange Duality 变换到对偶变量 (dual variable) 的优化问题之后,可以找到一种更加有效的方法来进行求解,而且通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。也就说,除了用解决QP问题的常规方法之外,还可以应用拉格朗日对偶性,通过求解对偶问题得到最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一是对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。我们这里是线性的,因此我们先讲对偶算法。关于对偶算法会在下一节讲解。
- 最大间隔分离超平面的唯一性
关于最大间隔分离超平面的唯一性证明请参看《统计学习方法》。
-** 支持向量**
在二维线性可分的情况下,训练数据集的样本点与分离超平面距离最近的样本点的实例称为支持向量机,支持向量是使得约束条件:
m
i
n
w
,
b
1
2
∣
∣
w
∣
∣
2
min_{w,b}\frac{1}{2}||w||^2
minw,b21∣∣w∣∣2
s
.
t
y
i
(
w
⋅
x
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
N
s.t y_i(w\cdot x +b) \geq 1 ,i=1,2,...,N
s.tyi(w⋅x+b)≥1,i=1,2,...,N
等号成立的点,即:
y i ( w ⋅ x + b ) − 1 = 0 y_i(w\cdot x +b) - 1 = 0 yi(w⋅x+b)−1=0
对的正例点,支持向量在超平面:
H
1
:
w
⋅
x
+
b
=
1
H_1:w\cdot x+b=1
H1:w⋅x+b=1
上,对的负例点,支持向量在超平面:
H 2 : w ⋅ x + b = − 1 H_2:w\cdot x+b=-1 H2:w⋅x+b=−1
上,如下图所示,在 H 1 H_1 H1和 H 2 H_2 H2的点就是支持向量。
【注】没有实数点在 H 1 H_1 H1和 H 2 H_2 H2中间, H 1 H_1 H1和 H 2 H_2 H2是平行的。 H 1 H_1 H1和 H 2 H_2 H2的距离称为间隔;间隔依据超平面的法向量 w w w ,等于 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} ∣∣w∣∣2 , H 1 H_1 H1和 H 2 H_2 H2称为间隔边界。
例1:数据与感知机模型的例子的数据一样,实例点是
x
1
=
(
3
,
3
)
T
x_1=(3,3)^T
x1=(3,3)T ,
x
2
=
(
4
,
3
)
T
x_2=(4,3)^T
x2=(4,3)T ,负实例点是
x
3
=
(
1
,
1
)
T
x_3=(1,1)^T
x3=(1,1)T ,试求间隔最大分离超平面。
感知机模型:https://blog.csdn.net/u013162035/article/details/83895099
解:根据前文所述,构建约束最优化问题:
m
i
n
w
,
b
=
1
2
(
w
1
2
+
w
2
2
)
min_{w,b}=\frac{1}{2}(w_1^2 +w_2^2 )
minw,b=21(w12+w22)
s
.
t
   
3
w
1
+
3
w
2
+
b
≥
 
1
s.t \: \: \: 3w_1+3w_2+b\geq\:1
s.t3w1+3w2+b≥1
4
w
1
+
3
w
2
+
b
≥
 
1
4w_1+3w_2+b\geq\:1
4w1+3w2+b≥1
  ​
−
w
1
−
w
2
+
b
≥
 
1
\, \,\!-w_1-w_2+b\geq\:1
−w1−w2+b≥1
求解得到:
w 1 = w 2 = 1 2 , b = − 2 w_1=w_2=\frac{1}{2},b=-2 w1=w2=21,b=−2
于是最大间隔分离超平面为:
1 2 x ( 1 ) + 1 2 x 2 − 2 = 0 \frac{1}{2}x^{(1)}+\frac{1}{2}x^{2}-2=0 21x(1)+21x2−2=0
其中, x 1 = ( 3 , 3 T ) x_1=(3,3^T) x1=(3,3T)与 x 3 = ( 1 , 1 ) T x_3=(1,1)^T x3=(1,1)T是支持向量。
7.2.3对偶算法 – 求解线性可分支持向量机算法
在上问的例子中,我们给出了解,但是没有给出求解的过程,那么怎么才能求解呢?这就需要用到对偶算法进行求解。
【注】关于如何使用拉格朗日求解线性可分支持向量的解参看【统计学习方法7.1.4-李航】。
算法:线性可分支持向量机学习算法
输入:数线性可分训练集, T = { ( x 1 , y 1 ) , ( x 1 , y 1 ) , . . . , ( x N , y N ) } T=\{ (x_1,y_1),(x_1,y_1),...,(x_N,y_N)\} T={(x1,y1),(x1,y1),...,(xN,yN)},其中, x i ∈ χ ⊆ R n x_i \in \chi \subseteq R^n xi∈χ⊆Rn , y i ∈ Y = { + 1 , − 1 } y_i \in Y=\{+1,-1\} yi∈Y={+1,−1} , i = 1 , 2 , 3 , . . . , N i=1,2,3,...,N i=1,2,3,...,N 。
输出:分离超平面和分类决策函数
(1)构建最优问题
m i n α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i , x j ) − ∑ i = 1 N α i min_{\alpha} \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i,x_j)-\sum^N_{i=1}\alpha_i minα21∑i=1N∑j=1Nαiαjyiyj(xi,xj)−∑i=1Nαi
s . t ∑ i = 1 N α i y i = 0 s.t \sum_{i=1}^N\alpha_iy_i=0 s.t∑i=1Nαiyi=0
0 ≤ α i ≤ C , i = 1 , 2 , … , N 0≤α_i≤C,i=1,2,…,N 0≤αi≤C,i=1,2,…,N
(2)计算
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
w^*=\sum^N_{i=1}\alpha_i^*y_ix_i
w∗=∑i=1Nαi∗yixi
选择 α i α_i αi的一个正分量 0 ≤ α j ∗ ≤ C 0≤α_j^*≤C 0≤αj∗≤C,
b ∗ = y i − ∑ i = 1 N α i ∗ y i ( x i ⋅ x j ) b^*=y_i-\sum^N_{i=1}\alpha_i^*y_i(x_i\cdot x_j) b∗=yi−∑i=1Nαi∗yi(xi⋅xj)
(3)构建决策函数:
f
(
x
)
=
s
i
g
n
(
w
∗
x
+
b
∗
)
f(x)=sign(w^* x+b^*)
f(x)=sign(w∗x+b∗)
【注】只依赖于训练数据集中对应于 α i ∗ > 0 α_i^*>0 αi∗>0的样本点 ( x i , y i ) (x_i,y_i) (xi,yi),其他样本点对 w ∗ w^* w∗和 b ∗ b^* b∗没有影响。我们将训练数据集中对应于 α i ∗ > 0 α_i^*>0 αi∗>0的实数点 x i ∈ R n x_i∈R^n xi∈Rn成为支持向量。
例2:与例1一样,实例点是 x 1 = ( 3 , 3 ) T x_1=(3,3)^T x1=(3,3)T , x 2 = ( 4 , 3 ) T x_2=(4,3)^T x2=(4,3)T ,负实例点是 x 3 = ( 1 , 1 ) T x_3=(1,1)^T x3=(1,1)T ,求线性可分支持向量机。
解:对偶问题是:
m
i
n
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
,
x
j
)
−
∑
i
=
1
N
α
i
min_{\alpha} \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i,x_j)-\sum^N_{i=1}\alpha_i
minα21∑i=1N∑j=1Nαiαjyiyj(xi,xj)−∑i=1Nαi
1 2 ( 18 α 1 2 + 25 α 2 2 + 2 α 3 2 + 42 α 1 α 2 − 12 α 1 α 3 − 14 α 2 α 3 ) − α 1 − α 2 − α 3 \frac{1}{2}(18\alpha_1^2+25\alpha_2^2+2α_3^2+42α_1 α_2-12α_1 α_3-14α_2 α_3)-α_1-α_2-α_3 21(18α12+25α22+2α32+42α1α2−12α1α3−14α2α3)−α1−α2−α3
s . t . α 1 + α 2 − α 3 = 0 s.t. α_1+α_2-α_3=0 s.t.α1+α2−α3=0
α i ≥ 0 , i = 1 , 2 , 3 α_i≥0,i=1,2,3 αi≥0,i=1,2,3
将 α 3 = α 1 + α 2 α_3=α_1+α_2 α3=α1+α2带入目标函数记作:
S ( α 1 , α 2 ) = 4 α 1 2 + 13 ⁄ 2 α 2 2 + + 100 α 1 α 2 − 2 α 1 − 2 α 2 S(α_1,α_2 )=4α_1^2+13⁄2 α_2^2++100α_1 α_2-2α_1-2α_2 S(α1,α2)=4α12+13⁄2α22++100α1α2−2α1−2α2
对其 α 1 , α 2 α_1,α_2 α1,α2求导等于 0 0 0,得到极值 ,但不满足 α 2 ≥ 0 α_2≥0 α2≥0,所以极小值应该在边界。
则令 α 1 , α 2 α_1,α_2 α1,α2为0,可知在 α 1 = 1 / 4 , α 2 = 0 α_1=1/4,α_2=0 α1=1/4,α2=0达到极小,此时 α 3 = 1 / 4 α_3=1/4 α3=1/4。
可求得:
w
1
∗
=
w
2
∗
=
1
/
2
w_1^*=w_2^*=1/2
w1∗=w2∗=1/2
b ∗ = − 2 b^*=-2 b∗=−2
分离超平面:
1 2 x ( 1 ) + 1 2 x 2 − 2 = 0 \frac{1}{2}x^{(1)}+\frac{1}{2}x^{2}-2=0 21x(1)+21x2−2=0
分类决策函数:
f ( x ) = s i g n ( 1 2 x ( 1 ) + 1 2 x 2 − 2 ) f(x)=sign(\frac{1}{2}x^{(1)}+\frac{1}{2}x^{2}-2) f(x)=sign(21x(1)+21x2−2)
参考文献:
[1]机器学习实战,https://www.manning.com/books/machine-learning-in-action