SVM核函数的选择对于其性能的表现有相当重要的做用,尤为是针对那些线性不可分的数据,所以核函数的选择在SVM算法中就显得相当重要。对于核技巧咱们知道,其目的是但愿经过将输入空间内线性不可分的数据映射到一个高纬的特征空间内使得数据在特征空间内是可分的,咱们定义这种映射为ϕ(x)ϕ(x) ,那么咱们就能够把求解约束最优化问题变为算法
minαs.t.αi≥0,12∑Ni=1∑Nj=1αiαjyiyj(ϕi⋅ϕj)−∑Ni=1αi∑Ni=1αiyi=0i=1,2,...,Nminα12∑i=1N∑j=1Nαiαjyiyj(ϕi⋅ϕj)−∑i=1Nαis.t.∑i=1Nαiyi=0αi≥0,i=1,2,...,N
可是因为从输入空间到特征空间的这种映射会使得维度发生爆炸式的增加,所以上述约束问题中内积ϕi⋅ϕjϕi⋅ϕj 的运算会很是的大以致于没法承受,所以一般咱们会构造一个核函数网络
κ(xi,xj)=ϕ(xi)⋅ϕ(xj)κ(xi,xj)=ϕ(xi)⋅ϕ(xj)
从而避免了在特征空间内的运算,只须要在输入空间内就能够进行特征空间的内积运算。经过上面的描述咱们知道要想构造核函数κκ ,咱们首先要肯定输入空间到特征空间的映射,可是若是想要知道输入空间到映射空间的映射,咱们须要明确输入空间内数据的分布状况,但大多数状况下,咱们并不知道本身所处理的数据的具体分布,故通常很难构造出彻底符合输入空间的核函数,所以咱们经常使用以下几种经常使用的核函数来代替本身构造核函数:函数
- 线性核函数
κ(x,xi)=x⋅xiκ(x,xi)=x⋅xi
线性核,主要用于线性可分的状况,咱们能够看到特征空间到输入空间的维度是同样的,其参数少速度快,对于线性可分数据,其分类效果很理想,所以咱们一般首先尝试用线性核函数来作分类,看看效果如何,若是不行再换别的
- 多项式核函数
κ(x,xi)=((x⋅xi)+1)dκ(x,xi)=((x⋅xi)+1)d
多项式核函数能够实现将低维的输入空间映射到高纬的特征空间,可是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到没法计算。
- 高斯(RBF)核函数
κ(x,xi)=exp(−||x−xi||2δ2)κ(x,xi)=exp(−||x−xi||2δ2)
高斯径向基函数是一种局部性强的核函数,其能够将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,不管大样本仍是小样本都有比较好的性能,并且其相对于多项式核函数参数要少,所以大多数状况下在不知道用什么核函数的时候,优先使用高斯核函数。
- sigmoid核函数
κ(x,xi)=tanh(η<x,xi>+θ)κ(x,xi)=tanh(η<x,xi>+θ)
采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。
所以,在选用核函数的时候,若是咱们对咱们的数据有必定的先验知识,就利用先验来选择符合数据分布的核函数;若是不知道的话,一般使用交叉验证的方法,来试用不一样的核函数,偏差最下的即为效果最好的核函数,或者也能够将多个核函数结合起来,造成混合核函数。在吴恩达的课上,也曾经给出过一系列的选择核函数的方法:性能
- 若是特征的数量大到和样本数量差很少,则选用LR或者线性核的SVM;
- 若是特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
- 若是特征的数量小,而样本的数量很大,则须要手工添加一些特征从而变成第一种状况。