核函数

线性不可分问题怎么解决
对svm 来讲,最好的当然是样本完全线性可分,就算差一点不是完全的我们也希望绝大部分眼本店线性可分。
但是我们可能碰到一种情况,样本点不是线性可分的
算法强化 —— SVM(四)
这种情况的一种解决办法就是,将二维线性不可分样本,映射到高维空间中,让样本点在高维空间线性可分,比如变成这样:
算法强化 —— SVM(四)
高维比低维更容易线性可分

什么是非线性SVM

对于有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机就是非线性SVM

我们将样本映射到的这个逢高维度的新空间叫做特征空间
我们现在用x来表示原来的样本点,用ϕ(x)\phi(x)表示x映射到特征空间之后的新向量。

那么分隔超平面可以表示为:f(x)=wϕ(x)+bf(x)=w \phi(x)+b

由于上面的线性SVM的对偶问题,此处非线性SVM的对偶问题就变成了
min(12i=1mj=1mλiλjyiyjϕ(xi)ϕ(xj)i=1mλi) s.t. i=1mλiyi=00λiC,i=1,2,,m\begin{array}{c} \min \left(\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \lambda_{i} \lambda_{j} y_{i} y_{j} \phi\left(x_{i}\right) \cdot \phi\left(x_{j}\right)-\sum_{i=1}^{m} \lambda_{i}\right) \\ \text { s.t. } \sum_{i=1}^{m} \lambda_{i} y_{i}=0 \\ 0 \leqslant \lambda_{i} \leqslant C, \quad i=1,2, \ldots, m \end{array}
可以看到,和线性SVM唯一的不同就是:之前的xix_ixjx_j的内积(点乘)变成了ϕ(xi)\phi(x_i)ϕ(xj)\phi(x_j)的内积

为什么要有核函数

我们可以看到,对于费现象函数来说,和之前不同的主要是ϕ(xi)\phi(x_i)ϕ(xj)\phi(x_j)的内积。而由于是地位空间映射到高维空间,维度可能会很大,所以如果将全部样本点的点乘全部计算好,这样的计算量太大了
针对这个问题,我们的解决方式是先不算 ,用一个函数先替代,我们用
k(xi,xj)=ϕ(xi)ϕ(xj) k(x_i,x_j) = \phi(x_i)*\phi(x_j)
这样子函数k(xi,xj)k(x_i,x_j)称之为核函数。

假设我们现在有一个多项式核函数
k(x,y)=(xy+1)2 k(x,y) = (x*y+1)^2
对于这个核函数,如果带入样本的话,是这样的:
k(x,y)=(i=1n(xiyi)+1)2 k(x,y) = (\sum_{i=1}^n (x_i*y_i)+1)^2

式子展开:
i=1n(xi2)(yi2)+i=2nj=1i1(2xixj)(2yiyj)+i=1n(2xi)(2yi)+1\sum_{i=1}^{n}\left(x_{i}^{2}\right)\left(y_{i}^{2}\right)+\sum_{i=2}^{n} \sum_{j=1}^{i-1}\left(\sqrt{2} x_{i} x_{j}\right)\left(\sqrt{2} y_{i} y_{j}\right)+\sum_{i=1}^{n}\left(\sqrt{2} x_{i}\right)\left(\sqrt{2} y_{i}\right)+1
我们需要先把向量映射成:
x=(xn2,,x12,2xnxn1,,2xn,2x1,1)x^{\prime}=\left(x_{n}^{2}, \ldots, x_{1}^{2}, \sqrt{2} x_{n} x_{n-1}, \ldots, \sqrt{2} x_{n}, \ldots \sqrt{2} x_{1}, 1\right)
然后再进行计算,可见这个映射不管是计算量还是存储量都是巨大的,但是有了核函数,就不需要做这样的映射,直接使用原样本维度的点进行计算即可

有了核函数,如何求解非线性SVM的问题

在有了核函数之后,非线性问题重新转变成了线性问题,和之前求解过程一样,先根据对偶函数求解$\lambda genuine,然后genuine\lambda$求解w,再根据支撑向量求解b即可。

一些常用的核函数

线性核函数

k(xi,xj)=xiTxjk(x_i,x_j) = x_i^T x_j
使用时无需指定参数,它直接计算两个输入向量的内积。经过线性核函数转换的样本,特征空间与输入空间重合,相当于并没有将映射到更高维度空间里去

多项式核函数(Polynomial Kernel)

k(xi,xj)=(γxiTxj+r)d,γ>0,d0k(x_i,x_j) = (\gamma x_i^T x_j + r)^d ,\gamma > 0,d \geq 0
需要指定三个参数:γ,r,d\gamma,r,d
这是一个不平稳的核,适用于数据做了归一化的情况

RBF核(Radial Basis Function Kernel)

k(xi,xj)=exp(γxixj2),γ>0k(x_i,x_j) = exp(-\gamma||x_i-x_j||^2),\gamma > 0
RBF核又叫高斯核(Gaussian Kernel),是一个核函数家族,他会将输入空间的样本以非线性的方式映射到更高维度的空间(特征空间)里去,因此它可以处理类标签和样本属性之间是非线性关系的状况

它有一个参数γ\gamma,这个参数的设置非常关键

如果设置过大,则整个RBF核会向线性核方向退化,向更高维度非线性投影的能力就会减弱;
但是如果设置过小,则会使得样本中噪声过大,从而干扰最终SVM的有效性

不过相对于多项式核的3个参数,RBF核只有一个参数需要调,还是相对简单的

当线性核效果不是很好时,可以用RBF试试,或者很多情况下直接使用RBF

相关文章:

  • 2021-08-15
  • 2021-07-07
  • 2021-09-27
猜你喜欢
  • 2021-04-25
  • 2021-12-01
  • 2021-07-27
  • 2021-04-04
  • 2021-04-26
相关资源
相似解决方案