上文主要对感知机和SVM进行了简要概括,并对感知机和SVM利用梯度下降算法求解的过程,这篇主要对SVM的对偶形式转化及求解过程进行学习。
理论上对于线性可分的数据,采用梯度下降对SVM进行求解和学习已能满足基本要求,但考虑到非线性数据,以及问题求解的复杂程度等问题,将SVM原始问题转化为其对偶形式能够更好地解决问题,因此转化为对偶形式是必要的,总结下来,转化为对偶形式有以下好处:
下面就简要介绍下SVM的对偶形式的转化过程:
根据上一节中,硬间隔SVM的目标函数(后边会说软间隔):
引入拉格朗日乘子:
分别对w,b进行求导,并令其为0,运算得:
将其代入回拉格朗日乘子目标函数并运算(运算过程略),可得:
对于软间隔SVM而言,其结果与硬间隔一直,差别就在于约束条件不同,下面给出软间隔SVM的对偶形式:
接下来就是对SVM的对偶形式进行求解,只要求得了α*即可同步求得w*和b*,即:
至于如何求解α*后文再进一步详细展开,在求解α*之前先对支持向量进行解释,首先描述支持向量,假设支持向量集合用SV表示,那么:
由于在软间隔对偶形式中已对αi进行了αi≤C限制,因此这里统一为:统一为对任意xi∈SV<=>αi>0。
这里进一步说明一下,按照KKT条件,根据αi、ξi是如何确定分离边界和分离超平面之间的位置关系呢?具体而言:
接下来就是求解α*的问题,目前有很多较为成熟的算法,而其中最著名的算法为SMO算法,其主要思想是在循环中选取两个变量,其余视为定值,不断构建二次规划问题,对二次函数优化问题进行求解。具体而言:
上述即为SMO算法的简要步骤,上面提到了KKT条件,样本点xi对应的KKT条件为:
所谓违反KKT条件最严重的样本点,这里介绍一种较为快捷有效的方法:
上述就是SMO算法的大致步骤,仅说明了参数选取的规则和方法,具体优化求解和迭代到后文中引入核函数后,一并进行解释。
当数据在低维空间线性不可分时,我们希望将其映射到高维空间变成线性可分的,因此,需要寻找一个映射φ将数据从低维空间映射到高维空间。Cover定理证明了当空间维数越大时,数据线性可分的概率越大。然而在应用过程中寻找一个映射将数据从低维到高维空间变得线性可分的难度高于问题本身,核技巧恰巧为解决这样的问题提供了便利。
核技巧不同于核方法,核技巧更注重应用,核技巧并不注重去寻找这样一个映射,而是将这个映射的过程再次进行转化,使得映射函数φ变得不再显式表示,从而使问题变得简单。简单来说,核技巧就是利用核函数来替代式中出现的内积(xi·xj),核技巧的基本思想如下:
注:任意一个损失函数加上一个单调递增的正则化项的优化问题都能利用核技巧(2002 年由 Scholkopf和Smola 证明的定理)
那么如何寻找核函数呢?Mecer定理为核函数的寻找提供了便利,根据其定理可以证明以下函数为核函数:
接下来就是核函数如何进行应用的问题,首先是在感知机中的应用,虽然感知机形式较为简单,此处运用核函数便于后边SVM中核函数的应用。
感知机中只需将内积替换为核函数即可,核感知机的算法步骤:
然后计算核矩阵:
若E为φ,则退出循环,否则选取E中任一个误分类的点对参数进行更新,更新过程为:
其中K•为K的第i行,1表示全为1的向量。
接下来是核SVM的训练过程,该过程也是将对偶形式中的内积形式替换为核函数即可,替换后的目标函数变为:
不妨设α1,α2为选定的两个变量,其余均为固定值,那么上述目标函数变为:
其中const为常数,从而问题转化为 对二次函数求极值的问题。前文已经讲述了SMO算法中如何选取变量的过程,具体训练步骤:
注:α2的求解可以根据上述目标函数求解出来,即将α1用α2表示,然后带回,求解一元二次函数的最大值,结果即为上式(推导过程略)。
至此一次迭代完成,返回至第二步。
其中k满足:
可以证明这样的k必然存在,证明从略。
至此,感知机和支持向量机算法已大致进行了简要介绍。考虑到感知机较为简单,且较少单独用来模型训练,不作实现过程,后面进一步支持向量机算法进行实现,进一步加深对算法的理解,然后找一些数据集,利用sklearn实现SVM算法。