从上面的介绍中可以发现,SVM显然是线性分类器,但是数据上线性不可分该怎么办。
数据在原始空间上,即输入空间,线性不可分,但是映射到高维空间,即特征空间,后很可能就线性可分了。
但是映射到一个高维空间同时带来一个问题:在高维空间上求解一个带约束的优化问题显然比在低维空间上计算量要大得多,这就是所谓的“维数灾难”。
这时候就需要一个核函数,隐形地将样本从原始特征空间映射到更高维的空间,并解决原始特征问题的线性不可分问题。核函数虽然将特征从低维到高维的转换,但是它事先从低维开始计算,而将实质上的分类效果表现在了高维上,即避免了直接在高维空间中的复杂计算。
在scikit-learn中内置的核函数一共有4种:
1.线性核函数(Linear Kernel)表达式为:K(x,z)=x∙z,就是普通的内积。
2.多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:K(x,z)=(γx∙z+r)^d ,其中,γ,r,dγ,r,d都需要自己调参定义,比较麻烦。
3.高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是sklearn库和libsvm库默认的核函数。表达式为:K(x,z)=exp(−γ||x−z||^2), 其中,γ大于0,需要自己调参定义。一般情况下,对非线性数据使用默认的高斯核函数会有比较好的效果。
4.Sigmoid核函数(Sigmoid Kernel&#