目标函数和约束条件
SMO简介
SMO算法的目标是求出一系列alpha和b,一旦求出了这些alpha和b,就很容易计算出权重向量w并得到分隔超平面。
SMO算法的工作原理是:每次循环中选择两个alpha进行优化处理。一旦找到一对合适的alpha,那么就增大其中一个同时减小另一个。这里所谓的“合适”就是指两个alpha必须要符合一定的条件,条件之一就是这两个alpha必须要在间隔边界之外,而其第二个条件则是这两个alpha还没有进行过区间化处理或者不在边界上。
Platt SMO算法中的外循环确定要优化的最佳alpha对。而简化版却会跳过这一部分,首先在数据集上遍历每一个alpha,然后在剩下的alpha集合中随机选择另一个alpha,从而构建alpha对。这里有一点相当重要,就是我们要同时改变两个alpha。之所以这样做是因为我们有一个约束条件:
∑Ni=1αiyi=0(14) (14) ∑ i = 1 N α i y i = 0
由于改变一个alpha可能会导致该约束条件失效,因此我们总是同时改变两个alpha。
SMO是一个可以快速解决SVM QP问题而不使用矩阵存储空间和数值优化步的简单算法。SMO使用Qsuna的理论分解QP问题以确保收敛。
SMO在每一步选择尽可能小的优化问题。对标准的SVM QP问题,最小的优化问题涉及到两个拉格朗日乘数,因为拉格朗日乘数必须遵循一个线性等式约束。在每一步SMO选择两个乘数一起优化,寻找最优值,更新SVM以体现这些新的最优值。
SMO的优势体现于解那两个乘数的最优值的时候可以直接计算解析解而不是通过数值优化。此外,SMO不需要额外的空间存储矩阵,因此非常大规模的SVM训练问题也可以装进一台普通的个人电脑的内存里。因为没有涉及到矩阵算法,SMO算法不受数值精度问题的影响。
SMO由两部分组成:
1、解那两个拉格朗日乘数的解析解
2、如何选择那两个拉格朗日乘数进行优化的启发式算法
SMO的基本思路
确保自己理解思路,觉得《统计学习方法》里面这段话很重要,于是抄录如下:
SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此优化问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数的值变得更小。重要的是,这时子问题可以通过解析方法求解(注:求导什么的)。这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反kkt条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求原问题的目的。
两个变量的二次规划求解方法
得到alpha _1,alpha _2的递推公式
假设已经选择 α1,α2 α 1 , α 2 ,其他橙子是固定的,于是式(13)可以写成:
对于上述优化问题来说常数因子没有意义,故省略了很多不含 α1,α2 α 1 , α 2 的常数项,如 α3α4y3y4<x3,x4> α 3 α 4 y 3 y 4 < x 3 , x 4 > 。
因为符号太多,想办法做下简化,令
Kij=K(xi,xj)=<xi,xj>(15) (15) K i j = K ( x i , x j ) =< x i , x j >
如上一章所讲,内积只是 xi,xj x i , x j 是数据集线性可分的情况下的计算方式,如果引入其他升维核函数将不是内积,这里用 Kij K i j 来代换是合适的。
(14)写成: