在支持向量机模型的求解中,我们用到了SMO算法来求解向量α。

那么什么是SMO算法?在讲SMO算法之前。我们须要先了解下面坐标上升法。

1、坐标上升法

如果有优化问题:

W是α向量的函数。利用坐标上升法(当然,求目标函数的最小时即为坐标下降法)求解问题最优的步骤例如以下:



算法的思想为:每次仅仅考虑一个变量进行优化,将其它变量固定。这时整个函数能够看作仅仅关于该变量的函数,能够对其直接求导计算。

然后继续求其它分变量的值,整个内循环下来就得到了α的一组值,若该组值满足条件。即为我们求的值,否则继续迭代计算直至收敛。一个示意图例如以下:



如图为一个二次椭圆曲线的等高线,变量维数为2,初始值在点(2,-2),可见其优化路径为折线式前进,由于算法每次仅仅在一个方向上对函数进行优化。

2、SMO算法

在讲支持向量机求目标函数最优时,通过求解对偶问题转换为求解目标函数对α的极大值,例如以下:

当中C为惩处系数,α为要求的变量,每一个分量α_i 相应一个样本点(x_i,y_i),变量数为样本点容量N。

能够看到优化问题与上面提到的坐标上升法非常类似。參考上面讲到的坐标上升法,我们也能够选择向量α的一个变量,将其它变量固定进行优化。但与上面不同的是。该处优化问题包括了约束条件,

变量必须满足等式约束,所以考虑每次选择两个变量进行优化。

不失一般性,将设选择的两个变量为α_1,α_2,其它变量α_i (i=3,4,…,N)是固定的。

于是优化问题的子问题能够写作:

由于我们选择除α_1。α_2以外的变量固定,故可令

则约束条件改写为:

当中,y为类标签,值为±1,所以α_1 与α_2能够表示为:

为例,目标函数的约束域例如以下:



直线被约束条件0≤α_i≤C约束在了一个C×C的正方形中。

从图中能够看出,最优问题的子问题是求在正方形内的线段上的最优值。

这使得两个变量的最优化问题成为了实质上的单变量的最优化问题,最好还是设为变量α_2的最优化问题,由不等式约束可得α_2的取值范围:



L,H分别为正方形区域内线段的端点值。

引入符号:

表示对输入x_i的预測值和真实输出y_i之差

φ(x)是输入空间到特征空间的映射。

由条件:



将α_1代入最优子问题的目标函数。得到仅仅包括α_2的函数,对α_2求偏导并令其为0 ,可得的值。

new,unc表示求偏导后还没加取值范围[L,H]时的值。称为未剪辑值。

加上取值范围约束进而得到 的值,再而得到

α_2。α_1 的更新值例如以下:

当中,new表示更新后的值,old表示更新前的值。

若α值满足停止条件,则α即为我们求的近似解。

否则又一次扫描选择两个变量继续迭代计算直至满足停止条件。

3、变量的选择

如今的问题就是怎样选择两个变量构造最优子问题。

SMO採用启示式选择方法选择变量。所谓启示式,即每次选择拉格朗日乘子时。优先选择前面样本系数中满足条件0<α_i < C的

α_i作优化,不考虑约束条件中相等的情况是由于在界上的例子相应的系数α_i 一般都不会改变。

通过启示式搜索找到第一个变量。那么第二个应该怎样选取呢?由于要考虑算法的收敛性。第二个变量显然不是随便选的。实际上由Osuna定理,仅仅要选择的两个变量中有一个违背KKT条件。那么目标函数在一步迭代后值就会减小,而且我们希望找到的α_2 在更新后能够有足够大的变化。

由上面 的公式能够看出,其值依赖于,当α_1 确定后E_1也就确定了,因此在给定第一个变量的初始值α_i=0后,对输入例子循环遍历,找出违背KKT条件中使最大的例子点的系数作为α_2。

在特殊情况下,通过以上选择的α_2 不能使目标函数有足够的下降。那么採用下面启示式规则继续选择α_2:

遍历在间隔边界上的支持向量点,依次将其相应的变量作为α_2 试用,直到目标函数有足够的下降。若找不到合适的α_2,那么再遍历训练数据集寻找

若仍未找到。则放弃第一个α_1,又一次选择α_1 。

在α_1,α_2 完毕一次更新后,还须要对阈值b进行更新,b的更新能够通过KKT约束条件:

计算得出。

以上介绍了SMO算法的思路和大概流程。没有对算法的推导及实现上的细节做具体的介绍,大家有兴趣想要深入了解SMO的话。能够看Andrew ng的支持向量机视频和John C.Platt的《Sequential Minimal Optimization A Fast Algorithm for Trainning Support Vector Machines》。

最新文章

  1. node中的cmd规范
  2. SiteFactory简单配制
  3. 字符串连接,数字tostring,写入文件
  4. js 当前日期及时间
  5. 理解 Memory barrier
  6. Sqlserver2012 alwayson部署攻略
  7. java Timer 使用小结
  8. attr绑定
  9. dd命令
  10. 如何添加title左侧的图标
  11. nfc开发
  12. Node笔记一
  13. asp.net 下载视频 保存视屏
  14. Java中static与final
  15. 《HTTP 权威指南》笔记:第十六章&amp;第十七章 国际化、内容协商与转码
  16. 01-jQuery的介绍
  17. Testing - 软件测试知识梳理 - 软件性能测试
  18. Qt5——从零开始的Hello World教程(Qt Creator)
  19. linux平台下server运维问题分析与定位
  20. PCL 可视化

热门文章

  1. Linux主机系统目录误操作权限修改为777修复方法
  2. 一些filter
  3. node.js express 4.x 安装指南(Express不是内部或外部命令解决方案)
  4. 数组洗牌算法-shuffle
  5. js数据类型判断
  6. HDOJ Important Sisters
  7. [bzoj 1782] [Usaco2010 Feb]slowdown慢慢游
  8. 洛谷 P1362 兔子数
  9. JavaScript文本收缩展开 showdetail
  10. 关于URL编码 [转]