SMO算法求解支持向量机(二)

接上一部分
支持向量机的基本原理(一)
相关内容
用SMO算法求解支持向量机(SVM)pythony源代码(三)

一 SMO求解步骤

目标函数的问题最终变为:在上求下述目标函数的最小值。
这里写图片描述
这里写图片描述
为了求解这些乘子,每次从中任意抽取两个乘子a1和a2,然后固定其它乘子,使得目标函数只是关于a1和a2的函数。这样,不断的从一堆乘子中任意抽取两个求解,不断的迭代求解子问题,最终达到求解原问题的目的。迭代的停止条件是a2基本没有改变或者总的迭代次数达到了迭代次数上限。
为了解决这个子问题,首要问题便是每次如何选取a1和a2。实际上,其中一个乘子是选取违法KKT条件最严重的,另外一个乘子则由另一个约束条件选取。的初始值均为0,因此迭代开始时的第一对乘子是随机选择的。所以,选择乘子a1和a2就是采取启发式搜索方法结合下述约束条件进行。

1 选择ai和aj

这里写图片描述
启发式选择方法主要思想是每次选择拉格朗日乘子的时候,优先选择样本前面系数的ai作优化(论文中称为无界样例),因为在界上(ai为0或C)的样例对应的系数ai一般不会更改。启发式搜索方法是选择第一个拉格朗日乘子用的,比如前面的a2。那么这样选择的话,是否最后会收敛。可幸的是Osuna定理告诉我们只要选择出来的两个ai中有一个违背了KKT条件,那么目标函数在一步迭代后值会减小。违背KKT条件不代表,在界上也有可能会违背。是的,因此循环的算法是:
(i)在给定初始值ai=0后,先对所有样例进行循环,循环中碰到违背KKT条件的(不管界上还是界内)都进行迭代更新。
(ii)第二轮开始就优先针对的样例进行迭代更新,直至此类样例没有ai更新则进入(iii)。
(iii)再次对所有样例进行循环一次后再次进入(ii)
(v)循环(ii)(iii)直至迭代终止(达到最大迭代次数或没有ai得到更新)
最后的收敛条件是在界内{0,c}的样例都能够遵循KKT条件,且其对应的ai只在极小的范围内变动。
此外,更新的同时还要受到第二个约束条件的限制,即sum(ai*yi) = 0。
因此,如果假设选择的两个乘子a1和a2,它们在更新之前分别是、,更新之后分别是、,那么更新前后的值需要满足以下等式才能保证和为0的约束:
这里写图片描述
其中,是常数。
两个因子不好同时求解,所以可先求第二个乘子a2的解(),再用其表示a1的解.

2优化αi和αj:

选择这两个拉格朗日乘子后,我们需要先计算这些参数的约束值。然后再求解这个约束最大化问题。
首先,我们需要给αj找到边界L<=αj<=H,以保证αj满足0<=αj<=C的约束。这意味着αj必须落入这个盒子中。由于只有两个变量(αi, αj),约束可以用二维空间中的图形来表示,如下图:
这里写图片描述
不等式约束使得(αi,αj)在盒子[0, C]x[0, C]内,等式约束使得(αi, αj)在平行于盒子[0, C]x[0, C]的对角线的直线上。因此要求的是目标函数在一条平行于对角线的线段上的最优值。这使得两个变量的最优化问题成为实质的单变量的最优化问题。由图可以得到,αj的上下界可以通过下面的方法得到:
这里写图片描述

我们优化的时候,αj必须要满足上面这个约束。也就是说上面是αj的可行域。然后我们开始寻找αj,使得目标函数最大化。通过推导得到αj的更新公式如下:

这里写图片描述
这里Ek可以看做对第k个样本,SVM的输出与期待输出,也就是样本标签的误差。
这里写图片描述

而η实际上是度量两个样本i和j的相似性的。在计算η的时候,我们需要使用核函数,那么就可以用核函数来取代上面的内积。
得到新的αj后,我们需要保证它处于边界内。换句话说,如果这个优化后的值跑出了边界L和H,我们就需要简单的裁剪,将αj收回这个范围:
这里写图片描述

最后,得到优化的αj后,我们需要用它来计算αi:
这里写图片描述

到这里,αi和αj的优化就完成了。

3计算阈值b:

优化αi和αj后,我们就可以更新阈值b,使得对两个样本i和j都满足KKT条件。如果优化后αi不在边界上,也就是满足αi是{0,C},这时候根据KKT条件,可以得到yigi(xi)=1,这样我们才可以计算b,那下面的阈值b1是有效的,因为当输入xi时它迫使SVM输出yi。

这里写图片描述
同样,如果αi是{0,C},那么下面的b2也是有效的:
这里写图片描述

如果αi是{0,C}和αj是{0,C}都满足,那么b1和b2都有效,而且他们是相等的。如果他们两个都处于边界上(也就是αi=0或者αi=C,同时αj=0或者αj=C),那么在b1和b2之间的阈值都满足KKT条件,一般我们取他们的平均值b=(b1+b2)/2。所以,总的来说对b的更新如下:

这里写图片描述

每做完一次最小优化,必须更新每个数据样本的误差,以便用修正过的分类面对其他数据样本再做检验,在选择第二个配对优化数据样本时用来估计步长。

4 最后一步,获得分类函数

最后迭代完成后,更新所有ai、y和b,就可以得到分类函数:
这里写图片描述

二 核函数Kernel Function

前面讨论的都是线性可分的情况,对于线性不可分的情况就必须采取某种手段使得数据点在另外一个维度(这个维度不一定都能够直观的视觉展示)变为可线性分类的。这种手段就是核函数。
用’机器学习中的算法(2)-支持向量机(SVM)基础‘提到的来说:世界上本来没有两个完全一样的物体,对于所有的两个物体,我们可以通过增加维度来让他们最终有所区别,当维度增加到无限维的时候,一定可以让任意的两个物体可分了。比如说两本书,从(颜色,内容)两个维度来说,可能是一样的,我们可以加上作者这个维度,还不行就加入类型、成书年代、拥有者、购买地点等等,最终必然可以将两本书区分开来。
在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如下图,左边的一堆数据在二维空间无法划分,右边映射到三维空间里则可以划分:
这里写图片描述
核函数能简化映射空间中的内积运算—— SVM 里需要计算的地方数据向量总是以内积的形式出现的。对比刚才我们写出来的式子,现在我们的分类函数为:
=T(k(X, x))*(alpha(叉乘)T(Y) ) +b
其中 a由如下目标函数计算而得:

这里写图片描述
这样一来计算的问题就算解决了,避开了直接在高维空间中进行计算,而结果却是等价的。
实际应用中,根据问题和数据的不同,选择不同的参数核函数中选择。核的选择对于支持向量机至关重要,这是一个不断尝试、优化选择的过程。常用到的核函数有:
1,多项式核,该空间的维度是这里写图片描述,其中 m是原始空间的维度。
2,高斯核这里写图片描述,将原始空间映射为无穷维空间,是使用最广泛的核函数之一。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。通过调控参数,高斯核实际上具有相当高的灵活性,下图所示的例子便是把低维线性不可分的数据通过高斯核函数映射到了高维空间:
这里写图片描述
3,线性核,实际上就是原始空间中的内积。这可以理解为是为了内积计算的统一而“占位”用的。代码实现时不用再区分线性、非线性,对于线性的分类代入该核函数即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值