SVM基础SMO

来源:互联网 发布:域名授权码在哪里 编辑:程序博客网 时间:2024/05/22 14:51

SVM基础

SVM是vapnik发明的线性分类器,处理的是标签为{-1,1}的数据,其理论支持为经验风险最小化。经验风险最小化就是VC维最小化,在SVM中的体现为最大化分类间隔,因为线性分类器的VC维与最大分类间隔的平方成反比。具体的VC维表示为下公式

VCdimensionmin{R2M2,n}+1(1)(1)VC−dimension≤min{R2M2,n}+1


其中,R为包围所有数据点的最小球半径,M为分类间隔的一半,n为样本数目大小。下图就比较形象的说明了SVM是干什么用的。

SVM目标

最终SVM得到的线性分类器的公式如下

u=wTxb(2)(2)u=wTx−b


而参数w,bw,b所遵循的条件为

iyi(wTxib)1(3)(3)∀iyi(wTxi−b)≥1


对于任何一个测试点xx,如果uu的值大于等于1,则这个点被标注为1。否则如果uu小于等于-1,则这个点标注为-1.这个分类器的分类间隔为

1wTw(4)(4)1wTw


所以我们如果要最大化分类间隔,则需要最小化12wTw12wTw。所以当前问题转变为一个凸优化问题

minimizesubjectto12wTwi:yi(wTxib)1(5)(5)minimize12wTwsubjectto∀i:yi(wTxi−b)≥1


我们可以得到等价的对偶问题

minimizesubjectto12wTwai(yi(wTxib)1)i ai0i yi(wTxib)10i ai(yi(wTxib)1)=0(6)(6)minimize12wTw−∑ai(yi(wTxi−b)−1)subjectto∀i ai≥0∀i yi(wTxi−b)−1≥0∀i ai(yi(wTxi−b)−1)=0


此时得到最小值的KKT条件为

wTaiyixiTaiyii aii yi(wTxib)1i ai(yi(wTxib)1)=0=000=0(7)(7)wT−∑aiyixiT=0∑aiyi=0∀i ai≥0∀i yi(wTxi−b)−1≤0∀i ai(yi(wTxi−b)−1)=0


将上面的两个等式带入到对偶问题中,从而得到了下面的简化形式,不过问题仍然是等价的。

minimizesubject to12i=1nj=1nyiyjxiTxjaiaji=1naii ai0i=1nyiai=0(8)(8)minimize12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1naisubject to∀i ai≥0∑i=1nyiai=0


在得出上述问题的最优解中aiai的取值之后,我们可以得到w,bw,b的表达式.

wb=aiyixi=wTxkykfor ak>0(9)(9)w=∑aiyixib=wTxk−ykfor ak>0


上面所陈述的是线性可分的情况,如果数据并不是线性可分的,则我们需要引入松弛变量ξξ来代表偏离程度。

minimizesubjectto12wTw+Cξii yi(wTxib)1ξii ξi0(10)(10)minimize12wTw+C∑ξisubjectto∀i yi(wTxi−b)≥1−ξi∀i ξi≥0


上面问题的对偶问题为

minimizesubjectto12wTw+Cξiai(yi(wTxib)1+ξi)+μiξii ai0i yi(wTxib)1+ξi0i ai(yi(wTxib)1+ξi)=0i ξi0i μiξi=0i μi0(11)(11)minimize12wTw+C∑ξi−∑ai(yi(wTxi−b)−1+ξi)+∑μiξisubjectto∀i ai≥0∀i yi(wTxi−b)−1+ξi≥0∀i ai(yi(wTxi−b)−1+ξi)=0∀i ξi≥0∀i μiξi=0∀i μi≥0


此时我们根据KKT的最小值条件,可以得到而外的三个等式。

w0ai=aiyixi=aiyi=Cμi(12)(12)w=∑aiyixi0=∑aiyiai=C−μi


将这些等式带入,可以得到下面的等价问题。

minimizesubject to12i=1nj=1nyiyjxiTxjaiaji=1naii 0 aiCi=1nyiai=0(13)(13)minimize12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1naisubject to∀i 0≤ ai≤C∑i=1nyiai=0


可以看出,引入松弛变量与未引入松弛变量所得到的问题基本差不多。令u=wTxbu=wTx−b,从得到的结果逆向推理,我们可以得到下面的式子。

ai=00<ai<Cai=Cμi=Cξi=0 u1+ξi0yiui1μi0ξi=0 u1+ξi=0yiui=1μi=0ξi0u1+ξi=0yiui1(14)(14)ai=0→μi=C→ξi=0→ u−1+ξi≥0→yiui≥10<ai<C→μi≠0→ξi=0→ u−1+ξi=0→yiui=1ai=C→μi=0→ξi≥0→u−1+ξi=0→yiui≤1


上面这个性质非常重要,是理解SMO算法的关键(其实是可以左右推导的,这里没有写出来,忘了那个符号怎么写了)。

SMO优化方法

现在我们的问题就是,如何快速的求解下面这个优化问题。

minimizesubject to12i=1nj=1nyiyjxiTxjaiaji=1naii 0 aiCi=1nyiai=0(15)(15)minimize12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1naisubject to∀i 0≤ ai≤C∑i=1nyiai=0


解决带不等式限制的凸优化问题,采取的一般都是内点法。但是内点法的代价太大,需要存储一个n2n2的矩阵,在内存有限的条件下不可行,且每次求全局导数花费时间很多,此外还牵涉到数值问题。而SMO是解决二次优化问题的神器。他每次选择两个拉格朗日乘子 ai,ajai,aj来求条件最小值,然后更新ai,ajai,aj。由于在其他拉格朗日乘子固定的情况下,ai,ajai,aj有如下关系

aiyi=0aiyi+ajyj=t(16)(16)∑aiyi=0→aiyi+ajyj=t


这样aiai就可以通过ajaj表示出来,此时优化问题可以转变为一个变量的二次优化问题,这个问题的计算量非常少。所以SMO包括两个过程,一个过程选择两个拉格朗日乘子,这是一个外部循环,一个过程来求解这两个变量的二次优化问题,这个是循环内过程。我们先来解决两个变量的lagrange multipliers问题,然后再去解决乘子的选择问题。

Two Lagrange Multiplier

为了计算两个lagrange Multiplier的优化问题,SMO首先计算这两个乘子的取值范围,然后再这个范围限制下解决二次优化问题。为了书写方便,现在用1,21,2来代替i,ji,j。这两个变量之间的关系我们之前已经给出了a1y1+a2y2=ka1y1+a2y2=k,下面这幅图生动形象的解释了这两个变量的关系。

双变量关系

现在我们来讨论在进行双变量二次优化时a2a2的取值范围。如果y1!=y2y1!=y2,则a2a2的下界LL和上界HH可以表示为

L=max(0,a2a1),H=min(C,C+a2a1)(17)(17)L=max(0,a2−a1),H=min(C,C+a2−a1)


反之,如果y1=y2y1=y2,则a2a2的下界LL和上界HH可以表示为

L=max(0,a2+a1C),H=min(C,a2+a2)(18)(18)L=max(0,a2+a1−C),H=min(C,a2+a2)


而此时的优化目标为

minimize12i=1nj=1nyiyjxiTxjaiaji=1nai=2x1Tx2y1y2a1a2+a1y1x1TR1+a2y2x2TR1C(a1+a2)R2(19)(19)minimize12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1nai=2x1Tx2y1y2a1a2+a1y1x1TR1+a2y2x2TR1−C(a1+a2)−R2


这里的R1,R2R1,R2都是与a1,a2a1,a2无关的项。事实上,在SVM中经常使用核函数来将输入映射到高维空间,内积只是核函数的一种。在这里,我们做三个步骤:替换内积为核函数,用a2a2表示a1a1,同时对目标函数求a2a2的二阶导数。这里我就省略一下过程,最后可以得到下面这个结果。

η=K(x1,x1)+K(x2,x2)2K(x1,x2)(20)(20)η=K(x1,x1)+K(x2,x2)−2K(x1,x2)


在一般情况下,目标函数是正定的。因此在a2a2的变动范围内,目标函数可以取到极小值,而且ηη会大于0.在这种情况下,SMO可以得到使得目标函数最小的anew2a2new

anew2=a2+y2(E1E2)η(21)(21)a2new=a2+y2(E1−E2)η


其中Ei=uiyiEi=ui−yi,即第ii个训练样本的偏移。但是,我们还需要考虑a2a2的取值范围,所以我们最后得到的a2a2的新值为

anew,clip2=Hanew2Lifanew2Hif L<anew2<Hifanew2L(22)(22)a2new,clip={Hifa2new≥Ha2newif L<a2new<HLifa2new≤L


同时,我们可以更新a1a1,令s=y1y2s=y1y2

anew1=a1+s(a2anew,clip2)(23)(23)a1new=a1+s(a2−a2new,clip)


至此,双变量的二次规划问题基本解决,现在唯一一个遗留的问题就是,如果核矩阵不是正定,那么这个时候怎么办。
当然,有效的核函数所构建的核矩阵一定是正定的,这个是核函数有效的Mercer条件。对于坑爹的非正定核的情况,我们需要手工计算在直线两端的目标函数的值,通过比较来确定如何更新这两个变量。这里我就懒得去写公式了,直接照搬SMO那篇paper里面的说明。

![非正定条件更新]{{attach}image\SVM\anormal_kernal.png}

乘子选择问题

由于对于任何两个乘子,只要其中一个乘子违反了KKT条件,则我们总能通过双变量二次优化使目标函数减小。因此,收敛是一定的,现在需要考虑的是收敛的速度,及如何选取候选的两个乘子来加快收敛。

目前有两种启发式的方法,一种用来寻找第一个乘子,另外一种用来寻找第二个乘子。第一个启发方法构成了SMO的外部循环。这个启发方法首先对整个训练集合进行搜索,寻找那些违反下式KKT条件的样例。

ai=00<ai<Cai=Cμi=Cξi=0 u1+ξi0yiui1μi0ξi=0 u1+ξi=0yiui=1μi=0ξi0u1+ξi=0yiui1(24)(24)ai=0→μi=C→ξi=0→ u−1+ξi≥0→yiui≥10<ai<C→μi≠0→ξi=0→ u−1+ξi=0→yiui=1ai=C→μi=0→ξi≥0→u−1+ξi=0→yiui≤1


如果一个数据样例违反了上述KKT条件,则我们将这个样例数据加入到候选集合。通过这样的判别条件,我们对所有的乘子不为0或CC的数据进行扫描,得到了一个待优化的候选集合。

0 0
原创粉丝点击