支持向量机(下)

上两篇博客分别介绍了线性可分支持向量机,线性支持向量机,那么这篇博客为大家简要介绍非线性支持向量机。

我们知道,对于线性不可分的数据,线性分类器是不可能将其分开的,但我们往往可以利用一条曲线或者是一个曲面将其分开。此时我们就说这是一个非线性可分的问题。对于这类问题,我们该如何解决呢?其实,想法也很简单,我们只需要将低维输入空间中的样本通过非线性映射映射到高维特征空间,样本在高维空间中近似线性可分即可,我们便可以在高维空间中构造线性支持向量机来对样本点进行分类。也许这么说并不是很直观明了,那么我们看下图:

在一维空间上有三个样本点,其中x2为正例,另外两个黄色空心样本点为负例,我们如何能够用一个线性分类器将其分开呢,显然是不行的,那么我们做如下变换,我们按照如下规则对上述样本点进行变换,(x, (x-x2)^2),则样本从一维空间上升到了二维空间,如下图所示:

显然我们很容易找到一条直线将两类样本点分开,这样我们便将原低维空间中的线性不可分问题转换为了高维空间线性可分问题。

所以用线性分类的方法求解非线性问题总共可以分为两步:

  1. 将原输入空间中的特征通过非线性映射映射到新的高维特征空间中
  2. 在新的空间中构造线性分类器

说到这里,我们便引出了核技巧这一概念,上述操作就属于核技巧的基本思想。

所以,核技巧的基本想法就是,使得输入空间对应一个高维特征空间,在输入空间中的超曲面对应于特征空间中的超平面。

为了实现核技巧,我们引出核函数的概念:

实际上核函数代表了在高维空间中向量内积的结果,其降低了高维空间中内积运算的复杂度。

接下来给出核函数的严格定义:

\chi为输入空间,H为特征空间。如果存在一个从输入空间\chi到特征空间H的映射\phi (x):\chi \rightarrow H,使得对所有的x,z\in \chi,函数K(x,z)满足条件K(x,z)=\phi(x)\cdot \phi(z),我们就称K(x,z)为核函数。

通常情况下,我们都是给定核函数K(x,z),而非显示给定非线性映射\phi(x),并且当核函数K(x,z)给定时,映射\phi(x)往往并不唯一。这样在高维空间有时甚至是无穷维空间中的内积运算\phi(x)\cdot \phi(z)往往只需要运用更加简单的计算方式K(x,z)便可以解决。

接下来我们举个例子来说明核函数:

假设输入空间为一个二维空间R^2,而特征空间为H,我们给定一个核函数K(x, z)=(x\cdot z)^2,我们来找符合K(x,z)=\phi(x)\cdot \phi(z)的映射\phi(x)

x=(x^{(1)}, x^{(2)})z=(z^{(1)}, z^{(2)})

由于K(x,z)=(x\cdot z)^2=(x^{(1)}z^{(1)})^2 + 2x^{(1)}z^{(1)}x^{(2)}z^{(2)}+(x^{(2)}z^{(2)})^2

当我们取映射\phi(x)=((x^{(1)})^2,\sqrt{2}x^{(1)}x^{(2)},(x^{(2)})^2)^T时,式子K(x,z)=\phi(x)\cdot \phi(z)是成立的,此时我们就找到了从输入空间到特征空间的一个映射\phi(x)=((x^{(1)})^2,\sqrt{2}x^{(1)}x^{(2)},(x^{(2)})^2)^T

我们还可以取\phi(x)=((x^{(1)})^2,x^{(1)}x^{(2)},x^{(1)}x^{(2)},(x^{(2)})^2)^T也能够使得K(x,z)=\phi(x)\cdot \phi(z)成立,因此,便又找到一个从低维空间到高维空间的映射\phi(x)=((x^{(1)})^2,x^{(1)}x^{(2)},x^{(1)}x^{(2)},(x^{(2)})^2)^T

从上述例子可以看出,K(x, z)=(x\cdot z)^2=(x^{(1)}z^{(1)}+x^{(2)}z^{(2)})^2,这比计算\phi(x)\cdot \phi(z)这样的内积简单多了。

最终,一句话说明核函数就是,核函数就是高维特征空间中向量内积运算结果的一个替代

然而,为什么要构造核函数呢,是因为从线性可分支持向量机和线性支持向量机中我们可以看到,在构造出的分类超平面的方程中有向量内积运算;因此,我们将样本映射到高维特征空间从而达到近似线性可分,在高维特征空间中构造线性支持向量机,这样构造出的高维空间中的分类超平面方程中也有向量内积运算,并且是高维特征空间中的向量内积,而往往这样的内积运算相当复杂,因此,我们便用核函数来代替这一运算,从而达到简化运算的效果。

结合上述对于核函数以及核技巧的说明,下面给出核函数在支持向量机中是如何应用:

第一步:将原输入空间中的样本全部通过非线性映射\phi(x)映射到高维空间,则原输入空间中线性不可分样本集\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\}便成为了高维空间中近似线性可分样本集\{(\phi(x_1), y_1), (\phi(x_2), y_2), ..., (\phi(x_N), y_N)\}

第二步:在高维空间中构造线性支持向量机,构造过程在上篇博客中已经给出介绍,这里我们直接给出结果。构造出的分类超平面方程如下所示:

\sum_{i=1}^{N}\alpha_i^*y_i(\phi(x_i) \cdot \phi(x)) + b^*=0

最终构造出的非线性支持向量机模型为:

f(x)=sign(\sum_{i=1}^{N}\alpha_i^*y_i(\phi(x_i) \cdot \phi(x)) + b^*)

不难发现在分类超平面计算中存在高维空间的内积运算\phi(x_i) \cdot \phi(x),我们使用核函数K(x_i,x)=\phi(x_i)\cdot \phi(x)来进行替代,则分类超平面和支持向量机模型分别如下:

分类超平面:

\sum_{i=1}^{N}\alpha_i^*y_iK(x_i,x) + b^*=0

非线性支持向量机模型:

f(x)=sign(\sum_{i=1}^{N}\alpha_i^*y_iK(x_i,x) + b^*)

最后,再次强调,虽然上述第一步中我们先通过映射\phi(x)将样本点映射到高维空间,然而在实际中我们通常都是直接显式的给出核函数K(x_i,x)的表达式,相当于隐式的给出了非线性映射\phi(x),之后我们直接将核函数表达式带入到非线性支持向量机的结果中替代结果中的内积\phi(x_i)\cdot \phi(x),这便是核技巧。

接下来介绍一下常用的两种核函数:

多项式核函数(polynomial kernel function):

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

其对应的分类决策函数如下所示:

f(x)=sign(\sum_{i=1}^{N}\alpha_i^*y_i(x\cdot x_i+1)^p+ b^*)

高斯核函数(Gaussian kernel function):

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

对应的分类决策函数如下所示:

f(x)=sign(\sum_{i=1}^{N}\alpha_i^*y_iexp(-\frac{\left \| x-x_i \right \|^2}{2\sigma^2})+ b^*)

当我们对高斯核函数进行展开,使用泰勒展开式对其展开后我们会发现,实际高斯核函数K(x,z)=\phi(x)\cdot \phi(z)所对应的映射\phi(x)是一个无穷维的映射,因此在无穷维上做分类超平面就面临着无穷维向量的内积运算,这便是我们所说的维数灾难,同时我们也看到了核函数给我们带来的便利,即将样本点映射到了高维空间达到近似线性可分,同时又简化了高维空间中的内积运算。

以上便是非线性支持向量机的基本原理,至此,支持向量机的基本原理也已经全部介绍完毕了,有什么不足之处还请广大网友不吝赐教,让我们共同进步!

猜你喜欢

转载自blog.csdn.net/yy2050645/article/details/82119574