四、序列最小优化算法 SMO
1. 核函数:
前面我们了解的 SVM 是线性的支持向量机,当我们遇到非线性可分的数据集时并找不到分隔超平面,可以引入核函数,将非线性问题转化为线性问题。核函数是通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数,但是映射到高维空间中,然后再根据内积的公式进行计算时遇到维度爆炸(原始空间是三维时,映射到高维空间维度呈指数增长)导致无法计算,这时核函数能简化映射空间中的内积运算。
如在我们的 SVM 里需要计算的地方数据向量总是以内积的形式出现:
当核函数是高斯核函数:
优化问题加入核函数后变为:
这样一来可避开了直接在高维空间中进行计算。综上在非线性情况下,SVM 首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分割超平面,从而把平面上本身不好分的非线性数据分开。如图所示:
下图所示的例子是低维线性不可分的数据通过高斯核函数映射到了高维空间:
核函数简要概括为以下三点:
2. 序列最小优化算法 SMO
在解前面原始的带约束的优化问题时利用拉格朗日的对偶性,将问题转化为其对偶问题并求得最优解 a*、w* 和 b*。一般优化方法代价成本高,实际采用二次规划的方法进行求解,最为广泛应用的序列最小优化算法 SMO ,能够高效的求解上述带约束的优化问题。它的思想是将一个大的问题划分为一系列小的问题,通过对子问题的求解,达到对对偶问题的求解。
在 SMO 算法中,不断将对偶问题的二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行求解。对于 SMO 算法,每次取两个变量进行更新,假设取两个乘子 和
,然后固定
和
以外的其它乘子
,使得目标函数只是关于
和
的函数。这样,不断的从一堆乘子中任意抽取两个求解,不断的迭代求解子问题,最终达到求解原问题的目的。
此时子问题的优化目标为:
对于新求出的需要满足:
当