核函数
线性不可分问题怎么解决
对svm 来讲,最好的当然是样本完全线性可分,就算差一点不是完全的我们也希望绝大部分眼本店线性可分。
但是我们可能碰到一种情况,样本点不是线性可分的

这种情况的一种解决办法就是,将二维线性不可分样本,映射到高维空间中,让样本点在高维空间线性可分,比如变成这样:

高维比低维更容易线性可分
什么是非线性SVM
对于有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机就是非线性SVM
我们将样本映射到的这个逢高维度的新空间叫做特征空间
我们现在用x来表示原来的样本点,用ϕ(x)表示x映射到特征空间之后的新向量。
那么分隔超平面可以表示为:f(x)=wϕ(x)+b
由于上面的线性SVM的对偶问题,此处非线性SVM的对偶问题就变成了
min(21∑i=1m∑j=1mλiλjyiyjϕ(xi)⋅ϕ(xj)−∑i=1mλi) s.t. ∑i=1mλiyi=00⩽λi⩽C,i=1,2,…,m
可以看到,和线性SVM唯一的不同就是:之前的xi与xj的内积(点乘)变成了ϕ(xi)与ϕ(xj)的内积
为什么要有核函数
我们可以看到,对于费现象函数来说,和之前不同的主要是ϕ(xi)与ϕ(xj)的内积。而由于是地位空间映射到高维空间,维度可能会很大,所以如果将全部样本点的点乘全部计算好,这样的计算量太大了
针对这个问题,我们的解决方式是先不算 ,用一个函数先替代,我们用
k(xi,xj)=ϕ(xi)∗ϕ(xj)
这样子函数k(xi,xj)称之为核函数。
假设我们现在有一个多项式核函数
k(x,y)=(x∗y+1)2
对于这个核函数,如果带入样本的话,是这样的:
k(x,y)=(i=1∑n(xi∗yi)+1)2
式子展开:
i=1∑n(xi2)(yi2)+i=2∑nj=1∑i−1(2xixj)(2yiyj)+i=1∑n(2xi)(2yi)+1
我们需要先把向量映射成:
x′=(xn2,…,x12,2xnxn−1,…,2xn,…2x1,1)
然后再进行计算,可见这个映射不管是计算量还是存储量都是巨大的,但是有了核函数,就不需要做这样的映射,直接使用原样本维度的点进行计算即可
有了核函数,如何求解非线性SVM的问题
在有了核函数之后,非线性问题重新转变成了线性问题,和之前求解过程一样,先根据对偶函数求解$\lambda ,然后genuine\lambda$求解w,再根据支撑向量求解b即可。
一些常用的核函数
线性核函数
k(xi,xj)=xiTxj
使用时无需指定参数,它直接计算两个输入向量的内积。经过线性核函数转换的样本,特征空间与输入空间重合,相当于并没有将映射到更高维度空间里去
多项式核函数(Polynomial Kernel)
k(xi,xj)=(γxiTxj+r)d,γ>0,d≥0
需要指定三个参数:γ,r,d
这是一个不平稳的核,适用于数据做了归一化的情况
RBF核(Radial Basis Function Kernel)
k(xi,xj)=exp(−γ∣∣xi−xj∣∣2),γ>0
RBF核又叫高斯核(Gaussian Kernel),是一个核函数家族,他会将输入空间的样本以非线性的方式映射到更高维度的空间(特征空间)里去,因此它可以处理类标签和样本属性之间是非线性关系的状况
它有一个参数γ,这个参数的设置非常关键
如果设置过大,则整个RBF核会向线性核方向退化,向更高维度非线性投影的能力就会减弱;
但是如果设置过小,则会使得样本中噪声过大,从而干扰最终SVM的有效性
不过相对于多项式核的3个参数,RBF核只有一个参数需要调,还是相对简单的
当线性核效果不是很好时,可以用RBF试试,或者很多情况下直接使用RBF