机器学习之支持向量机SVM Support Vector Machine (四) SMO算法

一、基本思想

        序列最小最优化算法(Sequential Minimal Optimization, SMO)。优化目标函数:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        解需要满足的KKT对偶互补条件为:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        SMO算法是一种启发式算法,它每次只优化两个变量,将其他变量视为常数。其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了,因为KKT条件是该最优化问题的充分必要条件;否则选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那个,另一个由约束条件自动确定。如此SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

二、目标函数的优化

        假设选择的变量是机器学习之支持向量机SVM Support Vector Machine (四) SMO算法,其他变量固定。定义机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        优化目标函数变为:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        为了求解上述目标优化问题,首先分析约束条件,然后在约束条件下求最小。
        根据约束条件,机器学习之支持向量机SVM Support Vector Machine (四) SMO算法均只能取值1或-1,这样机器学习之支持向量机SVM Support Vector Machine (四) SMO算法的盒子内,且二者的关系直线斜率只能为1或-1,这样它们的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上是一个变量的优化问题,不妨考虑为变量a2的最优化问题。
 机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        假设上一轮迭代得到的解是机器学习之支持向量机SVM Support Vector Machine (四) SMO算法,本轮迭代完成后的解是机器学习之支持向量机SVM Support Vector Machine (四) SMO算法,假设沿着约束方向a2未经剪辑的解是机器学习之支持向量机SVM Support Vector Machine (四) SMO算法。由于机器学习之支持向量机SVM Support Vector Machine (四) SMO算法必须满足上图中的线段约束,假设L和H分别是图中机器学习之支持向量机SVM Support Vector Machine (四) SMO算法所在线段的边界。显然有:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        如果是上面左图中的情况,L和H的限制是
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        如果是上面右图中的情况,有
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        假如通过将目标函数对a2求导得到机器学习之支持向量机SVM Support Vector Machine (四) SMO算法,则最终的机器学习之支持向量机SVM Support Vector Machine (四) SMO算法应该为:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        令
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        Ei为函数g(x)对输入xi的预测值与真实输出yi之差。
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        目标函数可以写为
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        由于机器学习之支持向量机SVM Support Vector Machine (四) SMO算法,可以得到
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        代入目标函数,得到关于a2的目标函数:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        对a2求偏导数,令其为0,得到
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法

三、两个变量的选择

        SMO算法需要选择两个变量迭代,其中至少一个变量是违反KKT条件的,其余变量做常量进行优化。

3.1 第一个变量的选择

        SMO算法称选择第一个变量的过程为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点,对于每个样本点,要满足的KKT条件如下:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        其中
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        该检验是在ε范围内进行的,在检验过程中,外层循环首先遍历所有满足条件0<ai<C的样本点,即在间隔边界上的支持向量点,检验它们是否满足KKT条件。如果这些样本点都满足KKT条件,再遍历整个训练集,检验其它点是否满足条件。

3.2 第二个变量的选择

        SMO称选择第二个变量的过程为内层循环,假设在外层循环中已经找到第一个变量a1,第二个变量选择的标准是希望能使a2有足够大的变化。机器学习之支持向量机SVM Support Vector Machine (四) SMO算法是依赖于机器学习之支持向量机SVM Support Vector Machine (四) SMO算法的,由于a1确定后,E1也确定了,所以要使机器学习之支持向量机SVM Support Vector Machine (四) SMO算法最大,只需在E1为正时,选择最小的Ei作为E2,在E1为负时,选择最大的Ei作为E2。为了节省计算时间,将所有Ei值保存在一个列表中。
        在特殊情况下,如果内层循环通过以上方法选择的a2不能使目标函数有足够的下降,那么遍历在间隔边界上的支持向量点,将其对应的变量作为a2试用,直到目标函数有足够的下降;若找不到,遍历训练数据集;若仍找不到合适的a2,则放弃第一个a1,再通过外层循环寻求另外的a1。

3.3 计算阈值b和差值Ei

        在每次完成两个变量的优化后,都需要重新计算阈值b,当机器学习之支持向量机SVM Support Vector Machine (四) SMO算法时,由KKT条件可知:
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        于是
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        由于
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        可得
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
        同样如果机器学习之支持向量机SVM Support Vector Machine (四) SMO算法,那么
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法
机器学习之支持向量机SVM Support Vector Machine (四) SMO算法

四、SMO算法

机器学习之支持向量机SVM Support Vector Machine (四) SMO算法

机器学习之支持向量机SVM Support Vector Machine (四) SMO算法

五、SVM算法小结

        SVM算法是一个很优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能前,SVM基本占据了分类模型的统治地位。目前则是在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,但是仍然是一个常用的机器学习算法。
        SVM算法的主要优点有:
1) 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
3) 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。
4) 样本量不是海量数据的时候,分类准确率高,泛化能力强。
        SVM算法的主要缺点有:
1) 如果特征维度远远大于样本数,则SVM表现一般。
2) SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
3)非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
4)SVM对缺失数据敏感。