支持向量机(SVM)算法介绍
支持向量机(support vector machine)是一种二分类算法,其基本模型定义为特征空间上间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终转化为一个凸二次规划问题的求解。SVM可分类为三类:线性可分支持向量机(linear support vector machine in linearly separable case)、线性支持向量机(linearsupport vector machine)及非线性支持向量机(non-linearsupport vector machine)。
当训练数据线性可分时,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据线性不可分时,通过使用核技巧 (kernel trick)及软间隔最大化,学习非线性支持向量机。
线性可分支持向量机原理
线性可分支持向量机的定义
给定一个线性可分的训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为
w∗⋅x+b∗=0
以及相应的分类决策函数
f(x)=sign(w∗⋅x+b∗)
就称为线性可分支持向量机。
那么,如何求解得到间隔最大化的超平面呢?
函数间隔、几何间隔与硬间隔最大化
函数间隔:
对于给定的训练数据集T和超平面(w,b),定义超平面(w,b)关于样本点
(xi,yi)的函数间隔为:
γ^i=yi(w⋅xi+b)
定义超平面(w,b)关于训练数据集T的函数间隔为超平面(w,b)关于T中所有样本点
(xi,yi)的函数间隔值之中的最小值, 即
γ^=mini=1,⋯,Nγ^i
函数间隔可以表示分类预测的正确性及确信度。但是选择分离超平面时, 只有函数间隔还不够,因为只要成比例地改变w和b, 例如将它们改为2w和2b, 超平面并没有改变, 但函数间隔却成为原来的2倍。
因此,我们可以对分离超平面的法向量w加某些约束, 如规范化,
∥w∥=1, 使得间隔是确定的。这时函数间隔成为几何间隔。注意
∥w∥的意思是w的二范数。
几何间隔:
对于给定的训练数据集T和超平面(w,b),定义超平 面(w,b)关于样本点样本点
(xi,yi)的几何间隔为:
γi=yi(∥w∥w⋅xi+∥w∥b)
定义超平面(w,b)关于训练数据集T的几何间隔为超平面(w,b)关于T中所有样本点
(xi,yi)的几何间隔值之中的最小值,即
γ=mini=1,⋯,Nγi
超平面(w,b)关于样本点
(xi,yi)的几何间隔一般是实例点到超平面的带符号的距离(signed distance),当样本点被超平面正确分类时就是实例点到超平面的距离。
函数间隔和几何间隔有如下关系:
γiγ=∥w∥γ^i=∥w∥γ^
如果
∥w∥=1,那么函数间隔和几何间隔相等。如果超平面参数w和b成比例地改变(超平面没有改变),函数间隔也按此比例改变,而几何间隔不变。
硬间隔最大化:
我们寻找的超平面应当满足:这个超平面不仅可以将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。
最大间隔分离超平面问题可以表示为下面的约束最优化问题:
maxw,bγ
s.t.
yi(∥w∥w⋅xi+∥w∥b)⩾γ,i=1,2,⋯,N
即我们希望最大化超平面(w,b)关于训练数据集的几何间隔
γ。约束条件表示的是超平面(w,b)关于每个训练样本点的几何间隔至少是
γ。
又由于几何间隔和函数间隔的关系为:
γ=∥w∥γ^
上面的最优化问题可以表示为:
maxw,b∥w∥γ^
s.t.
yi(w⋅xi+b)⩾γ^,i=1,2,⋯,N
γ^取值并不影响最优化问题的解。假设将w和b按比例改变为λw和λb,这时函数间隔成为
λγ^。函数间隔的这一改变对上面最优化问题的不等式约束没有影响,对目标函数的优化也没有影响,也就是说,它产生一个等价的最优化问题。
因此,我们不妨取
γ^=1,则上面的最优化问题变为:
minw,b21∥w∥2
s.t.
yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N
注意:最大化
∥w∥1和最小化
21∥w∥2是等价的。这是一个凸二次规划(convex quadratic programming)问题。
如果我们能够求出上面的约束最优化问题的解
w∗,b∗,那么就可以得到最大间隔分离超平面
w∗⋅x+b∗=0及分类决策函数
f(x)=sign(w∗⋅x+b∗),这就是我们要找的线性可分支持向量机模型。
线性可分支持向量机学习算法
输入线性可分的训练数据集
T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中,
xi∈
X=Rn,
yi∈Y={−1,+1},i=1,2,⋯,N。
构造并求解约束最优化问题:
minw,b21∥w∥2
s.t.
yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N
求得最优解
w∗,b∗,以此得到超平面和分类决策函数:
w∗⋅x+b∗=0
f(x)=sign(w∗⋅x+b∗)
这个超平面和分类决策函数就是我们要求的线性可分支持向量机模型。
要证明最大间隔分离超平面存在且唯一具体可以看《统计学习方法》P100。存在性的证明是因为数据集已知线性可分,所以必存在这样的超平面;唯一性是用反证法来证明,先假设有两个不同的最优解,但最后推出两个最优解是相同的,故可以证明超平面唯一。
支持向量与间隔边界
支持向量:
在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量(support vector)。支持向量是使约束条件式s.t.
yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N等号成立的点,即
yi(w⋅xi+b)−1=0。
下面给出支持向量的定义:
考虑原始最优化问题
minw,b s.t. 21∥w∥2yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N
及对偶最优化问题
mina s.t. αi⩾0,21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi∑i=1Nαiyi=0i=1,2,⋯,N
将训练数据集中对应于
αi∗>0的样本点
(xi,yi)的实例
xi∈Rn称为支持向量。
对
yi=+1的正例点,支持向量在超平面
H1:w⋅x+b=1上;对
yi=−1的负例点,支持向量在超平面
H2:w⋅x+b=−1上。
H1和H2是平行的,没有实例点落在它们中间。
间隔边界:
在H1和H2之间形成一条长带,分离超平面与它们平行且位于它们中央。长带的宽度,即H1和H2之间的距离称为间隔(margin)。
间隔依赖于分离超平面的法向量w,等于
∥w∥2。H1和H2称为间隔边界。
在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。如果移动支持向量将改变所求的解;但是如果在间隔边界以外移动其他实例点,甚至去掉这些点,则解是不会改变的。由于支持向量在确定分离超平面中起着决定性作用,所以将这种分类模型称为支持向量机。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。
线性可分支持向量机学习算法的对偶算法及其求解方法
上面的最优化问题:
minw,b21∥w∥2
s.t.
yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N
在实际计算中并不好求解。
我们采取另一种解决方法:将它作为原始最优化问题,应用拉格朗日对偶性(其实就是拉格朗日乘数法),通过求解对偶问题(dual problem)得到原始问题(primal problem)的最优解,这就是线性可分支持向量机的对偶算法(dual algorithm)。
线性可分支持向量机学习算法的对偶算法的求解过程,其实就是拉格朗日乘数法构造函数并求解的过程:
首先由原始的最优化问题构造拉格朗日函数,对每一个不等式约束式(就是s.t开头的等式)引进拉格朗日乘子(Lagrauge multiplier)
αi⩾0,i=1,2,⋯,N,定义拉格朗日函数:
L(w,b,α)=21∥w∥2−∑i=1Nαiyi(w⋅xi+b)+∑i=1Nαi
其中
α=(α1,α2,⋯,αN)T为拉格朗日乘子向量。
原始问题的对偶问题是极大极小问题:
maxαminw,bL(w,b,α)
即先求
L(w,b,α)对
w,b的极小,再求对
α的极大。
首先求
minw,bL(w,b,α):
将函数
L(w,b,α)分别对
w,b的偏导数并均令其等于0。
∇wL(w,b,α)=w−∑i=1Nαiyixi=0
∇bL(w,b,α)=∑i=1Nαiyi=0
然后我们可得:
w=∑i=1Nαiyixi
∑i=1Nαiyi=0
将上面两式代入函数
L(w,b,α),得:
L(w,b,α)=21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαiyi((j=1∑Nαjyjxj)⋅xi+b)+i=1∑Nαi=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
故有
minw,bL(w,b,α)=−21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi
然后求
minw,bL(w,b,α)对
α的极大:
maxα−21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi
s.t. ∑i=1Nαiyi=0αi⩾0,i=1,2,⋯,N
将上式由求极大再转换成求极小,得到等价的对偶最优化问题:
minα21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi
s.t.
∑i=1Nαiyi=0
αi⩾0,i=1,2,⋯,N
这里其实只是第一个式子的所有项的符号变换了,这样就从极大问题变成了极小问题。
求解最优化问题的最优解
w∗,b∗:
w∗=∑i=1Nαi∗yixi
b∗=yj−∑i=1Nαi∗yi(xi⋅xj)
因此超平面和决策函数可以写成:
∑i=1Nαi∗yi(x⋅xi)+b∗=0
f(x)=sign(∑i=1Nαi∗yi(x⋅xi)+b∗)
f(x)=sign(∑i=1Nαi∗yi(x⋅xi)+b∗)称为线性可分支持向量机的对偶形式。分类决策函数只依赖于输入x和训练样本输入的内积。
线性支持向量机原理
线性支持向量机定义
线性可分支持向量机学习算法对线性不可分训练数据是不适用的。假如我们现在有一个线性不可分的数据集,但是这个数据集中除了少量的特异点之外,剩下的大部分样本点组成的集合是线性可分的,这个时候我们就可以用线性支持向量机学习算法来对其进行分类。
软间隔最大化
为了能够对上面介绍的这种数据集(大部分数据点组成的集合线性可分,只有少量的特异点)进行分类,我们需要修改线性可分支持向量机中的最优化问题的约束等式:
s.t.
yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N
我们可以对每个样本点
(xi,yi)引进一个松弛变量
ξi⩾0,使函数间隔加上松弛变量大于等于1。于是约束条件变为:
yi(w⋅xi+b)⩾1−ξi
对每个松弛变量
ξi支付一个代价
ξi,目标函数由原来的
21∥w∥2变成:
21∥w∥2+C∑j=1Nξi
C>0称为惩罚参数,一般由应用问题决定,C值大时对误分类的惩罚增大,C值小时对误分类的惩罚减小。
上面的目标函数有两层含义:使
21∥w∥2尽量小即间隔尽量大,同时使误分类点的个数尽量小,C是调和两者的系数。相对于线性可分支持向量机的硬间隔最大化,这被称为软间隔最大化。
那么这时我们的原始问题就变为:
minw,b,ξ21∥w∥2+C∑i=1Nξi
s.t. yi(w⋅xi+b)⩾1−ξi,i=1,2,⋯,Nξi⩾0,i=1,2,⋯,N
求得的分离超平面和分类决策函数为:
w∗⋅x+b∗=0
f(x)=sign(w∗⋅x+b∗)
这就是线性支持向量机模型。类似地,这个问题的求解并不容易,我们也需要找出这个问题的对偶形式然后对对偶问题求解。
线性支持向量机学习算法的对偶形式及求解方法
上面的原始问题的对偶问题为:
minα21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi
s.t. ∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
对这个对偶问题构造拉格朗日函数:
L(w,b,ξ,α,μ)≡21∥w∥2+C∑i=1Nξi−∑i=1Nαi(yi(w⋅xi+b)−1+ξi)−∑i=1Nμiξi
其中
αi⩾0,μi⩾0
类似地,我们先求
L(w,b,ξ,α,μ)对
w,b,ξ的极小。
∇wL(w,b,ξ,α,μ)=w−∑i=1Nαiyixi=0
∇bL(w,b,ξ,α,μ)=−∑i=1Nαiyi=0
∇ξiL(w,b,ξ,α,μ)=C−αi−μi=0
可得:
w=∑i=1Nαiyixi
∑i=1Nαiyi=0
C−αi−μi=0
将上面三个式子代入拉格朗日函数:
minw,b,ξL(w,b,ξ,α,μ)=−21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi
再对
minw,b,ξL(w,b,ξ,α,μ)求
α的极大,即得对偶问题:
maxα−21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi
s.t. μi⩾0,∑i=1Nαiyi=0C−αi−μi=0αi⩾0i=1,2,⋯,N
利用等式
C−αi−μi=0消去
μi,从而只留下变量
αi,并将约束
C−αi−μi=0
αt⩾0
μi⩾0,i=1,2,⋯,N
写成0
⩽αi⩽C
再将对目标函数求极大转换为求极小,于是得到对偶问题
mina s.t. 21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
定理:设
α∗=(α1∗,α2∗,⋯,αN∗)T是对偶问题
minα s.t. 21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
的一个解,若存在
α∗的一个分量
αj∗,0<αj∗<C,则原始问题
minx,b,ξ s.t. 21∥w∥2+C∑i=1Nξiyi(w⋅xi+b)⩾1−ξi,i=1,2,⋯,Nξi⩾0,i=1,2,⋯,N
的解
w∗,b∗可按下式求得:
w∗=∑i=1Nαi∗yixi
b∗=yj−∑i=1Nyiαi∗(xi⋅xj)
我们就可以得到分离超平面和决策函数:
∑i=1Nαi∗yi(x⋅xi)+b∗=0
f(x)=sign(∑i=1Nαi∗yi(x⋅xi)+b∗)
软间隔的支持向量
在线性不可分时,将上面对偶问题的的解
α∗=(α1∗,α2∗,⋯,αN∗)T中对应
αi∗>0的样本点
(xi,yi)的实例
xi称为支持向量。
如下图:
图中,分离超平面由实线表示,间隔边界由虚线表示,正例点由“。”表示,负例点由“X”表示。图中还标出了实例
xi到间隔边界的距离
∥w∥ξi。
若
αi∗<C,则
ξi=0,支持向量
xi恰好落在间隔边界上;若
αi∗=C,0<ξi<1,则分类正确,
xi在间隔边界与分离超平面之间;若
αi∗=C,ξi=1,则
xi在分离超平面上;若
αi∗=C,ξi>1,则
xi位于分离超平面误分一侧。
对于线性支持向量机,还有另一种最小化合页损失函数的理论可以解释。即当样本正确分类且函数间隔
yi(w⋅xi+b)>1时损失为0,否则损失为
1−yi(w⋅xi+b)。我们的目标就是使得损失值达到最小。具体推导过程可查看《统计学习方法》P113页。
非线性支持向量机原理
有时候我们的数据集中的数据完全线性不可分,但是如果我们把数据点都映射到高维空间(称为特征空间)后很可能就线性可分了。但映射到高维后,在高维空间上求解一个带约束的优化问题的计算量要大得多,即所谓的“维数灾难”。因此我们引入核函数来进行从低维到高维的转换。
非线性分类问题、核函数与核技巧
非线性分类问题与非线性分类问题的求解:
非线性分类问题是指通过利用非线性模型才能很好地进行分类的问题。
一般来说,对给定的一个训练数据集
T={(x1,y1),(x2,y2),⋯,(xN,yN)},
xi∈X=Rn,对应的标记有两类
yi∈Y={−1,+1},i=1,2,⋯,N。如果能用
Rn中的一个超曲面将正负例正确分开,则称这个问题为非线性可分问题。
如:
对于上图,将左图中的椭圆变换成右图中的直线:
设原空间为
X⊂R2,x=(x(1),x(2))T∈X,新空间为
Z⊂R2,z=(z(1),z(2))T∈Z,定义从原空间到新空间的变换(映射):
经过变换之后,原空间的点变为相应的新空间中的点,原空间的椭圆
w1(x(1))2+w2(x(2))2+b=0
变换为新空间中的直线
w1z(1)+w2z(2)+b=0
这个直线可以在新空间中将变换后的正负样例点正确分开。
因此,用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据中学习分类模型。
核函数:
设
X是输入空间(欧氏空间
Rn的子集或离散集合),又设
H为特征空间(希尔伯特空间),如果存在一个从
X到
H的映射:
ϕ(x):X→H
使得对所有的
x,z∈X,函数
K(x,z)满足
K(x,z)=ϕ(x)⋅ϕ(z)
则称
K(x,z)为核函数,
ϕ(x)为映射函数,
ϕ(x)⋅ϕ(z)为
ϕ(x)和
ϕ(z)的內积。
核技巧:
我们在学习与预测中只定义核函数
K(x,z),不显式定义映射函数
ϕ(x)。直接计算
K(x,z)比计算
ϕ(x)⋅ϕ(z)得到
K(x,z)要更加容易。
由于
ϕ是输入空间
Rn到特征空间
H的映射,而特征空间一般是高维的,因此对于给定的核函数
K(x,z) ,特征空间
H和映射函数
ϕ的取法并不唯一。
核技巧在支持向量机算法中的应用
在对偶问题的目标函数:
mina21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi中的內积
xi⋅xj可以用核函数
K(xi,xj)=ϕ(xi)⋅ϕ(xj)来表示。
于是目标函数变为:
W(α)=21∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi
同理,分类决策函数中的內积也可以用核函数表示,所以分类决策函数变为:
f(x)=sign(∑i=1Nnai∗yiϕ(xi)⋅ϕ(x)+b∗)=sign(∑i=1Nnai∗yiK(xi,x)+b∗)
这样就相当于我们将输入空间的內积
xi⋅xj变换为特征空间中的內积
ϕ(xi)⋅ϕ(xj),我们是从训练样本在特征空间中的数据中学习训练支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类的模型。
这里如何通俗地理解呢?
我们只定义了核函数,而映射
ϕ(x)具体是什么形式我们不进行定义也不知道(我们不知道
ϕ(x)的数学形式,也不知道特征空间有多少维),但是通过训练样本数据我们可以学习出映射
ϕ(x),使得输入一个x就可以得到对应的
ϕ(x)值(有点像深度神经网络)。这样我们就不需要定义特征空间具体是多少维,也不需要计算输入空间的数据点在特征空间的对应的具体数据点,这大大减少了计算量。
核函数的判定
设
X⊂Rn,K(x,z)是定义在
X×X上的对称函数,如果对任意
xi∈X,i=1,2,⋯,m,
K(x,z)对应的Gram矩阵
K=[K(xi,xj)]m×m
是半正定矩阵,则
K(x,z)是正定核。
Gram矩阵的定义:
n维欧式空间中任意
k(k≤n)个向量
α1,α2,…,αk的內积所组成的矩阵
Δ(α1,α2,…,αk)=⎝⎜⎜⎛(α1,α1)(α2,α1)…(αk,α1)(α1,α2)(α2,α2)⋯(αk,α2)…………(α1,αk)(α2,αk)…(αk,αk)⎠⎟⎟⎞
称为k个向量
α1,α2,…,αk的Gram矩阵。
常用核函数
多项式核函数:
公式为:
K(x,z)=(x⋅z+1)p
其对应的支持向量机是一个p次多项式分类器。
其分类决策函数为:
f(x)=sign(∑i=1Niai∗yi(xi⋅x+1)p+b∗)
高斯核函数:
K(x,z)=exp(−2σ2∥x−z∥2)
其对应的支持向量机是高斯径向基函数分类器。对于高斯核函数,如果x和z很接近,那么核函数值为1,如果x和z相差很大,那么核函数值约等于0。也就是说,这个核函数可以比较x和z的相似度,并映射到0到1。
其分类决策函数为:
f(x)=sign(∑i=1Nsai∗yiexp(−2σ2∥x−z∥2)+b∗)
其他核函数:
非线性支持向量机学习算法
输入线性可分训练集
T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中
xi∈X=Rn,
yi∈
Y={−1,+1},i=1,2,⋯,N。
选取适当核函数
K(x,z)和适当参数C,构造并求解最优化问题
minα21∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi
s.t. ∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
求出最优解
α∗=(α1∗,α2∗,⋯,αN∗)T。
选择
α∗的一个正分量
0<αj∗<C,计算其
b∗=yj−∑i=lNαi∗yiK(xi⋅xj)
最后,构造决策函数:
f(x)=sign(∑i=1Nαi∗yiK(x⋅xi)+b∗)
序列最小最优化(sequential minimal optimisation,SMO)算法
求解上面最优化问题的最优解
α∗=(α1∗,α2∗,⋯,αN∗)T的方式有很多,现在最常用的是SMO算法。该算法的思路是将大的优化问题转化为小的优化问题,而这些小的优化问题往往更容易求解,并且对它们进行顺序求解的结果和将它们作为整体求解的结果完全一致,但是SMO算法需要的时间要小得多。
KKT条件
对约束优化问题
minimize
f(x)
subject to
g(x)⩽0
列拉格朗日函数
L(x,λ)=f(x)+λg(x)
最佳解的必要条件包括拉格朗日函数
L(x,λ)的定常方程式、原始可行性、对偶可行性和松弛互补条件,用公式表示为:
∇xL=∇f+λg(x)=0 # 拉格朗日函数取得可行解的必要条件
g(x)⩽0 # 初始的不等式约束条件
λ⩾0 # 不等式约束的拉格朗日乘数需满足的条件
λg(x)=0 # 松弛互补条件
这就是KKT条件。如果我们要最大化
f(x)且受限于
g(x)⩽0,那么对偶可行性要改成
λ⩽0。
SMO算法的基本思路
如果SMO算法要解如下凸二次规划的对偶问题:
minα21∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi
s.t. ∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N
在这个问题中,变量是拉格朗日乘子,一个变量
αi对应于一个样本点
(xi,yi),变量的总数等于训练样本容量N。
如果所有变量的解都满足此最优化问题的KKT条件,那么就可以得到这个最优化问题的解,因为KKT条件是该最优化问题的充分必要条件。否则我们就任意抽取两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。
子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。也就是说,子问题只有一个自由变量。
假如是
α1,α2两个变量,
α3,α4,⋯,αN固定,那么由等式s.t.
∑i=1Nαiyi=0可知:
α1=−y1∑i=2Nαiyi
因此只要确定了
α2,
α1就确定了。
整个SMO算法包括两个部分:求解两个变量二次规划的解析方法和选择变量的启发式方法。
两个变量二次规划的求解方法
假如选择
α1,α2两个变量,
α3,α4,⋯,αN固定,那么SMO的最优化问题的子问题为:
α1,α2minW(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1i=3∑NyiαiKi1+y2α2i=3∑NyiαiKi2
s.t. α1y1+α2y2=−∑i=3Nyiαi=ζ
0⩽αi⩽C,i=1,2
其中
Kij=K(xi,xj),i,j=1,2,⋯,N,
ζ是常数。
0⩽αi⩽C,i=1,2的约束和
y1,y2均只能取值1或者-1, 这使得
(α1,α2)在盒子
[0,C]×[0,C]内,并且两者的关系直线的斜率只能为1或者-1,也就是说
α1,α2的关系直线平行于
[0,C]和
[0,C]形成的盒子的对角线。如下图所示:
由于
α1,α2的关系被限制在盒子里的一条线段上,这使得两个变量的最优化问题可以转化为单变量的最优化问题。
我们不妨假设最终是
α2的优化问题。
由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是
α1old,α2old,假设沿着约束方向
α2未经剪辑的解是
α2new,unc。本轮迭代完成后的解为
α1new,α2new。
α2new必须满足上图中的线段约束。假设L和H分别是上图中
α2new所在的线段的边界。那么显然我们有:
L≤α2new≤H
对于L和H,我们也有限制条件。如果是上面左图中的情况,则
L=max(0,α2old−α1old)H=min(C,C+α2old−α1old)
如果是上面右图中的情况,我们有:
L=max(0,α2old+α1old−C)H=min(C,α2old+α1old)
假如我们通过求导得到
α2new,unc,则最终的
α2new应该为:
α2new=⎩⎨⎧Hα2new,uncLα2new,unc>HL≤α2new,unc≤Hα2new,unc<L
如何求出
α2new,unc呢?很简单,我们只需要将目标函数对
α2求偏导数即可。
令
Ei=g(xi)−yi=∑j=1mαj∗yjK(xi,xj)+b−yi,其中
g(x)=w∗⋅ϕ(x)+b=∑j=1mαj∗yjK(x,xj)+b∗。
令
vi=∑j=3myjαjK(xi,xj)=g(xi)−∑j=12yjαjK(xi,xj)−b
于是我们的目标函数简化为:
W(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2
又由于
α1y1+α2y2=ζ,
yi2=1,那么可得
α1=y1(s−α2y2)
将上式带入我们的目标优化函数,就可以消除
α1:
W(α2)=21K11(ζ−α2y2)2+21K22α22+y2K12(ζ−α2y2)α2−(α1+α2)+(ζ−α2y2)v1+y2α2v2
再对
α2求偏导数,令偏导数为0:
∂α2∂W=K11α2+K22α2−2K12α2−K11sy2+K12sy2+y1y2−1−v1y2+y2v2=0
可得
(K11+K22−2K12)α2=y2(y2−y1+ζK11−ζK12+v1−v2)
=y2(y2−y1+sK11−sK12+(g(x1)−∑j=12yjαjK1j−b)−(g(x2)−∑j=12yjαjK2j−b))
将
ζ=α1y1+α2y2代入上式,有:
(K11+K22−2K12)α2new,unc=y2((K11+K22−2K12)α2oldy2+y2−y1+g(x1)−g(x2))=(K11+K22−2K12)α2old+y2(E1−E2)
于是我们最后可得
α2new,unc表达式为:
α2new,unc=α2old+K11+K22−2K12)y2(E1−E2)
再利用式子:
α2new=⎩⎨⎧Hα2new,uncLα2new,unc>HL≤α2new,unc≤Hα2new,unc<L
就可以更新
α2new了。知道了
α2new,那么我们也就知道了
α1new。
SMO算法两个变量的选择方法
SMO算法在每个子问题中选择两个变量优化,其中至少一个变量是违反KKT条件的。
第一个变量的选择:
SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件为:
αi∗=0⇒yig(xi)≥1
0<αi∗<C⇒yig(xi)=1
αi∗=C⇒yig(xi)≤1
一般来说,我们首先选择违反
0<αi∗<C⇒yig(xi)=1这个条件的点。如果这些支持向量都满足KKT条件,再选择违反
αi∗=0⇒yig(xi)≥1 和
αi∗=C⇒yig(xi)≤1的点。
第二个变量的选择:
SMO算法称选择第二个变量为内层循环,假设我们在外层循环已经找到了
α1, 第二个变量
α2的选择标准是让
∣E1−E2∣有足够大的变化。由于
α1确定时,E1也确定了,所以要想
∣E1−E2∣最大,只需要在E1为正时,选择最小的
Ei作为E2, 在E1为负时,选择最大的
Ei作2E2,可以将所有的
Ei保存下来加快迭代。
如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做
α2,直到目标函数有足够的下降, 如果所有的支持向量做
α2都不能让目标函数有足够的下降,可以跳出循环,重新选择
α1。
计算阈值b和差值
Ei:
在每次完成两个变量的优化之后,需要重新计算阈值b。当
0<α1new<C时,有
y1−∑i=1mαiyiKi1−b1=0
于是更新
b1new为:
b1new=y1−∑i=3mαiyiKi1−α1newy1K11−α2newy2K21
计算E1为:
E1=g(x1)−y1=∑i=3mαiyiKi1+α1oldy1K11+α2oldy2K21+bold−y1
上两式都含有
y1−∑i=3mαiyiKi1,故可以将可以将
b1new用E1表示为:
b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+bold
同理,若
0<α2new<C,则
b2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold
最终的
bnew为:
bnew=2b1new+b2new
得到了
bnew我们需要更新
Ei:
Ei=∑SyjαjK(xi,xj)+bnew−yi
其中,S是所有支持向量
xj的集合。
SMO算法步骤总结
输入m个样本
(x1,y1),(x2,y2),…,(xm,ym),其中x为n维特征向量。y为二元输出,值为1,或者-1。精度为e。
输出是近似解向量
α。
- 首先取初值
α0=0,k=0;
- 按第一个变量的选择方法来选择
α1k,按第二个变量 的选择方法选择
α2k,然后求出新的
α2new,unc:
α2new,unc=α2k+K11+K22−2K12)y2(E1−E2)
- 按照下式求出
α2k+1:
α2k+1=⎩⎨⎧Hα2new,uncLL≤α2new,unc>HL≤α2new,unc≤Hα2new,unc<L
- 利用
α2k+1和
α1k+1的关系求出
α1k+1;
- 计算
bk+1和
Ei;
- 在精度e范围内检查是否满足如下的终止条件:
∑i=1mαiyi=0
0≤αi≤C,i=1,2…m
αik+1=0⇒yig(xi)≥1
0<αik+1<C⇒yig(xi)=1
αik+1=C⇒yig(xi)≤1
- 如果满足则结束,返回
αk+1,否则跳回第二步。