引言
在上一小节中,我们介绍了SVM的对偶形式,该形式也可以使用二次规划的方式来求解。
这个对偶形式告诉我们SVM背后的一些集合意义,再者,有了这个对偶问题,我们要求解的难度和转换的高维空间的维度好像没有关系。
在这一小节中,我们就之前未解决的问题继续探讨,使用核技巧的方式高效求解SVM。
核技巧(Kernel Trick)
在上一小节二次规划问题中的Q矩阵的求解中,我们要计算Z空间的两个向量的内积,这个计算可以看做是先将向量x进行空间转换得到高维向量z,然后再做内积。但是,如果我们可以将这两步合起来,使得计算的更快一点。
下面,我们以二次转换作为例子:


这样的转换和内积的计算复杂度从一步一步计算的O(d^2)变成了O(d)。
这样,我们就可以使用核函数来作内积的计算,用下面的几个式子代替原来的形式:



下面归纳出使用核函数来作SVM问题的算法步骤:

多项式核

从上面的图片可以看出,这些都是使用了二次多项式核函数,但是其中的系数有所不同。
我们要明白一点,它们对应到同一个空间,它们做事情的能力是一样的,但是不同的系数导致了不同的内积。不同的内积就定义了不同的距离,而不同的距离就有不同的几何特性,那么计算得到的边界就会有不同。
从上图中,我们发现相近的核函数改变其系数,其几何定义就不同了,那么边界的定义就会不同,支持向量的数量也不一样了。
由此,我们得到了更广义的多项式核函数的形式:

高斯核
下面我们有个更加疯狂的想法,就是可不可以通过核函数来实现无限维的转换?
我们假设x向量只有一个维度,我们使用高斯函数来计算x和x'的差,下面的推导说明这个转换是无限维的。
这里,我们用到了exp函数的泰勒展开。

下面是高斯核函数的定义:


我们看到高斯核SVM相当于以支持向量为中心的高斯函数的线性组合。
高斯核函数也被称作是径向基核函数(Radial Basis Function Kernel)。Radial表示像高斯一样,从某个中心放射出去的函数;Basis Function表示拿来做线性组合的。
虽然高斯核有强大的能力,但是依然存在潜在的问题,高斯核不同的参数会导致不同结果。当参数γ太大的时候,会造成高斯变尖(sharp Gaussians),造成过拟合的情况。

支持向量和核技巧的机制
现在我们可以做到超平面+特征转换(用核方法有效快速计算)+最大间隔(控制模型的复杂度)。
这里我们做到了,不再使用变换Φ显式的计算高维向量,而是使用Kernel;还有,不再存Z空间中的w,而是存表示这个w的支持向量和这个线性组合的系数αn。

不同核函数的比较
线性核:
优点:
线性优先考虑,安全不易过拟合
使用特定二次规划方法快速求解
直观
缺点:
在线性不可分的情况下使用受限
多项式核:
优点:
比线性核限制少
通过设定Q来控制模型
缺点:
Q很大的时候,数值计算复杂
参数比较多,选择起来比较麻烦
高斯核:
优点:
能力强大,可以求解更加复杂的边界
数值变化范围小
只有一个参数,比较好选择
缺点:
无限多维,缺乏物理意义,从来不计算出w
比线性的计算慢
会出现过拟合情况
Mercer's Condition
核函数需要满足一定条件:将数据写成核矩阵的情况,核矩阵首先是对称的(因为内积运算是对称可交换的),其次这个矩阵要求是半正定的。

转载请注明作者Jason Ding及其出处
GitCafe博客主页(http://jasonding1354.gitcafe.io/)
Github博客主页(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
百度搜索jasonding1354进入我的博客主页
网友评论