在做分类的问题时往往会遇到一些非线性类别,意思是这时想要用一条直线将其正确分类,分隔开是不现实的。这时,就想到有没有一种方法可以将非线性问题转化为线性问题,答案是肯定的。也就是所谓的核技巧 —— 将低维非线性问题转化成高维线性。也就是说,低维可能不好分,高维空间可能就存在那么一个超平面可以将这些点分开。而这个低维到高维是需要转换映射关系的是不是,这个映射(直观说这映射就是一个多维空间向量)可能不是唯一的,但他们之间的联系就是核函数,高维向量的内积可以用低维向量运算得到。书上有个简单例子:
例:假设输入空间是(二维空间向量),核函数是
,试找出其相关的特征空间H和映射空间Y(x):
->H.
取特征空间H=,记
,
,由于:
所以可以取映射
(转置是习惯表示成列向量)
容易验证.
同理,当取依然有
.
相信这样核函数是什么应该相对比较清晰了。这样原来的二维不可分的向量便映射到了三维和四维空间中。
事实上,核函数的研究非常的早,要比SVM出现早得多,当然,将它引入SVM中是最近二十多年的事情。而核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了例如SVM线性不可分的问题。
对于从低维到高维的映射,核函数不止一个。那么什么样的函数才可以当做核函数呢?这是一个有些复杂的数学问题。这里不过多介绍。由于一般我们说的核函数都是正定核函数,这里我们直说正定核函数的充分必要条件。一个函数要想成为正定核函数,必须满足他里面任何点的集合形成的Gram矩阵是半正定的。也就是说,对于任意的 ∈
,i=1,2,3...m,
对应的Gram矩阵
是半正定矩阵,则K(x,z)是正定核函数。
从上面的定理看,定理要求任意的集合都满足Gram矩阵半正定,所以自己去找一个核函数还是很难的,怎么办呢?还好牛人们已经帮我们找到了很多的核函数,而常用的核函数也仅仅只有那么几个。下面我们来看看常见的核函数, 选择这几个核函数介绍是因为scikit-learn中默认可选的就是下面几个核函数。
线性核函数
实际上,也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性不可分SVM用的是线性核函数。
多项式核函数
多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为
其中都需要自己调参定义。
高斯核函数
高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。表达式为:
其中,大于0,需要自己调参定义。
Sigmoid核函数
Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为:
其中,都需要自己调参定义。