我所理解的 SVM核函数的应用
我们通过乘数法得到了 ,现在我们把它们回带到
分界线 :
如果我们已经求得 和 ,那么 可以写成仅依赖于 和 的矢量积形式,这一点非常关键。很多时候我们需要从数据中挖掘新的特征来进行训练,而不是简单粗暴地用原始数据,比如我从 中挖掘出新的特征 , 我们需要再一步一步重新推导 的表达式吗?只需要将 换成 即可,更一般的:
如果存在一种映射关系 ,将 映射到另一空间中,已知 ,那么新空间中的 。
整个过程非常的顺溜, 可以将数据从低维空间映射到高维空间中,为分类提供了新的视角,如下图所示,一维空间中的数据点 X 和 O 互相交杂,在一维空间中我们无法找到一个分界点进行划分,但是通过 映射到二维空间后,很容易找到分界线将这些不同类型的点区分开来。
映射函数 通常将低维的数据()映射到更高维的空间()中,使得线性区分变为了可能, 考虑到 ,这引起的一个问题就是计算量随着维数的增加快速增大,但是我们又知道矢量点积的结果是一个数,怎么来简化这个操作呢?
在这里引入核函数(Kernel Function) ,此时 :
好像有点乱,让我们先来捋一捋:
映射函数 的作用是将低维空间的数据映射到高维空间中,核函数 表示的是映射之后高维空间中两个矢量的点积。
通过映射函数,我们能从原始数据中(低维空间)抽象出所需的特征(高维空间),由低维空间向高维空间的转化很多时候非常的麻烦,有意思的是,无论是1维、10维、100维还是更高维的空间,其矢量点积的结果都是一个常数,那么有没有什么捷径,可以跳过维度转换的过程,通过相对简单的计算直接得到矢量积?答案就是核函数,还是举一个例子来说明吧:
令 ,我们定义 将原始数据从三维空间映射到九维空间中,让我们来计算:
$$
可以看出计算相当繁琐,嗯,我们来尝试找找对应的核函数:
通过上面的推导,我们发现虽然维度转化的过程较为繁琐复杂,但是矢量点积的结果确实相当简洁,这一次我们直接用核函数计算:
相比于从低维映射到高维空间再进行矢量积运算,核函数大大简化了计算的过程,使得向更高维转化变为了可能,我们不需要知道低维空间的数据是怎样映射到高维空间的,我们只需要知道结果是怎么计算出来的。
5. 介绍两种核函数
在支持向量机中常用的几种核函数是多项式型核(Polynomial Kernel)、径向基函数核(Radial basis function kernel,又叫高斯核,简称 RBF)以及逻辑核( Sigmoid Kernel)。
- 多项式型
如果 本身是 维空间的向量,多项式展开后可知该核函数对应的空间维度为 ,计算复杂度随着维数增加呈指数爆炸,但是用核函数进行计算的复杂度为 。
维数越高,偏差(bias)越低,方差(variance)越高,容易出现过拟合的情况,相反维数越低,偏差就会越大,但是方差会随之减小,一般不宜选择过高的维度,最适合的维度需要通过交叉验证(cross validation)等方法来确定,关于方差和偏差的分析,可以看看这篇博文