SVM基础SMO

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,b w,b所遵循的条件为

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


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

1wTw(4) (4)1wTw


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

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


在得出上述问题的最优解中 ai ai的取值之后,我们可以得到 w,b w,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=wTxb u=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


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

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


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

Two Lagrange Multiplier

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

双变量关系

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

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


反之,如果 y1=y2 y1=y2,则 a2 a2的下界 L L和上界 H H可以表示为

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

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


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

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


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

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


同时,我们可以更新 a1 a1,令 s=y1y2 s=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或 C C的数据进行扫描,得到了一个待优化的候选集合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值