【机器学习】 SVM(Support Vector Machine)——支持向量机(上)
转载来源
https://zhuanlan.zhihu.com/p/29604517
https://zhuanlan.zhihu.com/p/29872905
什么是SVM
SVM的英文全称是Support Vector Machine,我们叫它支持向量机。支持向量机是我们用于分类的一种算法。让我们以一个小故事的形式,开启我们的SVM之旅吧。
在很久以前的情人节,一位大侠要去救他的爱人,但天空中的魔鬼和他玩了一个游戏。
魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。”
于是大侠这样放,干的不错?
然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。显然,大侠需要对棍做出调整。
SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。这个间隙就是球到棍的距离。
现在好了,即使魔鬼放了更多的球,棍仍然是一个好的分界线。
魔鬼看到大侠已经学会了一个trick(方法、招式),于是魔鬼给了大侠一个新的挑战。
现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。
现在,从空中的魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。
再之后,无聊的大人们,把这些球叫做data,把棍子叫做classifier,找到最大间隙的trick叫做optimization,拍桌子叫做kernelling, 那张纸叫做hyperplane。
概述一下:
当一个分类问题,数据是线性可分的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东西就是核函数(kernel),用于切分小球的纸,就是超平面。
也许这个时候,你还是似懂非懂,没关系。根据刚才的描述,可以看出,问题是从线性可分延伸到线性不可分的。那么,我们就按照这个思路,进行原理性的剖析。
线性SVM
先看下线性可分的二分类问题:
上图中的
(
a
)
(a)
(a)是已有的数据,红色和蓝色分别代表两个不同的类别。数据显然是线性可分的,但是将两类数据点分开的直线显然不止一条。上图的
(
b
)
(b)
(b)和
(
c
)
(c)
(c)分别给出了B、C两种不同的分类方案,其中黑色实线为分界线,术语称为“决策面”。每个决策面对应了一个线性分类器。虽然从分类结果上看,分类器A和分类器B的效果是相同的。但是他们的性能是有差距的,看下图:
在"决策面"不变的情况下,我又添加了一个红点。可以看到,分类器B依然能很好的分类结果,而分类器C则出现了分类错误。显然分类器B的"决策面"放置的位置优于分类器C的"决策面"放置的位置,SVM算法也是这么认为的,它的依据就是分类器B的分类间隔比分类器C的分类间隔大。这里涉及到第一个SVM独有的概念"分类间隔"。在保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。显然每一个可能把数据集正确分开的方向都有一个最优决策面(有些方向无论如何移动决策面的位置也不可能将两类样本完全分开),而不同方向的最优决策面的分类间隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为"支持向量"。
数学建模
求解这个"决策面"的过程,就是最优化。一个最优化问题通常有两个基本的因素:
- 目标函数,也就是你希望什么东西的什么指标达到最好
- 优化对象,你期望通过改变哪些因素来使你的目标函数达到最优
在线性SVM算法中,目标函数显然就是那个"分类间隔",而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象(“分类间隔"和"决策面”)进行数学描述。按照一般的思维习惯,我们先描述决策面。
数学建模的时候,先在二维空间建模,然后再推广到多维。
"决策面"方程
"分类间隔"方程
我们目的是为了找出一个分类效果好的超平面作为分类器。分类器的好坏的评定依据是分类间隔
W
=
2
d
W=2d
W=2d的大小,即分类间隔
W
W
W越大,我们认为这个超平面的分类效果越好。此时,求解超平面的问题就变成了求解分类间隔
W
W
W最大化的为题。
W
W
W的最大化也就是
d
d
d最大化的。
约束条件
看起来,我们已经顺利获得了目标函数的数学形式。但是为了求解 W W W的最大值。我们不得不面对如下问题:
- 我们如何判断超平面是否将样本点正确分类?
- 我们知道要求距离 d d d的最大值,我们首先需要找到支持向量上的点,怎么在众多的点中选出支持向量上的点呢?
上述我们需要面对的问题就是约束条件,也就是说我们优化的变量
d
d
d的取值范围受到了限制和约束。事实上约束条件一直是最优化问题里最让人头疼的东西。但既然我们已经知道了这些约束条件确实存在,就不得不用数学语言对他们进行描述。但SVM算法通过一些巧妙的小技巧,将这些约束条件融合到一个不等式里面。
线性SVM优化问题基本描述
求解准备
我们已经得到支持向量机的基本数学模型,接下来的问题就是如何根据数学模型,求得我们想要的最优解。在学习求解方法之前,我们得知道一点,想用下面讲述的求解方法有一个前提,就是我们的目标函数必须是凸函数。理解凸函数,我们还要先明确另一个概念,凸集。看一幅图可能更容易理解:
左右两图都是一个集合。如果集合中任意2个元素连线上的点也在集合中,那么这个集合就是凸集。显然,上图中的左图是一个凸集,上图中的右图是一个非凸集。
凸函数的定义也是如此,其几何意义表示为函数任意两点连线上的值大于对应自变量处的函数值。若这里凸集
C
C
C即某个区间
L
L
L,那么,设函数
f
f
f为定义在区间
L
L
L上的函数,若对
L
L
L上的任意两点
x
1
x_1
x1,
x
2
x_2
x2和任意的实数
λ
λ
λ,
λ
λ
λ属于(0,1),总有:
上式推导过程:
则函数
f
f
f称为
L
L
L上的凸函数,且其上镜图(在函数图像上方的点集)为一个凸集。再看一幅图,也许更容易理解:
像上图这样的函数,它整体就是一个非凸函数,我们无法获得全局最优解的,只能获得局部最优解。比如红框内的部分,如果单独拿出来,它就是一个凸函数。
而这里我们的目标函数就是一个凸函数,所以可以使用接下来讲述的方法求取最优解。
通常我们需要求解的最优化问题有如下几类:
- 无约束优化问题,可以写为:
- 有等式约束的优化问题,可以写为:
- 有不等式约束的优化问题,可以写为:
对于第一类的优化问题,常常使用的方法就是费马定理,即使用求取函数 f ( x ) f(x) f(x)的导数,然后令其为零,可以求得候选最优值,再在这些候选值中验证;如果是凸函数,可以保证是最优解。这也就是我们高中经常使用的求函数的极值的方法。
对于第二类的优化问题,常常使用的方法就是拉格朗日乘数法(Lagrange Multiplier Method) ,即把等式约束
h
i
(
x
)
h_i(x)
hi(x)用一个系数与
f
(
x
)
f(x)
f(x)写为一个式子,称为拉格朗日函数,而系数称为拉格朗日乘子。通过拉格朗日函数对各个变量求偏导,令其为零,可以求得候选值集合,然后验证求得最优值。如下图:
对于第三类的优化问题,常常使用的方法就是KKT条件。同样地,我们把所有的等式、不等式约束与 f ( x ) f(x) f(x)写为一个式子,也叫拉格朗日函数,系数也称拉格朗日乘子,通过一些条件,可以求出最优值的必要条件,这个条件称为KKT条件。
必要条件、充分条件如果不理解,可以看下面这句话:
- 如果没有A,则必然没有B;如果有A而未必有B,则A就是B的必要条件。
- 如果有A,则必然有B;如果有B,不一定有A,那么A就是B的充分条件。
了解到这些,很显然,我们的优化问题属于第三类问题。在学习求解最优化问题之前,我们还要学习两个东西:拉格朗日函数和KKT条件。
拉格朗日函数
首先,我们先要从宏观的视野上了解一下拉格朗日对偶问题出现的原因和背景。
我们知道我们要求解的是最小化问题,所以一个直观的想法是如果我能够构造一个函数,使得该函数在可行解区域内与原目标函数完全一致,而在可行解区域外的数值非常大,甚至是无穷大,那么这个没有约束条件的新目标函数的优化问题就与原来有约束条件的原始目标函数的优化问题是等价的问题。这就是使用拉格朗日方程的目的,它将约束条件放到目标函数中,从而将有约束优化问题转换为无约束优化问题。
随后,人们又发现,使用拉格朗日获得的函数,使用求导的方法求解依然困难。进而,需要对问题再进行一次转换,即使用一个数学技巧:拉格朗日对偶。
所以,显而易见的是,我们在拉格朗日优化我们的问题这个道路上,需要进行下面二个步骤:
- 将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数
- 使用拉格朗日对偶性,将不易求解的优化问题转化为易求解的优化
下面,进行第一步:
- 将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数:
公式变形如下:
注意这里人为规定拉格朗日乘子, α i α_i αi,大于等于0。现在我们令:
接下来,我们进行第二步:
- 将不易求解的优化问题转化为易求解的优化
我们看一下我们的新目标函数,先求最大值,再求最小值。这样的话,我们首先就要面对带有需要求解的参数 w w w和 r r r的方程,而 α i α_i αi又是不等式约束,这个求解过程不好做。所以,我们需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:
交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用 d ∗ d^* d∗来表示。而且 d ∗ < = p ∗ d^*<=p^* d∗<=p∗。我们关心的是 d ∗ = p ∗ d^*=p^* d∗=p∗的时候,这才是我们要的解。
需要什么条件才能让 d ∗ = p ∗ d^*=p^* d∗=p∗呢?
- 首先必须满足这个优化问题是凸优化问题
- 其次,需要满足KKT条件
凸优化问题的定义是:求取最小值的目标函数为凸函数的一类优化问题。目标函数是凸函数我们已经知道,这个优化问题又是求最小值。所以我们的最优化问题就是凸优化问题。
接下里,就是探讨是否满足KKT条件了。
KKT条件
我们已经使用拉格朗日函数对我们的目标函数进行了处理,生成了一个新的目标函数。通过一些条件,可以求出最优值的必要条件,这个条件就是接下来要说的KKT条件。一个最优化模型能够表示成下列标准形式:
就是上面说的三类最优化问题的约束条件都存在
KKT条件是说最优值条件必须满足以下条件
- 经过拉格朗日函数处理之后的新目标函数对 x x x求导为零
- h j ( x ) = 0 h_j(x)=0 hj(x)=0
- α ∗ g k ( x ) = 0 \alpha *g_k(x)=0 α∗gk(x)=0
其中第三个式子非常有趣,因为 g k ( x ) < = 0 g_k(x)<=0 gk(x)<=0,如果要满足这个等式,必须 α = 0 \alpha=0 α=0或者 g k ( x ) = 0 g_k(x)=0 gk(x)=0。 这是SVM的很多重要性质的来源,如支持向量的概念。
我们的优化问题满足KKT条件,证明略。
现在,凸优化问题和KKT都满足了,问题转换成了对偶问题。而求解这个对偶学习问题,可以分为三个步骤:首先要让 L ( w , r , α ) L(w,r,α) L(w,r,α)关于 w w w和 r r r最小化,然后求对 α α α的极大,最后利用SMO算法求解对偶问题中的拉格朗日乘子。现在,我们继续推导。
对偶问题求解
现在我们的优化问题变成了如上的形式。对于这个问题,我们有更高效的优化算法,即序列最小优化(SMO)算法。我们通过这个优化算法能得到
α
α
α,再根据
α
α
α,我们就可以求解出
w
w
w和
r
r
r,进而求得我们最初的目的:找到超平面,即"决策平面"。
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。