面试前抢救一下--核函数与非线性SVM

非线性支持向量机是最能够实用的支持向量机模型。核函数的使用是此模型的一大亮点。但是我在学习的过程中,发现很多网上的教程对有些概念没有强调说明,致使初学者包括当时的我容易混淆概念或者是不理解公式所云。我想一步步给大家展示一下核函数的详细内容。

本节算是支持向量机理论中比较高阶的了。有刚接触的朋友顺便可以看看《初阶的支持向量机》,或者《进阶的支持向量机》。有详细的理论推导。支持向量机是少数的有完备数学证明的机器学习模型之一。

升维处理问题

这个问题我相信大家都很清楚。在我们的数据集不能使用线性分类器完美分类的情况下,我们视不同情况有两种解决办法:第一种是在误分类点在分类超平面附近且数量较少时,我们使用带有软间隔的支持向量机,第二种是数据集误分类点很多,以致于线性分类器无法取得很好的效果的情况下,我们使用提升维度的方法来将线性分类转化成非线性分类。

上图是癌症发病的预测数据集,红色点代表癌症。我们可以看到,在二维平面上无法线性分类的数据,如果将其扩展到三维空间的话,我们也是可以用一个超平面将其分开。支持向量机是只能适用于线性分类模型的,所以这样做就可以使得一般数据集也可以用支持向量机模型。

值得一提的是,在升维过程中,我们一定可以找到一个维度的空间,使我们有限点集可以被超平面分开。这个定理强力支持了非线性支持向量机的可行性。因为只要维度足够多,数据集不会存在依旧不可线性分隔的可能。这如何理解呢?假如我们毫不吝啬,给每一个数据样本都分配一个维度,那么这些数据一定可以被超平面分开。只是可能需要上百万维度的计算量,但至少理论可行。

我们通过一个例子来解释一下升维的作用。

升维的操作过程

在这个图中,我们想要将红色与蓝色分隔开来。线性分类不可行,使用一个椭圆形的分类比较好。类似这样的:

我们设定横坐标为x_1,纵坐标为x_2,那我们可以得到这条分隔线的函数为:

f(x_1,x_2)=a_1x_1+a_2x_2+a_3x_1^2+a_4x_2^2+a_5x_1x_2+a_6

这里的a为系数。那我们现在可以这样做,我们令Z=[x_1,x_2,x_1^2,x_2^2,x_1x_2],并且由Z构建新的坐标系的坐标轴.那我们得到一个五维的映射空间,而原来特征空间只有两维(x_1,x_2)。在这新的五维空间中,我们可以看出这个椭圆形分隔线函数为:

f(z_1,z_2,z_3,z_4,z_5)=a_1z_1+a_2z_2+a_3z_3+a_4z_4+a_5z_5+a_6

这是一个分割超平面的方程,是一个线性方程。那么我们便很容易看出,通过这一次由xz的映射,我们成功使用升维的办法,将非线性分类问题转化成线性分类问题。

效果如图:

不过很多朋友因此就认为核函数的作用就是将数据升维,达到用线性代替非线性的目的。

其实不然。

升维其实是一种解决办法,但是我们很容易发现其致命缺点——维度灾难。导致计算量难以解决。那么有什么办法既能够达到升维的效果,又可以避免升维的计算量呢?

,核函数的思想。

值得注意的是,核函数和核技巧是一个独立的思想,并不是SVM所拥有的一个小部分。只是核函数和核技巧在SVM里面的用法十分有名而已。

具体如何操作,我们还看这个例子。

核函数

我们回到上一节所讲的支持向量机的对偶问题中来,我们知道,带有软间隔的支持向量机的对偶问题写成:

\min_\alpha \frac{1}{2} \sum_{i=1}^N  \sum_{j=1}^N \alpha_i \alpha_j y_i y_j(x_i \cdot x_j)-\sum_{i=1}^N \alpha_i
s.t. \qquad\sum_{i=1}^N \alpha_i y_i=0  \qquad \quad
\qquad \qquad \qquad \qquad 0 \leq \alpha_i \leq C  \quad i=1,2,...,N

我们发现这里面\alpha是待求项,y只是一个正负类标记,只取{-1,+1}.所以我们训练数据的核心步骤就是使用这个x_i \cdot x_j

核函数的作用

我们由上面的例子作为铺垫,对于一般二次多项式情况。我们有一个数据集特征分布在d维空间,X=[x_1,x_2,...,x_d]是其特征维度。那我们可以将其升维到这个空间:

\Phi(x)=[1,x_1,x_2,...,x_d,x_1^2,x_1x_2,...,x_1x_d,x_2x_1,x_2^2,...,x_2x_d,...,x_d^2]

那么这时候对于对偶问题,我们就要转换到高维空间去计算了,所以我们有这个:

\min_\alpha \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j[(\Phi(x_i)\cdot \Phi(x_j)]-\sum_{i=1}^N \alpha_i

如果我们按照正常思路来解决的话,首先得求出\Phi(x_i) \cdot \Phi(x_j)

\Phi(x_i) \cdot \Phi(x_j)=1+\sum_{i=1}^d \sum_{j=1}^dx_ix_j+\sum_{i=1}^d\sum_{i=1}^d x_i x_j x_i^\prime x_j^\prime

这里的计算量是o(d^2)。在d很大的情况下,耗费还是很可观的。我们接下来论证核函数的威力:

我们需要注意的是,这里的x_ix_j和之前的x_i \cdot x_j不一样,我们有

x_i \cdot x_j = \sum_{i=1}^d \sum_{j=1}^dx_ix_j

可能有些朋友对那个一撇x^\prime不太理解,其实很容易,\Phi(x)自己对自己的内积,自行算一下便懂了。

我们转换一下:

\Phi(x_i) \cdot \Phi(x_j)=1+ \sum_{i=1}^d \sum_{j=1}^dx_ix_j+\sum_{i=1}^d\sum_{i=1}^d x_i x_j \sum_{i=1}^d\sum_{i=1}^dx_i^\prime x_j^\prime

那我们便可知:

\Phi(x_i) \cdot \Phi(x_j)=1+ x_i \cdot x_j + (x_i \cdot x_j)^2

这让我们可以得知,\Phi(x_i) \cdot \Phi(x_j)的计算可以由x_i \cdot x_j计算出。而x_i \cdot x_j的计算复杂度为o(d)核函数的作用是大幅度减少计算量,原理就在这一地方。接下来介绍核函数的形式。

核函数与核技巧的定义

我们将\kappa(x_i,x_j)=\Phi(x_i) \cdot \Phi(x_j)定义成核函数,并且定义\Phi(x)为映射函数。

核技巧的思想是:在学习和预测中只使用\kappa(x_i,x_j),而并不使用或者显式计算\Phi(x)。这也是我们为什么要打包\Phi(x_i) \cdot\Phi(x_j)成为一个函数的原因。因为我们只在使用这个\Phi(x_i) \cdot\Phi(x_j)的时候才可以体会到核技巧的便捷。

当然核技巧是一直要用下去的,否则的话贡献太小了。所以我们接着计算得出:

b^*=y_j -\sum_{i=1}^Ny_i\alpha_i^*(\Phi(x_i) \cdot \Phi(x_j) )=y_j -\sum_{i=1}^Ny_i\alpha_i^*(\kappa(x_i,x_j))

分类决策函数为:

f(x)=sign \left(   \sum_{i=1}^{N_s} \alpha_i^*y_i \Phi(x_i) \cdot \Phi(x_j)+b^*    \right )=sign  \left(   \sum_{i=1}^{N_s} \alpha_i^*y_i \kappa(x_i,x_j)+b^*    \right )

非线性支持向量机学习算法

输入:训练数据集T=[(x_1,y_1),(x_2,y_2),...,(x_N,y_N)],其中,x \in \chi=R^n,y_i \in \lbrace-1,+1 \rbrace \qquad i=1,2,...,N

输出:分类决策函数。

  1. 选取适当的核函数\kappa(x_i,x_j)和适当的参数C,构造并求解最优化问题:
\min_\alpha \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j\kappa(x_i,x_j)- \sum_{i=1}^N \alpha_i
s.t. \qquad\sum_{i=1}^N \alpha_i y_i=0  \qquad \quad
\qquad \qquad \qquad \qquad 0 \leq \alpha_i \leq C  \quad i=1,2,...,N

求得最优解\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)^T

  1. 选择\alpha^*的一个分量\alpha_j^*适合条件0<\alpha_j^*<C,计算:
b^*=y_j - \sum_{i=1}^Ny_i\alpha_i^*(\kappa(x_i,x_j))

构造分离决策函数:

f(x)=sign  \left(  \sum_{i=1}^{N_s} \alpha_i^*y_i \kappa(x_i,x_j)+b^*    \right )

正定核

上面算法很漂亮的解释了非线性支持向量机学习的全过程,可是有一点大家可能想到了。这个核函数是自己选的?不是数据本身性质决定的?那我们要怎么选这个核函数呢?

答案还真是自己选的。我们根据自己选用的核函数,来决定将原数据映射到什么样的空间。

我们的\kappa(x_i,x_j)是由映射函数内积而成:\Phi(x) \cdot \Phi(x),因此他是一个对称函数。反过来说,我们对于一个函数\kappa(x_i,x_j),如果其Gram矩阵是半正定的,那么一定可以找到一个与之对应的映射\PhiGram矩阵如下所示:

Gram \quad K= \begin{bmatrix}  \kappa(x_1,x_1) & ... & \kappa(x_1,x_j) & ... & \kappa(x_1,x_m) \\  \cdot & ... & \cdot & ... & \cdot \\  \kappa(x_i,x_1) & ... & \kappa(x_i,x_j) & ... & \kappa(x_i,x_m) \\  \cdot & ... & \cdot & ... & \cdot \\  \kappa(x_m,x_1) & ... & \kappa(x_m,x_j) & ... & \kappa(x_m,x_m) \\  \end{bmatrix}

我们有如下定理:*\chi为输入空间,\kappa(\cdot , \cdot)为定义在\chi \times \chi上的对称函数,则: \kappa可以作为核函数\LongleftrightarrowK为半正定

看起来过程很完美,但是让我们自己"造"一个核函数也是相当困难的,我们要论证Gram矩阵的半正定性,计算过程很复杂。所以我们一般有这么几个成熟的核函数可以调用。够我们解决不同场景的问题了。

几种常用核函数

\begin{array}{c|lcr} 名称 & \text{表达式} & \text{参数}  \\ \hline 线性核 & \kappa(x_i,x_j)=x_i^Tx_j & 无  \\ 多项式核 & \kappa(x_i,x_j)=(x_i^Tx_j)^d &  d \geq1为多项式次数 \\ 高斯核 & \kappa(x_i,x_j)=exp(-\frac{||x_i-x_j||^2}{2\sigma^2}) & \sigma >0为高斯核带宽 \\ 拉普拉斯核 & \kappa(x_i,x_j)=exp(-\frac{||x_i-x_j||^2}{\sigma}) & \sigma>0  \\ Sigmoid 核 & \kappa(x_i,x_j)=tanh(\beta x_i^Tx_j+\theta)  \qquad &tanh为双曲正切函数,\beta >0,\theta<0 \\ \end{array}

我们还可以组合这些核函数。

  • \kappa_1\kappa_2为核函数,则对于任意正数\gamma_1,\gamma_2,线性组合\gamma_1\kappa_1+\gamma_2\kappa_2也是核函数。
  • \kappa_1\kappa_2为核函数,则函数的直积\kappa_1 \bigotimes \kappa_2=\kappa_1\kappa_2也是核函数:
  • \kappa_1为核函数,则对于任意函数g(x),\kappa(x_1,x_2)=g(x)\kappa_1(x_1,x_2)g(x_2)也是核函数

当然,我们确定好核函数之后,便有了分类决策函数:

f(x)=sign  \left(  \sum_{i=1}^{N_s} \alpha_i^*y_i \kappa(x_i,x_j)+b^*    \right )

对于核函数如何选择的问题,吴恩达教授是这么说的:

  1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
  2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
  3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况

参考文献

[1]核函数|数据挖掘十大算法详解

[2]国立台湾大学couresera课程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值