支持向量机(Support Vector Machine,SVM)详解
主要内容
- 支持向量机简介
- 数据线性可分的情况
- 数据非线性可分的情况
1、支持向量机简介
支持向量机(support vector machine)是一种二分类模型,其基本模型定义是特征空间上的间隔最大的线性分类器(当采用线性核时),即支持向量机的学习策略是间隔最大化,最终可转化为一个凸二次规划问题的求解。
支持向量机于1995年正式发表,由于在文本分类任务中显示出卓越性能,很快成为机器学习的主流技术,并直接掀起了“统计学习”在2000年前后的高潮。但实际上,支持向量的概念早在二十世纪六十年代就已出现,统计学习理论在七十年代就已成型。对核函数的研究更早,Mercer定理可追溯到1909年,RKHS则在四十年代就已被研究,但在统计学习兴起之后,核技巧才真正成为机器学习的通用基本技术。
支持向量机的求解通常是借助于凸优化技术。如何提高效率,使SVM能适用于大规模数据一直是研究重点。对线性核SVM已有很多成果,例如基于割平面法的SVM具有线性复杂度,基于随机梯度下降的Pegasos速度甚至更快,而坐标下降法则在稀疏数据上有很高的效率。非线性核SVM的时间复杂度在理论上不可能低于 O(m2) O ( m 2 ) ,因此研究重点是设计快速近似算法,如基于采样的CVM、基于低秩逼近的Nyström方法、基于随机傅里叶特征的方法等。最近有研究显示,当核矩阵特征值有很大差别时,Nyström方法往往优于随机傅里叶特征方法。
支持向量机是针对二分类任务设计的,对多分类任务要进行专门的推广,对带结构输出的任务也已有相应的算法。
核函数直接决定了支持向量机与核方法的最终性能,但遗憾的是,核函数的选择是一个未决问题。多核学习使用多个核函数并通过学习获得其最优凸组合作为最终的核函数,这实际上是在借助集成学习机制。
SVM已有很多软件包,比较著名的有LIBSVM [Chang and Lin,2011]和LIBLINEAR [Fan et al.,2008]等。
2、数据线性可分的情况
2.1 间隔与支持向量
给定训练样本集 D={(x1,y1),(x2,y2),...,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , yi∈{−1,+1} y i ∈ { − 1 , + 1 } ,分类学习最基本的想法就是基于训练集 D D 在样本空间中找到一个划分超平面,将不同类别的样本分开。但能将训练样本分开的划分超平面可能有很多,如图1所示,那么应该选取哪一个呢?
图 1
直观上看,应该寻找位于两类训练样本“正中间”的划分超平面,即图1中红色的那个,因为该划分超平面对训练样本局部扰动的“容忍”性最好。例如,由于训练集的局限性或噪声的因素,训练集外的样本可能比图1中的训练样本更接近两个类的分隔界,这将使许多划分超平面出现错误,而红色的超平面受影响最小。换言之,这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强。
在样本空间中,划分超平面可通过如下线性方程来描述:
wTx+b=0 (1)(3286) (3286) w T x + b = 0 ( 1 )
其中,
w=(w1;w2;...;wd) w = ( w 1 ; w 2 ; . . . ; w d ) 为法向量,决定了超平面的方向,
d d 为样本属性个数;
b b 为位移项,决定了超平面与原点之间的距离。显然,划分超平面可被法向量
w w 和位移
b b 确定,我们将其记为
(w,b) ( w , b ) 。样本空间中任意点
x x 到超平面
(w,b) ( w , b ) 的距离可写为:
r=|wTx+b|||w|| (2)(3287) (3287) r = | w T x + b | | | w | | ( 2 )
其中,
||w|| | | w | | 为欧几里得泛数,
||w||=w∗w−−−−−√=w21+w22+...+w2d−−−−−−−−−−−−−−√ | | w | | = w ∗ w = w 1 2 + w 2 2 + . . . + w d 2 。
假设超平面
(w,b) ( w , b ) 能将训练样本正确分类,即对于
(xi,yi)∈D ( x i , y i ) ∈ D ,若
yi=+1 y i = + 1 ,则有
wTx+b>0 w T x + b > 0 ;若
yi=−1 y i = − 1 ,则有
wTx+b<0 w T x + b < 0 。令
{wTxi+b≥+1,wTxi+b≤−1,yi=+1yi=−1 (3) { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1 ( 3 )
如图2所示,距离超平面最近的这几个训练样本点使式(3)的等号成立,它们被称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为:
γ=2||w|| (4)(3288) (3288) γ = 2 | | w | | ( 4 )
它被称为“间隔”(margin)。
图 2
欲找到具有“最大间隔”(maximum margin)的划分超平面,也就是要找到能够满足式(3)中约束的参数
w w 和
b b ,使得
γ γ 最大,即
maxw,b 2||w|| (5)s.t. yi(wTxi+b)≥1, i=1,2,...,m(3289) (3289) m a x w , b 2 | | w | | ( 5 ) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m
显然,为了最大化间隔,仅需最大化
||w||−1 | | w | | − 1 ,这等价于最小化
||w||2 | | w | | 2 。于是,式(5)可重写为:
minw,b 12||w||2 (6)s.t. yi(wTxi+b)≥1, i=1,2,...,m(3290) (3290) m i n w , b 1 2 | | w | | 2 ( 6 ) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m
这就是支持向量机(support vector machine,SVM)基本模型。
2.2 对偶问题
我们希望求解式(6)来得到最大间隔划分超平面所对应的模型:
f(x)=wTx+b (7)(3291) (3291) f ( x ) = w T x + b ( 7 )
其中,
w w 和
b b 是模型参数。注意到式(6)本身是一个凸二次规划(convex quadratic programming)问题,能直接用现成的优化计划包求解,但我们可以有更高效的方法。
对式(6)使用拉格朗日乘子法可得到其“对偶问题”(dual problem)。具体来说,对式(6)的每条约束添加拉格朗日乘子
αi≥0 α i ≥ 0 ,则该问题的拉格朗日函数可写为:
L(w,b,α)=12||w||2+∑i=1mαi(1−yi(wTxi+b)) (8)(3292) (3292) L ( w , b , α ) = 1 2 | | w | | 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) ( 8 )
其中,
α=(α1;α2;...;αm) α = ( α 1 ; α 2 ; . . . ; α m ) 。令
L(w,b,α) L ( w , b , α ) 对
w w 和
b b 的偏导为零,可得:
w=∑i=1mαiyixi (9)0=∑i=1mαiyi (10)(3293) (3293) w = ∑ i = 1 m α i y i x i ( 9 ) 0 = ∑ i = 1 m α i y i ( 10 )
将式(9)代入(8),即可将
L(w,b,α) L ( w , b , α ) 中的
w w 和
b b 消去,再考虑式(10)的约束,就得到式(6)的对偶问题:
maxα ∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxTixj (11)s.t. ∑i=1mαiyi=0, αi≥0, i=1,2,...,m(3294) (3294) m a x α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j ( 11 ) s . t . ∑ i = 1 m α i y i = 0 , α i ≥ 0 , i = 1 , 2 , . . . , m
解出
α α 后,求出
w w 与
b b 即可得到模型:
f(x)=wTx+b=∑i=1mαiyixTix+b (12)(3295) (3295) f ( x ) = w T x + b = ∑ i = 1 m α i y i x i T x + b ( 12 )
从对偶问题(11)解出的
αi α i 是式(8)中的拉格朗日乘子,它恰对应着训练样本
(xi,yi) ( x i , y i ) 。注意到式(6)中有不等式约束,因此上述过程需满足KKT(Karush-Kuhn-Tucker)条件,即要求
⎧⎩⎨⎪⎪αi≥0yif(xi)−1≥0αi(yif(xi)−1)=0 (13) { α i ≥ 0 y i f ( x i ) − 1 ≥ 0 α i ( y i f ( x i ) − 1 ) = 0 ( 13 )
于是,对任意训练样本
(xi,yi) ( x i , y i ) ,总有
αi=0 α i = 0 或
yif(xi)=1 y i f ( x i ) = 1 。若
αi=0 α i = 0 ,则该样本将不会在式(12)的求和中出现,也就不会对
f(x) f ( x ) 有任何影响;若
αi>0 α i > 0 ,则必有
yif(xi)=1 y i f ( x i ) = 1 ,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。
2.3 SMO算法
那么,如何求解式(11)呢?不难发现,这是一个二次规划问题,可使用通用的二次规划算法来求解;然而,该问题的规模正比于训练样本数,这会在实际任务中造成很大的开销。为了避免这个障碍,人们通过利用问题本身的特性,提出了很多高效算法,SMO(Sequential Minimal Optimization)是其中一个著名的代表 [Platt, 1998]。
SMO的基本思路是先固定 αi α i 之外的所有参数,然后求 αi α i 上的极值。由于存在约束 ∑mi=1αiyi=0 ∑ i = 1 m α i y i = 0 ,若固定 αi α i 之外的其他变量,则 αi α i 可由其他变量导出。于是,SMO每次选择两个变量 αi α i 和 αj α j ,并固定其他参数。这样,在参数初始化后,SMO不断执行如下两个步骤直至收敛:
- 选取一对需更新的变量 αi α i 和 αj α j ;
- 固定 αi α i 和 αj α j 以外的参数,求解式(11)获得更新后的 αi α i 和 αj α j 。
注意到只需选取的 αi α i 和 αj α j 中有一个不满足KKT条件(13),目标函数就会在迭代后增大 [Osuna et al., 1997]。直观来看,KKT条件违背的程度越大,则变量更新后可能导致的目标函数值增幅越大。于是,SMO先选取违背KKT条件程度最大的变量。第二个变量应选择一个使目标函数值增长最快的变量,但由于比较各变量所对应的目标函数值增幅的复杂度过高,因此SMO采用了一个启发式:使选取的两变量所对应样本之间的间隔最大。一种直观的解释是,这样的两个变量有很大的差别,与对两个相似的变量进行更新相比,对他们进行更新会带给目标函数值更大的变化。
SMO算法之所以高效,恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。具体来说,仅考虑 αi α i 和 αj α j 时,式(11)中的约束可重写为:
αiyi+αjyj=c, αi≥0, αj≥0 (14)(3296) (3296) α i y i + α j y j = c , α i ≥ 0 , α j ≥ 0 ( 14 )
其中
c=−∑k≠i,jαkyk (15)(3297) (3297) c = − ∑ k ≠ i , j α k y k ( 15 )
是使
∑mi=1αiyi=0 ∑ i = 1 m α i y i = 0 成立的常数。用
αiyi+αjyj=c (16)(3298) (3298) α i y i + α j y j = c ( 16 )
消去式(11)中的变量
αj α j ,则得到一个关于
αi α i 的单变量二次规划问题,仅有的约束是
αi≥0 α i ≥ 0 。不难发现,这样的二次规划问题具有闭式解,于是不必调用数值优化算法即可高效地计算出更新后的
αi α i 和
αj α j 。
如何确定偏移项
b b 呢?注意到对任意支持向量
(xs,ys) ( x s , y s ) 都有
ysf(xs)=1 y s f ( x s ) = 1 ,即
ys(∑i∈SαiyixTixs+b)=1 (17)(3299) (3299) y s ( ∑ i ∈ S α i y i x i T x s + b ) = 1 ( 17 )
其中,
S={i|αi>0,i=1,2...,m} S = { i | α i > 0 , i = 1 , 2... , m } 为所有支持向量的下标集。理论上,可选取任意支持向量并通过求解式(17)获得
b b ,但现实任务中常采用一种更为鲁棒的做法:使用所有支持向量求解的均值:
b=1|S|∑s∈S(ys−∑i∈SαiyixTixs) (18)(3300) (3300) b = 1 | S | ∑ s ∈ S ( y s − ∑ i ∈ S α i y i x i T x s ) ( 18 )
3、数据非线性可分的情况
当数据线性不可分时,主要思路:通过恰当的核函数,将原始样本空间映射至一个更高维的特征空间,使得样本在这个更高维的特征空间线性可分。
SVM常用的核函数有以下几种:
公式(11)中
xTixj x i T x j 被称为线性核函数,能够有效处理线性可分的情况。当数据线性不可分时,可以通过上表中其他核函数代替公式(11)中的线性核函数,从而将原始样本空间映射至一个更高维的特征空间,使得样本在这个更高维的特征空间线性可分。
当通过训练样本训练SVM时,该如何选取核函数呢?一是利用专家的先验知识预先选定核函数;二是采用交叉验证方法,即在进行核函数选取时,分别试用不同的核函数,归纳误差最小的核函数就是最优的核函数。就分类效果来说,非线性核比线性核好一些,当然也需要更多的计算开销;对于线性核函数,没有专门需要设置的参数。
情况1:当训练集不大,而属性特征比较多的时候,可以采用线性核,因为较多的属性特征就已经可以给线性核提供不错的variance去fit训练集。
情况2:当训练集相对可观,而属性特征比较少的时候,可以采用非线性核,因为需要算法提供更多的variance去fit训练集。
情况3:当属性特征比较少,而训练集非常庞大的时候,可以采用线性核,因为非线性核需要的计算量太大了,而庞大的训练集,本身就可以给非线性核提供很好的分类效果。
注:如果很难确定合适的核函数使训练集在特征空间有效分开,可以通过软间隔,即通过损失函数去解决(加入损失函数的约束),当然损失函数中可以加入正则解决过拟合问题。