我所理解的 SVM核函数的应用

我们通过乘数法得到了  ,现在我们把它们回带到 分界线 :


如果我们已经求得 和 ,那么 可以写成仅依赖于  和  的矢量积形式,这一点非常关键。很多时候我们需要从数据中挖掘新的特征来进行训练,而不是简单粗暴地用原始数据,比如我从 中挖掘出新的特征 , 我们需要再一步一步重新推导  的表达式吗?只需要将 换成 即可,更一般的:

如果存在一种映射关系 ,将  映射到另一空间中,已知  ,那么新空间中的 。

整个过程非常的顺溜, 可以将数据从低维空间映射到高维空间中,为分类提供了新的视角,如下图所示,一维空间中的数据点 X 和 O 互相交杂,在一维空间中我们无法找到一个分界点进行划分,但是通过  映射到二维空间后,很容易找到分界线将这些不同类型的点区分开来。我所理解的 SVM核函数的应用_第1张图片

映射函数  通常将低维的数据()映射到更高维的空间()中,使得线性区分变为了可能, 考虑到 ,这引起的一个问题就是计算量随着维数的增加快速增大,但是我们又知道矢量点积的结果是一个数,怎么来简化这个操作呢?

在这里引入核函数(Kernel Function)  ,此时 :


好像有点乱,让我们先来捋一捋:


映射函数  的作用是将低维空间的数据映射到高维空间中,核函数 表示的是映射之后高维空间中两个矢量的点积。

通过映射函数,我们能从原始数据中(低维空间)抽象出所需的特征(高维空间),由低维空间向高维空间的转化很多时候非常的麻烦,有意思的是,无论是1维、10维、100维还是更高维的空间,其矢量点积的结果都是一个常数,那么有没有什么捷径,可以跳过维度转换的过程,通过相对简单的计算直接得到矢量积?答案就是核函数,还是举一个例子来说明吧:

令 ,我们定义  将原始数据从三维空间映射到九维空间中,让我们来计算:

$$

\begin{split}\phi(1,2,3)&=[1,2,3,2,4,6,3,6,9]^T\\\phi(4,5,6)&=[16,20,24,20,25,30,24,30,36]^T\\\phi(1,2,3) \cdot \phi(4,5,6) &=1\times16+2\times 20 + 3\times 24 + 2\times 20 + 4 \times 25 + 6 \times 30 + 3 \times 24 + 6 \times 30 + 9\times 36\\&=16+40+72+40+100+180+72+180+324\\&=1024\end{split}

可以看出计算相当繁琐,嗯,我们来尝试找找对应的核函数:

\begin{split}\phi(x)\cdot \phi(y)&=[x_1x_1,x_1x_2,x_1x_3,x_2x_1,x_2x_2,x_2x_3,x_3x_1,x_3x_2,x_3x_3]^T\cdot [y_1y_1,y_1y_2,y_1y_3,y_2y_1,y_2y_2,y_2y_3,y_3y_1,y_3y_2,y_3y_3] \\&= x_1y_1x_1y_1+x_1y_1x_2y_2+x_1y_1x_3y_3+x_2y_2x_1y_1+x_2y_2x_2y_2+x_2y_2x_3y_3\\&+x_3y_3x_1y_1+x_3y_3x_2y_2+x_3y_3x_3y_3\\&=(x_1y_1+x_2y_2+x_3y_3)^2\\&=(x^Ty)^2\\&=K(x,y)\end{split}

通过上面的推导,我们发现虽然维度转化的过程较为繁琐复杂,但是矢量点积的结果确实相当简洁,这一次我们直接用核函数计算:


相比于从低维映射到高维空间再进行矢量积运算,核函数大大简化了计算的过程,使得向更高维转化变为了可能,我们不需要知道低维空间的数据是怎样映射到高维空间的,我们只需要知道结果是怎么计算出来的。

5. 介绍两种核函数

在支持向量机中常用的几种核函数是多项式型核(Polynomial Kernel)、径向基函数核(Radial basis function kernel,又叫高斯核,简称 RBF)以及逻辑核( Sigmoid Kernel)。

- 多项式型


如果  本身是  维空间的向量,多项式展开后可知该核函数对应的空间维度为  ,计算复杂度随着维数增加呈指数爆炸,但是用核函数进行计算的复杂度为  。

维数越高,偏差(bias)越低,方差(variance)越高,容易出现过拟合的情况,相反维数越低,偏差就会越大,但是方差会随之减小,一般不宜选择过高的维度,最适合的维度需要通过交叉验证(cross validation)等方法来确定,关于方差和偏差的分析,可以看看这篇博文

你可能感兴趣的:(我所理解的 SVM核函数的应用)