支持向量机学习笔记(三):非线性支持向量机与SMO算法

非线性问题

在之前学了线性支持向量机,通过训练集学习到分离超平面wx+b=0wx+b=0,但是有时候分类问题不是线性的,也就是我们不能直接得到分离超平面。看下面两个图:

支持向量机学习笔记(三):非线性支持向量机与SMO算法

左边的图,只能使用一个椭圆(曲面)来对正例(黑点表示的实例)和负例(x表示的实例)来进行划分,而无法使用超平面wx+b=0wx+b=0来进行划分。对于这样的非线性问题,显然线性支持向量机无法求解,但是可以将左边图中的实例,按照某种映射关系映射到右图中,此时就可以使用线性支持向量机了。也就是说使用线性分类方法去解决非线性问题可以使用下面两个步骤:

  1. 使用一个函数,将原空间中的数据变映射到新空间(上图中左图中实例映射到右图);
  2. 在新空间里用线性分类学习方法学习到分类模型(这里就是使用线性支持向量机学习到超平面wx+b=0wx+b=0)。

核技法用到支持向量机中的思想:使用一个非线性变换将输入空间映射到特征空间,从而使得输入空间的超曲面对应于特征空间的超平面。

说到这就正式给出核函数的定义:

核函数:
χ\chi为输入空间,HH为特征空间,如果存在一个 χ\chiHH的映射

ϕ(x):χ>H\phi(x):\chi->H

使得对于所有的输入 x,zχx,z\in\chi满足条件

K(x,z)=ϕ(x)ϕ(z)K(x,z)=\phi(x)\cdot\phi(z)

则称K(x,z)K(x,z)为核函数,ϕ(x)\phi(x)为映射空间,ϕ(x)ϕ(z)\phi(x)\cdot\phi(z)表示两者的内积。

核技法在SVM中的使用

现在将核技法使用到非线性分类问题中,非线性支持向量机模型(凸二次规划对偶模型)如下:

maxα,β12i=1Nj=1Nαiαjyiyj<xi,xj>+i=1Nαi\max\limits_{\alpha,\beta}-\frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_j<x_i,x_j>+\sum\limits_{i=1}^{N}\alpha_i

s.t.i=1Nαiyi=0(5)s.t.\qquad \sum\limits_{i=1}^{N}\alpha_iy_i=0\qquad (5)

0αiC\qquad \qquad0\leq\alpha_i\leq C

求得的分离超平面如下:

i=1Nαiyi<x,xi>+b=0\sum\limits_{i=1}^{N}\alpha^*_iy_i<x,x_i>+b^*=0

其中<xi,xj><x_i,x_j>表示两个向量的内积。
不管是对偶模型还是求得的结果都是输入向量的内积,将其替换成核函数得到目标函数与分离超平面,得到:

maxα,β12i=1Nj=1NαiαjyiyjK(xi,xj)+i=1Nαi\max\limits_{\alpha,\beta}-\frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i,x_j)+\sum\limits_{i=1}^{N}\alpha_i

i=1NαiyiK(xi,xj)+b=0\sum\limits_{i=1}^{N}\alpha^*_iy_iK(x_i,x_j)+b^*=0

其中K(xi,xj)=ϕ(xi)ϕ(xj)K(x_i,x_j)=\phi(x_i)\cdot\phi(x_j)也就是说,将输入空间中的向量xix_i映射成特征空间的ϕ(xi)\phi(x_i)(将输入空间向量内积转换成特征空间向量内积)转换就得到上面的右图中的点了,此时就可以使用线性支持向量机得到分离超平面,而关于核函数的选取得看具体的情况,后面会介绍常用的核函数。

正定核

上面介绍了核函数K(x,z)K(x,z),而正定核也就是核函数。那么K(x,z)K(x,z)满足什么条件才能作为正定核呢,下面不加证明的给出正定核的充要条件。

K:χ×χ>RK:\chi ×\chi->R是对称函数(K(x,z)χK(x,z)中两个变量都属于同样的输入空间\chi),那么K(x,z)K(x,z) 是正定核的充要条件是,对于任意的 xiχ,i=1,2,...,nx_i\in \chi,i=1,2,...,n,K(x,z)K(x,z)对应的矩阵:

K=[K(xi,xj)]n×nK=[K(x_i,x_j)]_{n\times n}

是半正定矩阵。

常用核函数

1、多项式核函数

K(x,z)=(xz+1)pK(x,z)=(x\cdot z+1)^p

对应的支持向量机为p次多项式分类器,此时,分类超平面为:
i=1Nαiyi(xix+1)p+b=0\sum\limits_{i=1}^{N}\alpha^*_iy_i(x_i\cdot x+1)^p+b^*=0

2、高斯核函数

K(x,z)=exp(xz22σ2)K(x,z)=exp(-\frac{||x-z||^2}{2\sigma^2})

对应的支持向量机为高斯径向基函数分类器,此时,分类超平面为:
i=1Nαiyiexp(xix22σ2)+b=0\sum\limits_{i=1}^{N}\alpha^*_iy_iexp(-\frac{||x_i-x||^2}{2\sigma^2})+b^*=0

序列最小最优化算法

到这里,线性可分支持向量机,线性支持向量机,非线性支持向量机已经学完了。关于如何求解各自的对偶问题还没有给出,每次都是假设α=(α1,α2,...,αN)T\alpha=(\alpha_1,\alpha_2,...,\alpha_N)^T 已经求出,那么到底怎么求则是下面要介绍的序列最小最优化算法 (SMO)。

介绍SMO算法之前先介绍坐标上升法:

假设要求解无约束条件的函数参数如下:

argmaxαW(α1,α2,...,αm)arg\max \limits_{\alpha}W(\alpha_1,\alpha_2,...,\alpha_m)

坐标上升法的思路是,选取某一个αi\alpha_i,对其他的α\alpha进行固定,修改αi\alpha_i的值,使函数WW的值达到最大,此时选取下一个α\alpha的值,而对其他的所有α\alpha值进行固定,如此循环下去直到收敛,写成伪代码如下:

{循环直到收敛:\{
fori=1>m{\qquad for\qquad i=1->m\{
αi=argmaxαW(α1,α2,...,α,αi,...,αm)\qquad \qquad \alpha_i=arg\max \limits_{\alpha}W(\alpha_1,\alpha_2,...,\overline{\alpha},\alpha_i,...,\alpha_m)
}\qquad \}
}\}

SMO算法和左边上升法是很类似的,将其用在解SVM中对偶模型中是这样做的,由于存在约束条件i=1Nαiyi=0\sum\limits_{i=1}^{N}\alpha_iy_i=0,所以每次选两个变量αi,αj\alpha_i,\alpha_j,使得两个变量变化幅度一样(一个增加多少另一个就减少多少)从而使得满足约束条件。下面给出较具体的介绍:

方便起见,假设选的两个参数是α1,α2\alpha_1,\alpha_2,而其他变量 α3,α3,...,αN\alpha_3,\alpha_3,...,\alpha_N进行固定,也就是说只要不含α1,α2\alpha_1,\alpha_2的项都看做常数了。

对于约束条件i=1Nαiyi=0\sum\limits_{i=1}^{N}\alpha_iy_i=0,转换一下得到α1y1+α2y2=i=3Nαiyi\alpha_1y_1+\alpha_2y_2=-\sum\limits_{i=3}^{N}\alpha_iy_i,将i=3Nαiyi\sum\limits_{i=3}^{N}\alpha_iy_i看做常数ζ\zeta,那么就有α1y1+α2y2=ζ\alpha_1y_1+\alpha_2y_2=\zeta,画在坐标系中得到下面的图

支持向量机学习笔记(三):非线性支持向量机与SMO算法

α1y1+α2y2=ζ\alpha_1y_1+\alpha_2y_2=\zeta
=>α1=ζα2y2y1=>\alpha_1=\frac{\zeta-\alpha_2y_2}{y_1}

α2\alpha_2来表示α1\alpha_1,这样的话就只有一个变量α2\alpha_2了。
对偶问题的目标函数为:
maxα,β12i=1Nj=1NαiαjyiyjK(xi,xj)+i=1Nαi\max\limits_{\alpha,\beta}-\frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i,x_j)+\sum\limits_{i=1}^{N}\alpha_i

W(α1,α2,...,αN)=12i=1Nj=1NαiαjyiyjK(xi,xj)+i=1NαiW(\alpha_1,\alpha_2,...,\alpha_N)=-\frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i,x_j)+\sum\limits_{i=1}^{N}\alpha_i

α3,...,αN\alpha_3,...,\alpha_N固定,而α1\alpha_1α2\alpha_2来表示,带入到W(α1,α2,...,αN)W(\alpha_1,\alpha_2,...,\alpha_N),那么得到的肯定就是一个关于α2\alpha_2的一元二次函数W(α2)=aα22+bα2+cW(\alpha_2)=a\alpha_2^2+b\alpha_2+c(具体的可以自行计算),那么现在要做的就是求出W(α2)W(\alpha_2)最大值所对应的α2\alpha_2了,如果不考虑约束条件那么结果就是W(α2)W(\alpha_2)对应的抛物线的顶点了,但是,这个函数是受到了约束条件约束的,也就是上面两个图,假如就是左图,那么需要将这条抛物线和上面的左图画在一起,如下:

支持向量机学习笔记(三):非线性支持向量机与SMO算法

显然,1和3的情况是不满足约束条件的,因为最优值的α2\alpha_2的值一个是小于了α2\alpha_2的最小值,另一个是大于了α2\alpha_2的最大值,需要取在α2\alpha_2范围内W(α2)W(\alpha_2)是最优值。具体的就直接摘抄《统计学习方法》了,具体的细节会作解释。

支持向量机学习笔记(三):非线性支持向量机与SMO算法
剪辑指的是考虑约束条件(α2\alpha_2取值范围)的情况。

为了理解方便就按照上面的两个图来解释:
对于y1y2y_1\neq y_2时候的边界问题:
(1)、当直线位于右下角的时候,下界L=α2oldα1oldL=\alpha_2^{old}-\alpha_1^{old}α2old\alpha_2^{old}是直线与下方的横纵的交点,而α1old=0\alpha_1^{old}=0;而上界H=CH=C
(2)、当直线位于左上角的时候,下界L=0L=0,而上界H=C+α2oldα1oldH=C+\alpha_2^{old}-\alpha_1^{old},注意α2oldα1old<0\alpha_2^{old}-\alpha_1^{old}<0,往左下方延长该执行,得到与下方横纵交点的值。

关于y1=y2y_1=y_2也分为左下方和右上方来讨论,具体的就详述了。

最后计算总结如下:

支持向量机学习笔记(三):非线性支持向量机与SMO算法