SVM基础
SVM是vapnik发明的线性分类器,处理的是标签为{-1,1}的数据,其理论支持为经验风险最小化。经验风险最小化就是VC维最小化,在SVM中的体现为最大化分类间隔,因为线性分类器的VC维与最大分类间隔的平方成反比。具体的VC维表示为下公式
VC−dimension≤min{R2M2,n}+1(1)(1)VC−dimension≤min{R2M2,n}+1
其中,R为包围所有数据点的最小球半径,M为分类间隔的一半,n为样本数目大小。下图就比较形象的说明了SVM是干什么用的。
最终SVM得到的线性分类器的公式如下
而参数w,bw,b所遵循的条件为
∀iyi(wTxi−b)≥1(3)(3)∀iyi(wTxi−b)≥1
对于任何一个测试点xx,如果uu的值大于等于1,则这个点被标注为1。否则如果uu小于等于-1,则这个点标注为-1.这个分类器的分类间隔为
所以我们如果要最大化分类间隔,则需要最小化12wTw12wTw。所以当前问题转变为一个凸优化问题
minimizesubjectto12wTw∀i:yi(wTxi−b)≥1(5)(5)minimize12wTwsubjectto∀i:yi(wTxi−b)≥1
我们可以得到等价的对偶问题
minimizesubjectto12wTw−∑ai(yi(wTxi−b)−1)∀i ai≥0∀i yi(wTxi−b)−1≥0∀i ai(yi(wTxi−b)−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条件为
wT−∑aiyixiT∑aiyi∀i ai∀i yi(wTxi−b)−1∀i ai(yi(wTxi−b)−1)=0=0≥0≤0=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 to12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1nai∀i ai≥0∑i=1nyiai=0(8)(8)minimize12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1naisubject to∀i ai≥0∑i=1nyiai=0
在得出上述问题的最优解中aiai的取值之后,我们可以得到w,bw,b的表达式.
wb=∑aiyixi=wTxk−ykfor ak>0(9)(9)w=∑aiyixib=wTxk−ykfor ak>0
上面所陈述的是线性可分的情况,如果数据并不是线性可分的,则我们需要引入松弛变量ξξ来代表偏离程度。
minimizesubjectto12wTw+C∑ξi∀i yi(wTxi−b)≥1−ξi∀i ξi≥0(10)(10)minimize12wTw+C∑ξisubjectto∀i yi(wTxi−b)≥1−ξi∀i ξi≥0
上面问题的对偶问题为
minimizesubjectto12wTw+C∑ξi−∑ai(yi(wTxi−b)−1+ξi)+∑μiξi∀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(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 to12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1nai∀i 0≤ ai≤C∑i=1nyiai=0(13)(13)minimize12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1naisubject to∀i 0≤ ai≤C∑i=1nyiai=0
可以看出,引入松弛变量与未引入松弛变量所得到的问题基本差不多。令u=wTx−bu=wTx−b,从得到的结果逆向推理,我们可以得到下面的式子。
ai=00<ai<Cai=C→μi=C→ξi=0→ u−1+ξi≥0→yiui≥1→μi≠0→ξi=0→ u−1+ξi=0→yiui=1→μi=0→ξi≥0→u−1+ξi=0→yiui≤1(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 to12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1nai∀i 0≤ ai≤C∑i=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=0→aiyi+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,a2−a1),H=min(C,C+a2−a1)(17)(17)L=max(0,a2−a1),H=min(C,C+a2−a1)
反之,如果y1=y2y1=y2,则a2a2的下界LL和上界HH可以表示为
L=max(0,a2+a1−C),H=min(C,a2+a2)(18)(18)L=max(0,a2+a1−C),H=min(C,a2+a2)
而此时的优化目标为
minimize12∑i=1n∑j=1nyiyjxiTxjaiaj−∑i=1nai=2x1Tx2y1y2a1a2+a1y1x1TR1+a2y2x2TR1−C(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(E1−E2)η(21)(21)a2new=a2+y2(E1−E2)η
其中Ei=ui−yiEi=ui−yi,即第ii个训练样本的偏移。但是,我们还需要考虑a2a2的取值范围,所以我们最后得到的a2a2的新值为
anew,clip2=⎧⎩⎨⎪⎪Hanew2Lifanew2≥Hif L<anew2<Hifanew2≤L(22)(22)a2new,clip={Hifa2new≥Ha2newif L<a2new<HLifa2new≤L
同时,我们可以更新a1a1,令s=y1y2s=y1y2
anew1=a1+s(a2−anew,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→ u−1+ξi≥0→yiui≥1→μi≠0→ξi=0→ u−1+ξi=0→yiui=1→μi=0→ξi≥0→u−1+ξi=0→yiui≤1(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