六、核函数(特征空间的隐式映射)
6.1、核函数简介
事实上,大部分时候数据并不是线性可分的,此时我们如何利用SVM算法来对非线性的数据进行处理呢?对于非线性的情况,SVM 的处理方法是选择一个核函数K,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。以下图为例来说明对于线性不可分数据的处理,在图中一堆数据在二维空间是无法划分的,而将数据映射到三维空间里是可以划分的:
而在我们了解和使用核函数之前,如果用原始的方法,就是在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是这种类型的函数:
这里ϕ:X->F是从输入空间到某个特征空间的映射,这意味着建立非线性学习器分为两步:
(1)首先使用一个非线性映射将数据变换到一个特征空间F;
(2)然后在特征空间使用线性学习器分类。
而由于对偶形式就是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:
如果有一种方式可以在特征空间中直接计算内积〈φ(xi · φ(x)〉,就像在原始输入点的函数中一样,就有可能将两个步骤融合到一起建立一个非线性的学习器,这样直接计算的方法称为核函数方法:
核函数K是一个函数,φ是从X到内积特征空间F的映射。对所有x,z都满足:
6.2、核函数例子
用下面一张图来回顾前面的内容,为引入核函数做准备:
假设我们通过SMO高效优化算法,得到了最优的ai们,那么我们也就可以知道W
于是可以得到线性分类器的结果为:
式子中< , >表示两个向量的内积。从这个公式可以看出,对于一个新点X,只需要计算它与训练数据点的内积即可。这一点也是后面使用核函数进行非线性推广的前提。
这里需要强调两点:
(1 )预测新点X 的类别时,只需要计算它与训练数据点的内积即可;
(2 )在(1 )中用到的训练数据点,其实也只是那些“支持向量”的点,即,只有“支持向量”的点会被用来进行新样本的预测。
上面两点的理由可以用下图来进行概括:
上面对之前关于SVM做了一个简单的总结,可以了解到我们处理线性可分数据的处理过程,也为处理线性不可分情况打个基础。
以下图为例来说明如何利用核函数来对数据进行处理:
这张图你很难用一条直线把红黑两类样本给分开,对不对?那怎么办?换个思路——谁说只能用直线的?我用一条二次曲线行不?
处于这条曲线的下方,则为叉叉,即红类;处于这条曲线上方,则为圆圈,即黑类——分开了!我们刚才进行什么操作可以用下图描绘:
这样,我们就把原来的一维x映射到了三维(x2,x,C)。在刚开始我们说了原问题的预测模型的形式为:
此时X也要换成H(x)了,那么就变成:
但是此时会出现下面的对话:
核函数是干嘛的呢?在计算的时候,它可以让x和z不用通过H()映射到高维空间再计算内积,而是直接在低维空间里计算了。我们用K()表示核函数,那么核函数作用就是:K(x,z)=某个函数,从而避开了X映射到H(X),Y映射到H(Y)这么一个过程。下图可以说明核函数的具体用法。
在这个例子中,核函数在低维计算的结果完全等价于原问题:两个变量高维映射后的内积。这么一来,就避开了直接在高维空间中进行计算。在实际应用中,核函数有很多种,根据问题和数据的不同选择相应的核函数,上面的核函数正好适用于例子中的H(x),还有一些其它的核函数:
多项式核:
上面例子中的核函数是多项式核的一个特例,即R=1/2,d=2。
线性核:
高斯核:
通过调控参数σ,高斯核具有相当的灵活性,所以它也是使用最广泛的核函数之一。
对于这么多核函数,只要满足了Mercer定理,都可以作为核函数,但是有些核函数效果很好,有些比较差,总体来看,高斯核是不会出太大偏差的一种。那么什么是Mercer定理?简单来说,K是有效的核函数 => 核函数矩阵K是对称半正定的。
6.3、核函数的本质
核函数的本质主要有以下三点:
(1)实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去,映射到高维空间后,相关特征便被分开了,也就达到了分类的目的;
(2)但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的(有可能至无穷维)。那咋办呢?
(3)此时,核函数就隆重登场了,核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。