目录
1 支持向量机简介
2 线性可分支持向量机
2.1 什么是线性可分
2.2 什么是几何间隔
2.3 最大几何间隔分离超平面
2.4 支持向量和最大几何间隔
3 线性支持向量机
3.1 支持向量
4 KKT条件和对偶问题
4.1 线性可分支持向量机
4.2 线性支持向量机
5 非线性支持向量机
5.1 非线性分类问题
5.2 核函数
6 序列最小最优化算法
6.1 误差
6.2 目标函数
6.3 约束条件
完善中…………………………如果觉得对您有帮助,赏个赞!有什么好的建议,请在评论区留言。一并感谢其他博主的文章,文末进行了引用。
支持向量机(Support Vector Machine,简称SVM)是一款非常强大的分类模型,它曾经是最好的监督式机器学习模型,甚至被称为“万能分类器”,之所以如此“万能”,是因为它有着丰富的数学理论基础作为支撑。其涉及的理论基础非常复杂,为此我单独整理了一篇文章介绍它的理论基础,包括KKT条件和对偶理论,具体参见《机器学习之支持向量机SVM(理论基础)》。支持向量机最简单的应用是作为一个二分类模型的线性分类器;它还可以借助于核函数,使之成为实质上的非线性分类器;同样,支持向量机可以使用One-vs.-all方法,从二元分类问题扩展到多元分类问题。这也决定了支持向量机模型的构建由简至繁的过程:
(1)当训练数据线性可分时,通过硬间隔最大化(hard margin maximization),学习一个线性分类器,即线性可分支持向量机,又称为硬间隔支持向量机;
(2)当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性分类器,即线性支持向量机,又称为软间隔支持向量机;
(3)当训练数据线性不可分时,通过使用核函数及软间隔最大化,学习一个非线性支持向量机。
本文按照上述思路依次介绍这三类支持向量机、核函数及一种快速学习算法——序列最小最优化算法(简称SMO)。
一般地,先假设我们有个数据,每个数据由
个特征组成,下表给出了数据的特征和该数据所属的类别,如下:
feature_1 | feature_2 | feature_n | value | ||
1 | ![]() |
![]() |
... | ![]() |
![]() |
2 | ![]() |
![]() |
... | ![]() |
![]() |
. . . |
. . . |
. . . |
. . . |
. . . |
|
m | ![]() |
![]() |
... | ![]() |
![]() |
表示第
个数据的第
个特征,
表示
个类别,对于只有两个类别的情况,即
,简记为
,1表示正类,-1表示负类。依然采用《机器学习之矩阵微积分及其性质》中的符号约定,记
表示第
个数据,
。
我们的任务是根据表中的数据学习到一个支持向量机,然后使用该向量机对新的数据进行分类。下面我们从只有两个类别()的线性可分支持向量机说起。
从字面上来看,“线性可分”包含了两个含义,第一是线性:学过平面几何的读者对它应该不会感到陌生,平面中的直线相对于平面来说就是线性的;第二是可分:顾名思义是指训练数据可以被分成两个类别。根据平面几何的知识,我们知道,平面中的任意一条直线都将整个平面分成了三个部分:直线的上侧、下侧和直线上,如图:
图中黄色方块表示类中的数据,蓝色圆点表示
类中的数据,直线
明确地将这两类数据点分开了,称之为线性可分。我们来给出它的数学表述。假设直线
的法向量(与直线垂直的非零向量称为该直线的法向量)为
,直线上的一个固定点为
,由平面几何知识可知,过定点
且与
垂直的直线是唯一的。下面推导该直线的方程:
在直线上任意取一点,显然以
为始点,
为终点的向量
与直线法向量
垂直,由向量内积得到
,展开后得到直线
的方程为
。如果令
(常数),那么直线
的方程可以简化为:
,对于平面中的任意一点
,
(1)如果点在直线的上侧,满足
,这里大于0不失一般性,因为直线上侧的点与直线的法向量所指方向同侧,如果直线
的法向量指向下侧,那么对于直线上侧的点就满足
;
(2)如果点在直线上,满足
;
(3)如果点在直线的下侧,满足
。
所以,对于二维平面上的线性可分,有如下的数学表述:
存在一条直线
:
,对于某一类中的数据点都满足
,而对于另外一个类中的数据点都满足
。称数据集在二维平面中是线性可分的,该直线称为分离直线。
对于三维空间,同样有类似的线性可分的概念,空间中的平面也将整个空间分成了三个部分:平面的上方、下方和平面上,空间中的平面也是由一个固定点和该平面的法向量(与平面垂直的非零向量)唯一确定,同样可以推导出空间平面的方程为:,其中
为该平面的法向量,
为常数。所以空间中的线性可分,也有类似的数学表述:
存在一个平面
:
,对于某一类中的点都满足
,对于另外一个类中的点都满足
。称数据集在3维空间中是线性可分的,该平面称为分离平面。
对于维空间,由
个特征构成的数据正好与
维空间中的点一一对应。假设
维非零向量
,空间中任意点
代入下面的式子:
,
只可能有如下三种情况:
,
,
。
也就是说方程将
维空间分成了三个部分(大于0,等于0,小于0)。该方程构成
维空间中的平面,称之为超平面。对于
维空间中的线性可分,就可以如下表述:
存在一个超平面
:
,对于某一类中的点都满足
,对于另外一个类中的点都满足
。称数据集在
维空间中是线性可分的,该超平面称为分离超平面。
超平面方程,可以表示成矩阵形式:
。
由以上的分析可知,对于表中的数据,如果
,数据
就属于
类,如果
,数据
就属于
类。
我们还是以二维情况来看,如图:
图中绘制了三条将蓝色和黄色数据点分开的直线,分别为绿色、红色和蓝色。那么究竟哪条是比较好的或者说最好的呢?所谓比较好,直观地说就是能够非常明确地将两类数据点分开。直观来看,红色直线分离更明确。绿色和蓝色直线之所以没有红色直线分离明确,是因为它们离相应的数据点太近了。既然靠蓝色点和黄色点太近都不好,那么处在“中间位置”当然是最好的选择。如何从数学角度来描述“靠的太近”呢?距离当然可以堪此重任。在维空间中,任意一点
到超平面方程
的距离如下定义:
用矩阵表示如下:
如果记,还可以写成
这里,称之为向量
的2-范数,它表示向量
的长度,可以理解成平面向量的长度在
维空间中的推广。有了距离以后,就可以度量数据点到分离超平面的几何间隔了,如图:
因为距离是个非负数,对于像、
和
这样被正确分类的数据点,直接使用距离度量是没有问题的,距离越大,说明与分离超平面越远,表示分离越明确。但是,对于像
点这样被错误分类的数据点,直接使用距离来度量,就不能反映出分类错误的信息了,它的距离度量应当要包含一个表示错误分类的“标记”,以与正确分类区分,同时也要度量偏离分离超平面的程度。对于任意一个数据点
,
取值为1和-1,正好可以作为标记,所以我们可以如下定义一个数据点
到分离超平面
:
的距离:
这个距离称之为数据点到分离超平面的几何间隔。几何间隔取值
,当
时,表示数据
被正确分类,绝对值
越大,表示
离分离超平面越远,分离越明确;当
时,表示数据点
被错误分类,绝对值
越大,表示
离分离超平面越远,分离越错误。例如,对于
点,它在分离超平面的下侧,所以
,而类别
,那么
点到分离超平面的几何间隔
是一个负值,从值的正负就可以看出
点是被错误分类的。所以
几何间隔不仅度量了分类的正确性,还度量了分离的明确程度。
有了数据点到分离超平面的几何间隔,就可以如下定义一个类到分离超平面的几何间隔了:
类中所有的点到分离超平面的几何间隔的最小值,称为该类到分离超平面的几何间隔,即
。
因为类中的点是有限的,所以类到分离超平面的几何间隔是必定存在的。
所谓最大几何间隔分离超平面是指能够使两个类到分离超平面的几何间隔达到最大的超平面。下面我们来详细推导最大几何间隔的分离超平面,以二维平面示意帮助理解,推导同样适用于维情况,如图:
假设红色直线表示最大几何间隔分离超平面,方程为
,黄色点代表1类,蓝色点代表-1类,我们已经知道,类1中离超平面
最近的点是存在的(可能多个),假设直线
表示的就是过该点且与超平面
平行(这里平行理解成法向量共线)的超平面;同样的,-1类中离超平面
最近的点也是存在的,假设直线
表示的是过该点且与超平面
平行的超平面,并假设1类和-1类到超平面
几何间隔均为
。如果超平面
是最大几何间隔分离超平面,必须满足:
(1)在两条直线的中间,这也是为什么要假设1类和-1类到超平面几何间隔均为
;
(2)几何间隔最大(等价于
最大,使用
更能反映两类之间的空隙,图中绿色和蓝色直线的中间地带);
(3)1类和-1类中的所有数据点到超平面的几何间隔都要大于等于
(保证分类正确性);
转换成优化问题就是:
对该问题做些简化:因为数据是线性可分的,而且法向量不为
,所以
,且
,令
,则
,即
,
则优化问题的目标函数变为:;对于约束条件,再令
,约束条件变为:
。所以原优化问题变为:
由于优化问题中的范数出现在分母中且包含平方根,处理起来不太方便,可以等价为如下形式:
后面我们简称该约束优化问题为LSCOP问题。这里有两个隐含的问题需要解释下:
(1)我们刚开始假设的方程是,但通过求LSCOP问题并不能直接得到
。不过没关系,将
两边除以
,得到
,由前面的证明可知,
,
,所以得到
,这就是说
和
表示的是同一个超平面。实质上,
是通过将原方程的法向量先单位化,再变成
倍得到。
(2)虽然目标函数中没有,但LSCOP问题是关于
和
的约束优化问题。
可以从数学上严格证明:
对于线性可分的数据,约束问题最优解存在且唯一。
(参见《机器学习之支持向量机SVM(理论基础)》)
所以我们就可以根据如下步骤求解几何间隔最大分离超平面了:
(1)根据给定的数据,构建LSCOP问题:
![]()
(2)求解步骤(1)中的约束优化问题,得到最优解
,由此得到最大几何间隔分离超平面
;
(3)对
进行预测:如果
,则
分到类1中,如果
,则
分到类-1中。
根据上面的证明,超平面和
上的数据点到最大几何间隔分离超平面
的距离最近而且等于
,也就是说如果LSCOP问题的最优解为
,那么超平面
和
上的数据点
正好使不等式约束条件取等号,即
。这些点称之为支持向量,
和
称之为支持超平面。所以支持向量分布在支撑超平面上。如图:
图中被红色圆圈标记的点就是支持向量,绿色直线就是类1的支持超平面,蓝色直线就是-1类的支持超平面。其中1类中有一个支持向量,-1类中有两个支持向量,它们离最大几何间隔分离超平面最近。另一方面,根据上面的证明,,所以很容易得到最大几何间隔为
。可以很容易证明绿色直线方程为
,蓝色直线方程为
。
如果去掉图中支持向量以外的数据点,你会发现,最大几何间隔分离超平面并不会变。实际上,它是由支持向量决定的,这也是支持向量机名字的由来。
对于线性可分支持向量机中的支持向量的理解:
(1)支持向量是离最大几何间隔超平面最近的数据点,而且正好分布在两个支持超平面上;
(2)使不等式约束条件取等号的数据点
就是支持向量,反之,
是支持向量一定使不等式约束条件取等号;
(3)支持向量决定了最大几何间隔超平面,其他数据点无关紧要,也就是说去除后,不影响最大几何间隔超平面;
如图,黄色点表示1类,蓝色点表示-1类,你可以口算出该问题的几何间隔最大分离超平面吗?它的支持向量是什么?最大几何间隔又是多少?
对于线性可分的数据集,对应的约束问题存在唯一的最优解,但在实际应用中,绝大部分的数据集是线性不可分的,前面建立的线性可分支持向量机几乎没有实用价值。如图:
图中有一个蓝色点落在了四个黄色点围成的四边形中,对于这样的数据集,无法找到一条直线将它们分开。那么此时LSCOP问题的约束条件不可能满足,也就是说LSCOP问题无解。但我们还是想使用直线或者超平面来分离这些数据点,如何解决呢?事实上,在实际问题中,允许有少量误分类,在这种宽松条件下,分离超平面得使大部分数据点能够正确分类,并且错误分类的数据点尽可能少或者离分离超平面尽量近些。我们通过为每个数据点“赋予”一个松弛变量,LSCOP问题变为:
其中,称之为惩罚系数,一般由实际问题决定,
值越大,对误分类的惩罚越大,C值越小,对误分类的惩罚越小,怎么理解呢?假设一种极端情况:
,那么目标函数就和松弛变量
无关了,此时约束优化问题就允许任意的错误分类了,也就是说对误分类没有惩罚,因为目标函数第二项无论
取多大的值,第二项始终为0,也是最小,所以,C值越小,对误分类的惩罚越小。松弛变量
说是“赋予”给每个数据点的,是指对于每个数据点,都有一个
与之对应,具体值与它到分离超平面的几何间隔相关,后面在讲线性支持向量机的支持向量时具体讲解。通过引入松弛变量
后,约束条件
相应被放宽了,一方面,当
足够大时,可以保证每个数据点都满足相应的约束条件,也就保证了约束条件有解,另一方面,目标函数最小,保证了
不会无限的大。对于目标函数
最小化,包含两层含义:使
尽量小,即几何间隔尽量大;使
尽量小,即误分类数据点的个数尽量小或者误分类的点到分离超平面的几何间隔尽可能小,惩罚系数正好用于调和二者关系。(暂时还没有找到更好地几何解释,先这么理解,以后找到补上)。
所以,在允许有误分类的情况下,我们就可以如下求解线性支持向量机的几何间隔最大分离超平面了:
(1)根据数据点,构建优化问题:
(2)求解步骤(1)中的约束优化问题,得到最优解
,由此得到几何间隔最大分离超平面
;
(3)对新数据
进行预测:如果
,则
分到类1中,如果
,则
分到类-1中。
在支持向量机简介中说的硬间隔和软间隔,其实指的都是几何间隔,只不过前者针对的是线性可分的数据集,后者针对近似线性可分(允许有误差)数据集,所谓“软”即是约束条件放松的意思。
我们知道,线性可分支持向量机中支持向量正好使不等式约束条件取等号,反之满足不等式约束条件取等号的数据点也是支持向量,它们分布在支持超平面上。同样的,使线性支持向量机不等式约束条件取等号的数据点,称之为线性支持向量机的支持向量。以二维情况为例,我们来看看它们的具体分布情况,如图:
假设不等式约束条件取等号,即,注意到
,做一下变换得到
等式左边正好表示数据点到对应的虚线的几何间隔,注意不是最大几何间隔分离超平面。例如,对于类1,对应的
,左边简化为
它表示黄色点到绿色虚线的几何间隔。所以,后面不失一般性,以类1来分析。将(1)式简化为
从这个等式我们可以看出,数据点被赋予的松弛变量
是与它到对应虚线的几何间隔相关的,
取相反数后,再除以
就是几何间隔了。我们下面分情况具体来看:
(1)当时,得到
,表示黄色点落在绿色虚线上。例如图中编号为3的黄色点;
(2)当时,得到
,即
且
,表示黄色点在绿色虚线下方和红色实线上方,例如图中的编号为2的点;
(3)当时,得到
,表示黄色点落在红色实线上,例如图中编号为4的点;
(4)当时,得到
,即
,表示数据点落在红色实线的下方,例如图中编号为1的两个黄色点;
根据以上分析,我们得到:
1类中的支持向量分布在它的支持超平面上或者下侧,-1类中的支持向量分布在它的支持超平面上或者上侧。
将这里的支持向量与线性可分支持向量机中的支持向量作对比后,发现除了支持超平面上的数据点是支持向量外,还包括两个支持超平面之间和被错误分类的数据点。
前面,在说完线性可分支持向量机和线性支持向量机后,都给了一个简易的求解最优解的算法,其实没什么用,因为并没有具体给出求解方法。但是针对原优化问题,现在已经有很多方法来求解了,不过要具备最优化理论的相关知识,我们这里不做过多的讨论。在众多的最优解求解的方法中,有一种方法不得不说,它通过简化或消除约束条件,得到一个容易求解且与原优化问题等价的优化问题。就是下面的KKT条件和对偶问题。
考虑如下一般形式的约束优化问题(constrained optimization problem):
(1)
(2)
(3)
,
我们先给出与该约束优化问题相关的一些概念和后文需要用到的一些记号,具体如下:
目标函数:
称为目标函数,
约束函数:
称为不等式约束函数,
称为等式约束函数,不等式约束函数和等式约束函数统称约束函数;
定义域:
表示约束函数的定义域;
不等式约束指标集:
称为不等式约束指标集;
等式约束指标集:
称为等式约束指标集;
约束条件:(2)~(3)称为约束条件(constraints);
可行解:满足约束条件的
称为该约束优化问题可行解,
可行域:所有可行解的集合称为可行域(feasible region),记为
,显然可行域
是定义域
的子集;
梯度向量:行向量
称为函数
在
处的梯度向量,记为
,
在
处的值记为
。对于梯度的定义,我们这里采用了《 机器学习之矩阵微积分及其性质》中标量-向量求导的分子布局约定。部分书籍和文献使用列向量,但这并无影响,只是一种约定而已。
记
和
分别表示不等式约束函数和等式约束函数
组成的向量函数。
对于一般形式的约束优化问题,我们有如下的KKT定理:
设
是COP问题的可行域,
是COP问题的局部极小点,COP问题的目标函数
和所有约束函数
在
处连续可微(一阶偏导数连续),且
,则存在实数
和
,使得
.
对应的KKT条件为:
,
,
,
.
接下来,我们再给出一般形式的约束优化问题的对偶问题。为什么要提出对偶问题呢?因为在很多情况下,原约束优化问题可能非常复杂,比如限制条件太多,通常无法求解,而对偶问题只有一个或几个简单的约束条件,相对容易求解。而且在满足一定的条件下,原约束优化问题的最小值和它的对偶问题的最大值是相等的。总之,对偶问题将原来在多个不等式约束和等式约束条件下的求最小值问题转换成了一个在单个或几个简单约束条件下求最大值的问题。为了与即将要给出的对偶问题区分,称一般形式的约束优化问题为非线性规划(NLP)的原始问题(primal problem),简称PNLP问题。对偶问题是先通过定义了个拉格朗日函数,然后取拉格朗日函数的下确定定义的。我们具体来看,如下先定义一个Lagrange函数:
,
,
Lagrange函数中有三个量,
是原问题中的
,
是新引入的量,要求
。通常
称为拉格朗日乘数。我们注意到,如果固定
,那么
是一个关于
和
的线性函数。有了拉格朗日函数(Lagrange function)的定义,下面我们就可以给出原始问题的对偶问题(dual problem)定义,如下:
其中,
表示Lagrange函数对
取下确界。PNLP问题的对偶问题简称DNLP问题。
关于KKT定理的证明和对偶问题的理论可以参见《机器学习之支持向量机SVM(理论基础)》。留意的读者已经注意到,KKT条件的第一条其实是对偶问题中拉格朗日函数对变量求偏导等于0。接下来我们分别来讨论线性可分支持向量机和线性支持向量机对应的KKT条件和对偶问题究竟是什么?
我们看到,对于一般形式的约束优化问题,KKT条件只是一个充分条件,当一个点是局部极小点时,并且约束问题在该极小点满足一定条件后,才可以得到KKT条件,但是反过来,当一个点满足KKT条件时,并不能得出它是极小点。好在,对于线性支持向量机和支持向量机的约束问题,它们都是一个凸二次规划问题,而且是一个严凸二次规划。有如下充要条件:
对于凸二次规划,
是局部极小点,当且仅当
是全局极小点,当且仅当
满足KKT条件。
也有下面的对偶定理:
对于严格凸二次规划,原问题存在最优解
当且仅当对偶问题存在最优解
,而且原问题的目标函数最小值等于对偶问题目标函数的最大值。
关于它们的证明,有些复杂,也没必要去追究。所以我们后面的推导直接使用该定理。留心的读者,已经看到KKT条件的第一个条件就是拉格朗日函数在极小点偏导数为0。
我们再写一次线性可分支持向量机的约束问题:
先构造如下Lagrange函数:
其中是拉格朗日乘数,由《 机器学习之矩阵微积分及其性质》中的标量-向量求导性质(5),(1)式对
求偏导得到:
对求偏导属于标量-标量求导,得到:
令(2)和(3)式等于0,得到KKT条件的第一条
我们再将优化问题的约束条件和写入KKT条件,得到线性可分支持向量机对应的KKT条件:
将(4)式代入(1)式得到Lanrange函数的最小值:
根据对偶问题定义可知,,
由对偶定理得到,线性可分支持向量机的对偶形式如下:
,
其中第一个约束条件来源于(3),第二个约束条件来源于对偶问题的定义。
以上推导使用了矩阵求导性质,非常简洁和优美,极力推荐。
根据对偶定理,就可以如下求解线性可分支持向量机的几何间隔最大分离超平面了:
(1)根据给定数据,构造并求解约束优化问题:
,
得到最优解。事实上,可以断言最优解
中,一定存在分量
,不然假设
,由KKT条件
,得到
,矛盾。所以存在分量
。
(2)在最优解中,选择
。根据KKT条件,有
,注意到
,有
,得到
。所以原问题的最有解
可如下计算:
于是得到最大几何间隔分离超平面。
(3)对进行预测:如果
,则
分到类1中,如果
,则
分到类-1中。
线性可分支持向量机对偶问题中也有支持向量的概念:
最优解
中
的分量对应的
称为支持向量。
有读者肯定会疑问,对偶问题中定义的支持向量与原优化问题中定义的支持向量是一回事吗?
首先,我们看最优解中
,对应的数据点为
,由KKT条件
,因为
,得到
,
所以数据点为是原问题定义的支持向量;反过来,原问题中定义的支持向量
是不是对应的最优解
中
呢?其实我也不知道。
我们再写一次线性可分支持向量机的约束问题:
我们逐条来看,线性支持向量机的约束优化问题是否满足一般非线性优化问题KKT定理的条件:
(1)线性支持向量机是KKT定理中给出的一般形式的约束优化问题。只不过线性支持向量机的约束条件中有个
,没有
而已;
(2)可行域,就是满足约束条件
的的集合,因为线性支持向量机优化问题的变量是
;
(3)很容易检验目标函数和约束条件(线性函数)在任意一点处连续可微,当然在局部极小点处连续可微;
(4)这一条待证(一定满足),我们在一般的非线性优化问题的KKT定理中给出了一个反例,如果不满这条,可能得不到KKT定理的结论。
构造如下Lagrange函数:
其中是拉格朗日乘数,整理后如下:
(1)式分别对,
,
求偏导得到:
令(2)~(4)式等于0,得到线性支持向量机的第一个KKT条件:
所以有了线性支持向量机对应的KKT条件:
. (2)
(3)
,
(4)
(5)
(6)
将(2)~(3)式代入(1)式得到Lanrange函数的最小值:
根据对偶问题定义可知,,
由对偶定理得到,线性支持向量机的对偶形式如下:
, (1-1)
(1-2)
(1-3)
(1-4)
注意到目标函数与无关,所以可以消去
,得到如下形式:
,
![]()
从第二个约束条件,我们看到惩罚的选择至关重要,它控制了
的取值。与线性支持向量机对偶问题对比后发现,它们具有相同的目标函数,甚至具有相同的约束条件,只不过这里限制了
的上限值。
根据对偶问题,我们就可以如下求解几何间隔最大分离超平面了:
(1)根据给定数据,选择惩罚系数,构造并求解:
,
得到最优解;可以断言最优解中,一定存在
,不然如果
,由KKT条件
,得到
,矛盾。所以,存在
。
(2)在最优解中,选择
,根据KKT条件,有
, (1)
(2)
(3)
则,由(2)式得到
。再注意到
,那么(1)式就可以变为
,
求解得到。
所以现在,我们从最优解中,选择满足条件
的
,就可如下求解
:
得到最大几何间隔分离超平面。
(3)对进行预测:如果
,则
分到类1中,如果
,则
分到类-1中。
线性支持向量机对偶问题中也有支持向量的概念:
最优解
中
的分量对应的
称为支持向量。
这里支持向量定义和原问题中的支持向量定义是否一致,有待证明。
线性可分支持向量机只能解决线性可分的问题,实际应用范围非常小,绝大部分问题都不能使用。而线性支持向量机通过引入松弛变量,允许有部分数据点误分类,从一定程度上,解决了线性可分支持向量机的局限。但是线性支持向量机,因为依然使用线性手段(超平面),有着自身的局限性,导致处理某些问题时误分类不如人意。如图:
图中绿色点表示1类中的数据,它们分布在绿色圆上或者圆外,而蓝色点表示-1类中的数据,它们分布在蓝色圆上或者圆内。显然使用线性可分支持向量机是无法分离的,而使用线性支持向量机,会带来误分类。但是我们很容易看出图中的红色圆就可以很清晰地将他们分开,而且不会有任何误分类问题。我们希望找到非线性手段,将该问题变为一个线性问题,然后使用我们熟悉的线性可分支持向量机或者线性支持向量机来求解。如果令变换
,
(1)
则原图中的数据点会在一个新的空间中重新分布,如图:
原图中的蓝色和绿色圆分别对应变换后的空间中的蓝色和绿色直线,此时在新的空间中,我们就可以使用线性可分支持向量机学习得到一个几何间隔最大分离超平面,再根据刚才的变换,很容易得到原图中的分离曲线
,或者我们根本不需要求解分离曲线了,直接使用分离超平面
来分类就可以。对于数据点
,先经过(1)式变换为新空间中的
,然后使用超平面
对
进行分类即可,如果满足
,则
在原空间对应的数据点
就属于1类。以上就是非线性支持向量机的核心思想——核技巧。它是通过引进核函数,将非线性问题变换为线性或者近似线性问题,通过解变换后的线性问题的求解原非线性问题。我们用数学表述上面的思路:
如果数据通过变换后,在新空间中是线性可分(线性支持向量机类似)的,就可以在新空间中建立如下的约束优化问题:
是原空间中的
在新空间中对应的数据点。求解得到最优解
,然后使用新空间中的分离超平面
就可以对
进行分类了。如果
满足
,则数据点
属于1类,如果
满足
,则数据点
属于-1类。使用这种方法,就必须要知道变换
才可以,在很多问题中这个变换并不好求,或者非常复杂。我们换个思路,原优化问题和它的对偶问题优化是等价的,我们来看他它的对偶形式:
,
注意可以表示成内积形式为
,在新空间中,对偶优化问题为:
,
目标函数中包含了的内积计算。我们再看新空间中的分离超平面
,因为在新空间中最优解变为:
代入新空间中的超平面,得到新空间中的最优分离超平面:
我们发现上式也包含了的内积计算。所以,在新空间中,无论是约束函数还是分离超平面都和内积
相关,所以我们就不用关心具体的变换
了。而将重心放在
上。
就是核函数,这也是为什么使用核函数的原因。下面我们来具体介绍。
为了严谨,我们如下给出核函数的定义:
定义
设
是欧式空间的一个子集,
为希尔伯特空间,如果存在一个从
到
的映射
,使得对所有
,函数
满足条件:
则称
为核函数,
为映射函数,式中
为
和
的在希尔伯特空间中的内积。
定义中提到的欧式空间和希尔伯特空间都是数学中的概念,可以参看《泛函分析》相关书籍。因为涉及较深的数学概念,理解起来有些晦涩,我们先从简单的例子来看。
(1)对于上面引出非线性问题的例子来说,讨论的是二维平面中的数据点,所以,它是包含数据点的一个集合,可以取
。假设
,
,则例子中的变换就是:
,
那么它的核函数就是。
核函数其实是关于两个向量的函数,它将两个向量映射为一个数值。对于某个核函数,可能存在多个,有多少个,我们并不关心,我们只关心核函数本身。为了更好的理解核函数,我们再看一个例子:
(2)如下定义的函数是核函数吗?
,
我们看到是将两个向量先做内积运算,然后平方,确实是将两个向量映射为一个数值,接下来,我们需要找到一个
,使得
,也即
。假设
,可以验证
就满足要求,因为
,
那么
所以是核函数。
注意这里将二维空间中的点映射到了三维空间中了。通常,
为了保证变换后的数据是线性可分或者近似线性的,会将低维中的点映射到高维或者无穷维空间中去,计算复杂度同时会提升。核函数保证了计算可以继续在低维空间中进行,例如
每次都是要对三个分量进行计算,而
只需要计算两个分量,但是它们的计算结果是一样的。这就是为什么要引入核函数的原因之一。
核函数的理解:
(1)真正将线性不可分变成线性可分或近似线性可分的是
,而不是核函数
;
(2)
一般是通过将低维变成高维,或者无穷维的方式,让数据可分或近似可分;
(3)核函数虽然不能将线性不可分变成线性可分,但是它可以通过在低维空间中(通常是原空间)完成本该在高维或无穷维空间中计算的量。
通常是高维计算,
通常是在原空间中计算,而
保证了它们的计算结果一样。
常见的核函数:
(1)线性核函数(Linear Kernel)
,对应的
,没做任何变换
(2)多项式核函数(Polynomial Kernel)
,
,
为正整数
(3)高斯核(Gaussian Kernel)
(4)拉普拉斯核
(5)S型核函数(Sigmoid Kernel)
核函数有无穷多个,下面我们不加证明的给出核函数的判断方法和构造方法:
判定方法:
对于
个数据点构成的有限集合
,定义一个矩阵
,它的第
行第
列元素是
,且
,即
是对称的,那么
是核函数的充要条件是矩阵
是半正定的。
构造方法:
设,
是
上的核函数,则下面的函数都是核函数:
(1)
(2)
(3)
根据核函数的定义,线性可分支持向量机对偶问题的核函数形式表示如下:
,
最优分离超平面为:
线性支持向量机对偶问题的核函数形式表示如下:
,
![]()
最优分离超平面为:
满足
。
总结:
(1)线性可分支持向量机解决数据是线性可分的问题;
(2)线性支持向量机通过引入松弛变量解决数据近似线性可分的问题;
(3)非线性支持向量机通过引入核函数,将非线性问题转换为线性可分或近似线性可分的问题,进而使用线性可分支持向量机或线性支持向量机。
下面我们以表格形式对以上三个支持向量机做个概括:
原问题 | 对偶问题 | ||
线性可分支持向量机 | 约束优化问题 | ![]() ![]() ![]() |
|
最优解 | |
|
|
最优分离超平面 | ![]() |
其中 |
|
支持向量 | 满足![]() ![]() |
![]() ![]() |
原问题 | 对偶问题 | ||
线性支持向量机 | 约束优化问题 |
|
|
最优解 | |
|
|
最优分离超平面 | ![]() |
其中 |
|
支持向量 | 满足![]() ![]() |
![]() ![]() |
线性可分支持向量机 | 线性支持向量机 | ||
非线性支持向量机 | 约束优化问题 | |
|
最优解 | ![]() |
|
|
最优分离超平面 | ( |
( |
本节讨论支持向量机约束问题求解算法实现的问题。目前已有许多快速实现算法,本节讲述其中的序列最小最优化(Sequential Minimal Optimisation,SMO)算法,该算法1998年由Platt提出,本文为帮助读者理解算法过程,给出了细致的推导,但读者不用在推导上花费时间,应将重心放在SMO算法和步骤上,以及适用于哪些应用场景。
无论是线性可分支持向量机,或者是线性支持向量机,还是非线性支持向量机,都是要解决如下的约束问题:
,
其中是需要求解的变量,它有
个分量。
SMO算法是一种启发式算法,其基本思路是:如果变量的所有分量都满足约束问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充要条件。否则,选择其中两个分量,固定其他
个分量,针对这两个变量构建一个子二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子二次规划问题并对子问题求解,进而达到求解原问题的目的。不失一般性,假设选择的两个变量是
,固定其他变量
。
只要SMO算法在每一步迭代中总是优化和改变两个拉格朗日乘子,而且至少一个拉格朗日乘子在迭代前违背KKT条件,那么根据 Osuna’s theorem,每一步都将减小目标函数值。因此收敛是得到保证的。为了加快收敛速度,SMO使用启发式选择哪两个乘子来共同优化。
它们是独立的选择启发:一个是针对第一个拉格朗日乘子,一个是针对第二个拉格朗日乘子。第一个启发式选择提供了SMO算法的外部循环。外部循环首先在整个训练集上迭代,确定每个违反KKT条件的数据,如果一个数据违反了KKT条件,它就可以作为优化的乘子。在整个训练集上迭代一次之后,外部循环在拉格朗日乘子满足非0非C的数据上迭代。每个违反KKT条件的数据作为优化。
原约束问题是对目标函数求最大值,我们先将其转换成求最小值,变成一个严凸二次规划,如下:
,
![]()
其中。如果
满足Mercer’s conditions,这该优化是一个严凸二次规划,后面讨论都假
满足Mercer’s conditions。该问题存在最优解,当对所有的
有:
接下来将目标函数中的变量整理出来:
令
省略常数项后,
非线性支持向量机引入核函数以后,对应的分离超平面方程就变成下面的形式了:
这里其实可以使用数据点表示,但是为了SMO算法的推导方便,使用
会更简洁些。对于数据点
,它的预测值为
由上面(1)式
得到:
这里只是数据点
的预测值,并不是它的分类。记
为
的预测值与真实分类
的差,如下:
约束条件变为
约束问题就变成了一个关于的二元函数
在约束条件下求极值的问题。约束条件
,两边乘以
,得到
,将
代入到目标函数(2)中,得到
此时就变成了关于变量
的一元求最值问题了。当然是使用一元函数极值定理来求解了。上式对
求偏导,得到:
对上式再次求偏导(相当于求的二阶导数),并记
,得到:
推导先到这里,现在讨论的取值范围,首先由
可知,
落在一个
的正方形上或者内部,又因为
满足
, (1)
分两种情况
(a)当时,(1)式两边乘以
得到,
(b)当时,(1)式两边乘以
得到,
所以,刚好落在下图中的四条与正方形对角线平行或重合的某一条线段上,如图:
从图中很容易得到的取值范围:
(1)当时,
(2)当时,
无论是上面哪种情况,不妨设取值范围为
,
表示
的最小值,
表示
的最大值。
前面提到的满足Mercer’s conditions,保证该优化是一个严凸二次规划,所以得到
,
是凸函数,最小值点处一阶导数为0,如图:
现在我们回到SMO算法上来,算法每次都要跟新,事实上,只需要跟新
,
可以通过约束条件
计算,现在假设问题的初始可行解为
,更新后的
,还不是我们真正更新的最终结果,可能超出了它的取值范围
,所以对它还需要处理下,对它进行裁剪,裁剪后才是真正跟新的
,现在假设裁剪前为
,裁剪后为
。所以他们满足
(2)
裁剪方法:
就是说,如果落在内,当然不变,落在外面,使用最大值或最小值替代。但是这里
,需要使用
,替换到原来的
中的
,得到
(1)当时,
(2)当时,
现在令的一阶导数为0,得到:
由
有
所以
且
代入,得到:
即
再对其裁剪,
得到最终的。由
,两边乘以
,就得到
.
SMO称选择第1个变量的过程为外层循环。外层循环在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。具体地,检验训练样本点是否满足KKT条件,即
其中,首先检验的是第二条,这条很容易不满足,一旦不满足就选取这个
作为第一个变量,如果都满足,在检验其他两条,如果都满足,那就是最优解了,如果不满足选择这个
作为第一个变量。
SMO称选择第2个变量的过程为内层循环。假设在外层循环中已经找到第1个变量,现在要在内层循环中找第2个变量
。第2个变量选择的标准是希望能使
有足够大的变化,加快收敛速度。由上面的推导,
依赖于
6.4.3 和
计算
(1)训练数据下载地址:《trainingSet.txt》,总共有100条数据,每个数据有两个特征,外加一个分类标记1或-1,前5行数据格式如下:
3.542485 1.977398 -1
3.018896 2.556416 -1
7.551510 -1.580030 1
2.114999 -0.004466 -1
8.127113 1.274372 1
(2)训练集《trainingSetRBF.txt》
-0.214824 0.662756 -1.000000
-0.061569 -0.091875 1.000000
0.406933 0.648055 -1.000000
0.223650 0.130142 1.000000
0.231317 0.766906 -1.000000
测试集《testSetRBF2.txt》
0.448986 -0.513475 -1.000000
-0.000019 -0.000018 1.000000
0.087728 0.034338 1.000000
-0.344738 -0.297289 1.000000
0.016388 0.031563 1.000000
参考文献:
(1)支持向量机
(2)支持向量机通俗导论(理解SVM的三层境界)
(3)支持向量机
(4)libsvm