支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有许多最优化算法可以用于这一问题的求解。但是当训练样本容量很大时,这些算法往往变得非常低效,以致无法使用。所以学习一种快速实现算法——序列最小最优化(sequential minimal optimization, SMO)算法,这个算法1988年由Platt提出。
SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件。那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。
注意,子问题的两个变量中只有一个是自由变量,假设a1,a2为两个变量,a3,a4,...,aN固定,那么由等式约束(7.99)可知,如果a2确定,那么a1也随之确定,所以子问题中同时更新两个变量。
整个SMO算法包括两个部分:求解两个变量二次规划的解析方法和选择变量的启发式方法。
1、两个变量二次规划的解析方法
2、变量的选择方法
SMO称选择第1个变量的过程为外层循环。外层循环在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。SMO称选择第2个变量的过程为内层循环。假设在外层循环中已经找到第1个变量α1,现在要在内层循环中找第2个变量α2。第2个变量选择的标准是希望能使α2有足够大的变化。此外,还要计算阈值b和差值Ei。
3、SMO算法
参考:《统计学习方法》李航