1. 概述
1. 函数间隔
2. 间隔最大化
3. 支持向量和间隔边界
4. 学习的对偶算法
0. 支持向量
4. 非线性支持向量机与核函数
0. 核技巧
1. 核函数的定义
3. 常用核函数
4. Mercer定理
5. 实际中的选择
6. 序列最小最优化SMO算法
0. a值更新推导
1. b值的更新
1、概述
支持向量机是一种二类分类模型.它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器.支持向量机的学习策略是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数的最小化问题.支持向量机的学习算法是求解凸二次规划的最优化算法.
支持向量机学习方法包含构建由简至繁的模型:线性可分支持向量机、线性支持向量机和非线性支持向量机。简单模型是复杂模型的基础,也是复杂模型的特殊情况。
(1)线性可分支持向量机:当训练数据线性可分时(一条线或平面能完全正确分开),通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机。
(2)线性支持向量机:当训练数据近似线性可分时,通过软间隔最大化,也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机。
(3)当训练数据线性不可分时,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。
当输入空间为欧式空间或离散集合、特征空间为希尔伯特空间时,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高纬的特征空间中学习线性支持向量机。这样的方法称为核技巧。核方法(kernel method)是比支持向量机更为一般的机器学习方法。
线性可分支持向量机与硬间隔最大化
学习的目的是在特征空间中找到一个分离超平面,能将实例分到不同的类。分离超平面对应于方程w·x+b=0,它由法向量w和截距b决定,可用(w,b)来表示.分离超平面将特征空间划分为两部分,一部分是正类,一部分是负类.法向量指向的那一侧为正类,另一侧为负类. (例如我们有一个线性函数,g(x)=wx+b,我们可以取阈值为0,这样当有一个样本xi需要判别的时候,我们就看g(xi)的值。若g(xi)>0,就判别为类别C1,若g(xi)<0,则判别为类别C2(等于的时候我们就拒绝判断,呵呵)。此时也等价于给函数g(x)附加一个符号函数sgn(),即f(x)=sgn
[g(x)]是我们真正的判别函数。
关于g(x)=wx+b这个表达式要注意三点:一,式中的x不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8),则xT=(3,8) ,而不是x=3(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置)。二,这个形式并不局限于二维的情况,在n维空间中仍然可以使用这个表达式,只是式中的w成为了n维向量(在二维的这个例子中,w是二维向量,注意这里的w严格的说也应该是转置的形式,为了表示起来方便简洁,以下均不区别列向量和它的转置,聪明的读者一看便知);三,g(x)不是中间那条直线的表达式,中间那条直线的表达式是g(x)=0,即wx+b=0,我们也把这个函数叫做分类面。)
当x<0时,sign(x)=-1;
当x=0时,sign(x)=0;
当x>0时,sign(x)=1。
我们这次使用的结果标签是y=-1,y=1,替换在logistic回归中使用的y=0和y=1(使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上)
下文你将看到,当我们转化到优化 的时候,为了求解方便,会把yf(x)令为1,即yf(x)是y(w^x + b),还是y(w^x - b),对我们要优化的式子max1/||w||已无影响。
从而在我们进行分类的时候,将数据点 x代入 f(x) 中,如果得到的结果小于 0 ,则赋予其类别 -1 ,如果大于0 则赋予类别 1 。如果 f(x)=0,则很难办了,分到哪一类都不是。
函数间隔
一般地,当训练数据线性可分时,存在无穷多个分离超平面可将两类数据正确分开.感知机利用误分类最小的策略,求得分离超平面,不过这时的解有无穷多个.线性可分支持向量机利用间隔最大化求最优分离超平面,这时,解是唯一的.
一般来说,一个点距离分离超平面的远近可以表示分类预测的确信程度.
在超平面w·x+b=0确定的情况下,|w·x+b|能够相对的表示点x距离超平面的远近(因为跟远近成正比关系).而w·x+b的符号与类标记y的符号是否一致能够表示分类是否正确.所以可用量y(w·x+b)来表示分类的正确性及确信度,这就是函数间隔(functional margin)的概念.
我们定义函数间隔functional margin 为:
(实际上这两个 Criteria 是互通的,我们定义 functional margin 为γ?=y(wTx+b)=yf(x),注意前面乘上类别 y 之后可以保证这个 margin 的非负性(因为 f(x)<0 对应于 y=?1 的那些点),而点到超平面的距离定义为geometrical margin)
接着,我们定义超平面(w,b)关于训练数据集T的函数间隔为超平面(w,b)关于T中所有样本点(xi,yi)的函数间隔最小值,其中,x是特征,y是结果标签,i表示第i个样本,有:
r=minri (i=1,...n)
然与此同时,问题就出来了:上述定义的函数间隔虽然可以表示分类预测的正确性和确信度,但在选择分类超平面时,只有函数间隔还远远不够,因为如果成比例的改变w和b,如将他们改变为2w和2b,虽然此时超平面没有改变,但函数间隔的值f(x)却变成了原来的2倍。
事实上,我们可以对法向量w加些约束条件,使其表面上看起来规范化,如此,我们很快又将引出真正定义点到超平面的距离--几何间隔geometrical margin的概念(很快你将看到,几何间隔就是函数间隔除以个||w||,即yf(x) / ||w||)。
点到超平面的距离定义:几何间隔Geometrical margin
对于一个点 x ,令其垂直投影到超平面上的对应的为 x0 ,w 是垂直于超平面的一个向量, 为样本x到分类间隔的距离,
我们有
其中,||w||表示的是范数。
又由于 x0 是超平面上的点,满足f(x0)=0 ,代入超平面的方程即可算出:
不过这里的 是带符号的,我们需要的只是它的绝对值,因此类似地,也乘上对应的类别 y即可,因此实际上我们定义 几何间隔geometrical margin 为(注:别忘了,上面 的定义,
r=y(wTx+b)=yf(x)):
代人相关式子可以得出:yi*(w/||w||xi + b/||w||)。
综上,函数间隔y (wx+b)=y f(x)实际上就是|f(x)|,只是人为定义的一个间隔度量;而几何间隔|f(x)|/||w||才是直观上的点到超平面距离
间隔最大化
下面考虑如何求得一个函数间隔最大的分离超平面,即最大间隔分离超平面,具体的这个问题可以表示为下面的约束最优化问题:
有一个问题就是,当w和b按比例改变为λw和λb时,超平面并没有改变(wx+b=0),而 ?γ 则变为 λ?γ .此时约束条件没有变,因为两边都变成λ倍.但是目标函数却变为λ倍了.优化问题却变了.解决的办法就是在目标函数上加上一个w的规范化项.
这时,我们发现不管 ?γ 变为原来的多少倍,优化问题都没有变化.所以我们直接取 ?γ =1,代入上面的优化问题.注意到最大化 1||w|| 等价于最小化 12||w||2 ,于是就得到下面的线性可分支持向量机学习的最优化问题
这是一个凸二次规划问题.通过求解这个凸二次优化问题,可以得到w,b的最优值,代入wx+b=0就是我们的分离超平面了,然后新样本就可以通过决策函数来进行预测了.这就是最大间隔法.
(我这里省略了函数间隔和几何间隔 γ=?γ||w|| 的转换,我觉的不如这样讲来的简单和直接,转换来转换去的,看着都晕)
支持向量和间隔边界
可以通过最大化超平面和其最近的各个类别中数据点的距离来寻找最佳超平面。这个距离我们称之为边际距离
从上图中你可以看到超平面 C 的边际距离最大。因此,我们称 C 为最佳超平面。选择具有最大边际距离的超平面的做法是稳健的。如果我们选择其他超平面,将存在较高的错分率。
学习的对偶算法
为了求解线性可分支持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题(dual problem)得到原始问题(primal problem)的最优解,这就是线性可分支持向量机的对偶算法(dual problem).这样做的优点,一是对偶问题往往更容易求解,而是自然引入核函数,进而推广到非线性分类问题.
原始最优化问题:
首先构建拉格朗日函数(Lagrange functiong).为此,对每一个不等式约束引进拉格朗日乘子(Langrange multiplier) ai≥0,i=1,2,...,N ,定义拉格朗日函数:
L(w,b,a)=12||w||2?N∑i=1aiyi(w?xi+b)+N∑i=1ai
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:
maxaminw,bL(w,b,a)
所以为了得到对偶问题的解,需要先求L(w,b,a)对w,b的极小,再求对a的极大.(这里跟最大熵里是一样的.不懂请传送到对偶这里)
(1)求 minw,bL(w,b,a)
将拉格朗日函数L(w,b,a)分别对w,b求偏导数并令其等于0.
?wL(w,b,a)=w?N∑i=1aiyixi=0?bL(w,b,a)=N∑i=1aiyi=0
得
w=N∑i=1aiyixiN∑i=1aiyi=0
将上面两式代入拉格朗日函数,得:
(2)求 minw,bL(w,b,a) 对a的极大,即是对偶问题:
(将目标函数求极大变为求极小)
考虑原始最优化问题和对偶最优化问题,原始问题满足强对偶性(不等式只小于0),所以存在 w?,b?,a? ,使 w?,b? 是原始问题的最优解, a? 是对偶问题的解.这意味着求解原始问题可以转换为求解对偶问题.
对线性可分训练数据集,假设对偶最优化问题的解为 a?=(a?1,a?2,....,a?n)T ,则可以由 a? 求得原始最优化问题对(w,b)的解 w?,b? .具体过程如下:
由此定理可知,分离超平面可以写成
[N∑i=1a?iyi(x?xi)]+b?=0
分类决策函数可以写成
f(x)=sign{[N∑i=1a?iyi(x?xi)]+b?}
这就是说,分类决策函数只依赖于输入x和训练样本输入的内积(具体是说新样本x和各支持向量的内积,这点很重要,这是后面应用核函数的基础).上式称为线性可分支持向量机的对偶形式.
综上所述,对于给定的线性可分训练数据集,可以首先求对偶问题的解 a? ;再利用图中式7.25和7.26求得原始问题的解 w?,b? ;从而得到分离超平面及分类决策函数.这种算法称为线性可分支持向量机的对偶学习算法,是线性可分支持向量机学习的基本算法.(这个算法很重要,是SVM的核心,流程一定要清楚)
为什么a>0的点一定是支持向量,一定在间隔边界上?请看如下证明:
线性支持向量机与软间隔最大化
对于线性可分问题,上述线性可分支持向量机的学习(硬间隔最大化)算法是完美的.但是训练数据集线性可分时理想的情形.在现实问题中,训练数据集往往是线性不可分的,即在样本中出现噪声或特异点.对于这些样本点,不等式约束并能都成立.怎么才能将它扩展到线性不可分问题呢?这就需要修改硬间隔最大化,使其成为软间隔最大化.
具体的做法是对每个样本点(x,y)引进一个松弛变量 ξi ≥0,使函数间隔加上松弛变量大于等于1.这样,约束条件变为:
yi(w?xi+b)≥1?ξi
同时,对每个松弛变量 ξi ,支付一个代价 ξi .原始问题的目标函数由原来的 12||w||2 变成:
12||w||2+CN∑i=1ξi
这里,C>0称为惩罚参数,一般由应用问题决定,C值大时对误分类的惩罚增大,C值小时对误分类的惩罚减小.最小化上式包含两层含义:使 12||w||2 尽量小即间隔尽量大,同时使误分类点的个数尽量小,C是调和二者的系数.
有了上面的思路,线性不可分的线性支持向量机的学习问题变成如下凸二次规划问题(原始问题):
上述原始问题是一个凸二次规划问题,因而(w,b,ξ)的解是存在的.可以证明w的解是唯一的,但b的解不唯一,b的解存在与一个区间.
学习的对偶算法
线性支持向量机的对偶算法和线性可分支持向量的对偶算法流程是一样的.只不过多了几个变量需要注意.
以上是推导流程,下面是算法流程
符合条件的样本点上的平均值
支持向量
在线性不可分的情况下,将对偶问题的解 a?=(a?1,a?2,....,a?n)T 中对应于 a?i>0 的样本点称为支持向量(软间隔支持向量).如下图所示.图中,分离超平面由实线表示,间隔边界由虚线表示,正例点由"。"表示,负例点由“x”表示。图中还标出了实例 xi 到间隔边界的距离 ξ1||w||
软间隔支持向量 xi 或者在间隔边界上,或者在间隔边界与分离超平面之之间,或者在分离超平面误分的一侧.
下面讨论的是支持向量,所以前提都是 a?i>0 的( a?i=0 的点都是分对的,且在间隔边界上或以外.由于a不可能>C所以不讨论):
(1)若 a?i<C ,则 ξi=0 ,支持向量 xi 恰好落在间隔边界上.
(2)若 a?i=C ,且 0<ξi<1 ,则分类正确,支持向量 xi 在间隔边界与分离超平面之间.
(3)若 a?i=C ,且 ξi=1 ,则 xi 在分离超平面上.
(4)若 a?i=C ,且 ξi>1 ,则 xi 在分离超平面误分的一侧.
(4)若 a?i=C ,且 ξi=0 ,则 xi 在分离超平面误分的一侧的间隔边界上.
(上面的推导请参照一下几个条件)
上面是从松弛变量角度看样本点位置,下面我们看一下在KKT条件下,不同的a取值时,样本点函数间隔的大小及其位置:
非线性支持向量机与核函数
对解线性分类问题,线性分类支持向量机是一种非常有效的方法.但是,有时分类问题是非线性的,这时可以使用非线性支持向量机.本节叙述非线性支持向量机,其主要特点是利用核技巧(kernel trick).为此,先要介绍核技巧.核技巧不仅应用于支持向量机,而且应用于其他统计学习问题.(并不是有了SVM才引出核技巧,而是核技巧早存在了)
核技巧
对于上面左图的非线性分类问题,很明显一个平面是无法很好的将样本正确的分类.若果希望用我们之前的解线性分类问题的方法来解决这个问题,那么采取的方法就是进行一个非线性变换,将非线性问题变换为线性问题,通过解变换后的线性问题的方法求解原来的非线性问题.上图所示的例子,通过变换,将左图中椭圆变换成右图中的直线,将非线性分类问题变换为线性分类问题.
核函数的定义
核技巧在支持向量机中的应用
我们注意到在线性支持向量机的对偶问题中,无论是目标函数还是决策函数(分离超平面)都只涉及实例之间的内积.在对偶问题的目标函数(7.37)中的内积 xi?xj 可以用核函数 K(xi?xj)=?(xi)??(xj)来代替.此时对偶函数的目标函数成为:
W(a)=N∑i=1N∑j=1aiajyiyjK(xi,xj)?N∑i=1ai
同样,分类决策函数中的内积也可以用核函数代替,而分类决策函数式成为:
f(x)=sign{[N∑i=1a?iyiK(x,xi)]+b?}
这等价于经过映射函数 ? 将原来的输入空间变换到一个新的特征空间,将输入空间中的内积 xi?xj变换为特征空间中的内积 ?(xi)??(xj) ,在新的特征空间里从训练样本中学习线性支持向量机.当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型.
也就是说,在核函数K()给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机.学习是隐式地在特征空间进行的,不需要显示地定义特征空间和映射函数.这样的技巧称为核技巧,它是巧妙地利用线性分类学习方法与核函数解决非线性问题的技术.在实际应用中,往往依赖领域知识直接选择核函数,核函数选择的有效性需要通过实验验证.
常用核函数
1.线性核(Linear Kernel)
K(x,y)=xTy+c
2.多项式核(Polynomial Kernel)
K(x,y)=(xTy+c)d
3.径向基核函数(Radial Basis Funtion,通常简称RBF核)
K(x,y)=exp(?γ||x?y||2)
也叫高斯核(Gaussian Kernel),因为它可以看成如下核函数的另一种形式:
K(x,y)=exp(?||x?y||22σ2)
另外两个比较常用的核函数幂指数核,拉普拉斯核也属于径向基核函数,此外不太常用的径向基核还有ANVOA核,二次有理核,多元二次核,逆多元二次核.
4.多层感知器核(Sigmoid核):
K(x,y)=tanh(a?x,y?+r)
其中,tanh是双曲正切,a是一个标量,r为位移参数.需要强调的是,它仅对于某些a,r>0,才是非负定的.至于使得K非负定,这些参数应满足的充要条件,之间还没有答案.对某些参数,它与高斯核非常近似.
(能满足这些核函数的映射函数都是映射到希尔伯特空间的.希尔伯特空间可以理解为无限维空间.在低维上,是找不到满足核函数的映射函数的.虽然我们并不知道具体的映射函数是什么,但是知道它必须是高纬的才行.)
Mercer定理
一个核函数是有效的核函数,也就是说有 ?(x)??(y) 能表达它,或者说能花等号.拿线性核来说,必须能找到映射函数使下式成立:
xTy+c=?(x)??(y)
那么什么样的核函数有映射函数与之对应呢?Mercer定理告诉我们,在训练集上得到的核函数矩阵K应该是半正定的K≥0.也就是说:
K是有效的核函数 ==> 核函数矩阵K是对称半正定的。
实际中的选择
在实际中,基本都用的RBF核,它相比其他核函数有以下优点:
1)RBF核函数可以将一个样本映射到一个更高维的空间,而且线性核函数是RBF的一个特例,也就是说如果考虑使用RBF,那么就没有必要考虑线性核函数了。
2)与多项式核函数相比,RBF需要确定的参数要少,核函数参数的多少直接影响函数的复杂程度。另外,当多项式的阶数比较高时,核矩阵的元素值将趋于无穷大或无穷小,而RBF则在上,会减少数值的计算困难。
3)对于某些参数,RBF和sigmoid具有相似的性能。
坐标上升法(Coordinate ascent)
在最后讨论如何如何求W(a)之前,我们先介绍一下坐标上升法的基本原理(后面要讲的求W(a)中a的值的SMO算法就是基于这种思想).
假设要求解下面的优化问题:
maxaW(a1,a2,...,am)
这里W是a向量的函数.之前我们在回归中提到过两种求最优解的方法,一种是梯度下降法,另外一种是牛顿法。现在我们再讲一种方法称为坐标上升法(求解最小值问题时,称作坐标下降法,原理一样).
方法过程:
最里面语句的意思是固定除 ai 之外的所有 aj(j≠i) ,这时W可看作只是关于 ai 的函数,那么直接对 ai求导优化即可。这里我们进行最大化求导的顺序i是从1到m,可以通过更改优化顺序来使W能够更快地增加并收敛。如果W在内循环中能够很快地达到最优,那么坐标上升法会是一个很高效的求极值方法。
(如果你看过我之前写的梯度下降的博客,你会发现这里其实就是共轭方向是欧式空间单位方向的共轭方向法)
下面通过一张图来展示:
椭圆代表了二次函数的各个等高线,变量数为2,起始坐标是(2,-2)。图中的直线式迭代优化的路径,可以看到每一步都会向最优值前进一步,而且前进路线是平行于坐标轴的,因为每一步只优化一个变量。
注:本小节摘抄自http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988415.html
序列最小最优化SMO算法
SMO算法有Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for TrainingSupport Vector Machines》了。
首先回到我们前面一直悬而未解的问题,对偶函数最后的优化问题:
要解决的是在参数 (a1,a2,...,an) 上求W的极小值问题.至于 xi,yi 是训练样本,是已知数.C由我们预先设定,也是已知数.
按照坐标上升的思路,我们首先固定除 a1 以外的所有参数,然后在 a1 上求极值。等一下,这个思路有问题,因为如果固定 a1 以外的所有参数,那么 a1 将不再是变量(可以由其他值推出),因为问题中规定了:
a1y1+N∑i=2aiyi=0
因此,我们需要一次选取两个参数做优化,比如 a1 和 a2 ,此时 a2 可以由 a1 和其他参数表示出来。这样回带到W中,W就只是关于 a1 的函数了,可解。
这样,SMO的主要步骤如下:
(1)选取一对 ai,aj ,选取方法是用启发式方法(具体方法后面讲).
(2)固定 ai,aj 以外的其他参数,确定W极值下的 ai ,其中 aj 由 ai 表示.
SMO之所以高效就是因为在固定其他参数后,对一个参数的优化过程很高效.
a值更新推导
假设我们选取了初始值 (a1,a2,...,an) 满足了问题中的约束条件.接下来,我们固定 (a3,a4,...,an) ,这样W就是 a1 和 a2 的函数.并且 a1 和 a2 满足条件:
a1y1+a2y2=?N∑i=3aiyi
由于 (a3,a4,...,an) 都是已知固定值,因此为了方便,可将等式右边标记为实数值ζ.
a1y1+a2y2=ζ
a1 和 a2 的取值范围
当 y1 和 y2 异号时,也就是一个为1,一个为-1时,他们可以表示成一条直线,斜率为1.如下图:
横轴是 a1 ,纵轴是 a2 , a1 和 a1 既要在矩形方框内(满足 0≤ai≤C 的约束),也要在直线上(满足 N∑i=1aiyi=0 的约束),因此
L=max(0,a2?a1),H=min(C,C+a2?a1)
(由于不知道y1,y2符号谁正谁负,所有图中直线有两条,而a1,a2的取值范围相应的就有两种,所以用L和H这样的形式表示了)
同理,当 y1 和 y2 同号时(同负或同正):
L=max(0,a2+a1?C),H=min(C,a2+a1)
用 a2 表示 a1
这里我们用 aiter1 和 aiter2 代表某次迭代前的原始值.因此是常数,而 a1 和 a2 是变量,待求.由于 a1 和 a2 要满足 N∑i=1aiyi=0 的约束,所以:
y1aiter1+y2aiter2=?N∑i=3aiyi=a1y1+a2y2
那么用s表示 y1y2 ,上式两边乘以 y1
a1+sa2=aiter1+saiter2=δ
其中
δ=?y1N∑i=3aiyi
变换式子:
a1=δ?sa2
至此我们用 a2 表示了 a1 ,下一步就是代如W(a)使W(a)变为只含一个变量的方程了.
变换W(a)为一个a变量形式
首先我们将W(a)中的 a1 和 a2 项展开:
W(a)=12K11a21+12K22a22+sK12a1a2+y1a1v1+y2a2v2?a1?a2+Wconstant
(最后一项是常数项)
其中:
我们将 a1=δ?sa2 代入W(a)的展开式中得:
这时候就只有 a2 是变量了.
a1 和 a2 的更新
W(a)对 a2 求导:
如果W的二阶导数大于0(凸函数),那么一阶导数为0时,就是极小值了.假设其一阶导数为0(一般成立),那么上式化简为:
a2(K11+K22?2K12)=s(K11?K12)δ+y2(v1?v2)+1?s
将 δ 和v代入后,继续化简推导,得:
a2(K11+K22?2K12)=aiter2(K11+K22?2K12)+y2(u1?u2+y2?y1)<1>
我们用η来表示:
η=K11+K22?2K12
通常情况下目标函数是正定的,也就是说,能够在直线约束方向上求得最小值,并且η>0.(实际上η就是W(a)的二阶导,可自己求一下试试)
那么我们在<1>式两边都除以η可以得到
a2=aiter2+y2(E1?E2)η
其中 Ei=ui?yi .
上面的 a2 还不是最终迭代后的值,还需要进行取值范围约束:
那么:
anew1=aiter1+a(aiter2?anew2)
在特殊情况下,η可能不为正,如果核函数K不满足Mercer定理,那么目标函数可能变得非正定,η可能出现负值.即使K是有效的核函数,如果训练样本中出现相同的特征x,那么η仍有可能为0.为保证SMO算法在η不为正值的情况下仍有效,我们可以推导出η就是W(a)的二阶导数,当η<0时,W(a)没有极小值(是个凹函数),最小值在边缘处取到(类比 y=?x2 ),当η=0时,W(a)是单调函数,最小值也在边缘处取得,而 a2 的边缘就是L和H.那么到底是左边还是右边W(a)取极小值呢,那就要将 a2=L 和 a2=H 分别带进W(a)中看看哪个W(a)小了,哪个小 a2 就取对应的边界.然后通过关系式求得 a1 .
b值的更新
由于 a1,a2 的选取(选取规则最后讲)要依赖如下条件的判断:
而上式右边的计算需要用到b值,所以在每一次迭代更新完 a1,a2 后,要根据KKT条件来调整b.
当 0<anew1<C (注意这个前提)时,由KKT条件可知:
N∑i=1aiyiKi1+b=y1
于是
bnew1=y1?N∑i=3aiyiKi1?anew1y1K11?anew2y2K21
由E的定时式有(注意E是更新之前的一个值,它的计算用的是 aiteri ,上面b的计算是用更新后的a值):
E1=u1?y1=N∑i=3aiyiKi1+aiter1y1K11+aiter2y2K21+biter?y1
由上面两个式子可得:
bnew1=?E1?y1K11(anew1?aiter1)?y2K21(anew2?aiter2)+biter
同理,当 0<anew2<C 时:
bnew2=?E2?y1K12(anew1?aiter1)?y2K22(anew2?aiter2)+biter
(b是一个实值,它不像a和w是一个向量,所以a1,a2的b值要相同,那么就产生了如何选取 bnew 值的问题,因为上面a1,a2都计算出来一个值)
上面的b值的解析式是在 0<anewi<C 的约束下解出来的,实际上a值并不都满足这个约束,有时会取到界上.不同情况下b的取值会有不同.
(1)如果 anew1,anew2 都在界内,即满足 0<anewi<C ,那么
bnew=bnew1=bnew2
(2)如果 anew1,anew2 都在界上,即为0或C,那么 bnew1 和 bnew2 之间的数都是符合KKT条件的阀值,这是选中点作为更新值,
bnew=bnew1+bnew22
(3)如果 anew1 在界内,那么:
bnew=bnew1
(4)如果 anew2 在界内,那么:
bnew=bnew2
(事实上第2条是不对的.这是一个SVM原始论文里面SMO算法的缺陷,当a1,a2等于0,或C直接求b1 b2的均值,有时候会导致b值得不到最优值,直接恶化SVM模型的能力。 Keerthi的SMO算法的偏置计算改进了。)
拉格朗日乘子 ai 的启发式选择方法
(下面的违背KKT条件是指在左边的情况下,右边式子并不符合上图所示)
所谓的启发式选择方法主要思想是每次选择拉格朗日乘子的时候,优先选择样本前面系数 0<anewi<C 的 ai 作优化(论文中称为无界样例),因为在界上( ai 为0或C)的样例对应的系数ai 一般不会更改。
这条启发式搜索方法是选择第一个拉格朗日乘子用的,比如前面的 a1 。那么这样选择的话,是否最后会收敛。可幸的是Osuna定理告诉我们只要选择出来的两个 ai 中有一个违背了KKT条件,那么目标函数在一步迭代后值会减小。违背KKT条件不代表 0<anewi<C ,在界上也有可能会违背。是的,因此在给定初始值 ai =0后,先对所有样例进行循环,循环中碰到违背KKT条件的(不管界上还是界内)都进行迭代更新。等这轮过后,如果没有收敛,第二轮就只针对 0<anewi<C 的样例进行迭代更新。
在第一个乘子选择后,第二个乘子也使用启发式方法选择,第二个乘子的迭代步长大致正比于 |E1?E2| ,选择第二个乘子能够最大化 |E1?E2| 。即当 E1 为正时选择负的绝对值最大的 E2,反之,选择正值最大的 E2 。
最后的收敛条件是在界内( 0<anewi<C )的样例都能够遵循KKT条件,且其对应的 ai 只在极小的范围内变动。
http://www.duzelong.com/wordpress/201508/archives1491/