【机器学习】支持向量机原理(三)线性不可分支持向量机与核函数

  在前面两篇我们讲到了线性可分SVM的硬间隔最大化和软间隔最大化的算法,它们对线性可分的数据有很好的处理,但是对完全线性不可分的数据没有办法。本文我们就来探讨SVM如何处理线性不可分的数据,重点讲述核函数在SVM中处理线性不可分数据的作用。


1.核函数的引入

  线性不可分的低维特征数据,我们可以将其映射到高维,就能线性可分。如下图,二维的低维特征数据是线性不可分的,但是通过核函数kernel映射到三维空间,就找到了分割超平面Dicision surface实现线性可分。当然实际上一般需要映射到维度比三维空间高得多的空间。
  【机器学习】支持向量机原理(三)线性不可分支持向量机与核函数
  
  为了将核函数应用到SVM算法上,我们首先回顾线性可分SVM的优化目标函数:

(1)minα12i=1,j=1mαiαjyiyjxixji=1mαis.t.i=1mαiyi=00αiC

  注意到上式低维特征仅仅以内积 xixj的形式出现,如果我们定义一个低维特征空间到高维特征空间的映射 ϕ,将所有特征映射到一个更高的维度,让数据线性可分,我们就可以继续按前两篇的方法来优化目标函数,求出分离超平面和分类决策函数了。也就是说现在的SVM的优化目标函数变成:
(2)minα12i=1,j=1mαiαjyiyjϕ(xi)ϕ(xj)i=1mαis.t.i=1mαiyi=00αiC

  可以看到,和线性可分SVM的优化目标函数的区别仅仅是将内积 xixj 替换为 ϕ(xi)ϕ(xj)
  
  看起来似乎这样我们就已经完美解决了线性不可分SVM的问题了,但是事实是不是这样呢?我们看看,假如是一个2维特征的数据,我们可以将其映射到5维来做特征的内积,如果原始空间是三维,可以映射到到19维空间,似乎还可以处理。但是如果我们的低维特征是100个维度,1000个维度呢?那么我们要将其映射到超级高的维度来计算特征的内积。这时候映射成的高维维度是爆炸性增长的,这个计算量实在是太大了,而且如果遇到无穷维的情况,就根本无从计算了。
  
  因此这时候需要用到核函数,核函数的定义如下:
  
  假设 ϕ是一个从低维的输入空间 χ(欧式空间的子集或者离散集合)到高维的希尔伯特空间H的映射。那么如果存在函数K(x,z),对于任意 x,zχ,都有:
K(x,z)=ϕ(x)ϕ(z)

  那么我们就称 K(x,z)为核函数。

  从上面的式子乍一看还是不明白核函数怎么帮我们解决线性不可分的问题的。仔细观察上式可以发现,K(x,z)的计算是在低维特征空间来计算的,它避免了在刚才我们提到了在高维维度空间计算内积的恐怖计算量。也就是说,我们可以好好享受在高维特征空间线性可分的红利,却避免了高维特征空间恐怖的内积计算量。
  
  至此,我们总结下线性不可分时核函数的引入过程:
  
  我们遇到线性不可分的样例时,常用做法是把样例特征映射到高维空间中去(如上一节的多项式回归)但是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到令人恐怖的。此时,核函数就体现出它的价值了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题。


2.常用的核函数

2.1 线性核函数

  线性核函数(Linear Kernel)其实就是我们前两篇的线性可分SVM,表达式为:

(3)K(x,z)=xz

  也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。

2.2 多项式核函数

  多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:

(4)K(x,z)=(γxz+r)d

  其中, γ,r,d 都需要自己调参定义。

2.3 高斯核函数

  高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。表达式为:

(5)K(x,z)=exp(γ||xz||2)
  
  其中, γ 大于0,需要自己调参定义。

2.4 Sigmoid核函数

  Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为:

(6)K(x,z)=tanh(γxz+r)
   
  其中, γ,r 都需要自己调参定义。


3.分类SVM的算法小结

  引入了核函数后,我们的SVM算法才算是比较完整了。现在我们对分类SVM的算法过程做一个总结。不再区别是否线性可分。
  
  输入是m个样本 (x1,y1),(x2,y2),...,(xm,ym),其中x为n维特征向量。y为二元输出,值为1,或者-1.
  
  输出是分离超平面的参数 w b和分类决策函数。
  
  算法过程如下:
  
  1)选择适当的核函数 K(x,z)和一个惩罚系数 C>0, 构造约束优化问题

(7)minα12i=1,j=1mαiαjyiyjϕ(xi)ϕ(xj)i=1mαis.t.i=1mαiyi=00αiC

  可以看到,和线性可分SVM的优化目标函数的区别仅仅是将内积 xixj 替换为 ϕ(xi)ϕ(xj)
  
  2)用SMO算法求出上式最小时对应的 α向量的值 α向量.
  
  3) 得到 w=i=1mαiyiϕ(xi),此处可以不直接显式的计算 w
  
  4) 找出所有的 S个支持向量,即满足 0<αs<C对应的样本 (xs,ys),通过 ys(i=1mαiyiK(xi,xs)+b)=1,计算出每个支持向量 (xs,ys)对应的 b,计算出这些 bs=ysi=1mαiyiK(xi,xs). 所有的 bs对应的平均值即为最终的 b=1Si=1Sbs

  这样最终的分类超平面为: i=1maiyiK(x,xi)+b=0,最终的分类决策函数为: f(x)=sign(i=1maiyiK(x,xi)+b

  至此,我们的分类SVM算是总结完毕,唯一的漏网之鱼是SMO算法,这个算法关系到我们如何求出优化函数极小化时候的 α,进而求出 w,b,我们将在下一篇讨论这个问题。


参考资料 

1.邹博视频
2.刘建平__支持向量机原理(三)线性不可分支持向量机与核函数