Python|SVM原理介绍与Python实现(三)(核函数的引出)

三、核函数引出 1、为什么要用核函数? 我们上面其实通过解w和b已经得到了一个线性可分的分类器了,而且已经提到之所以用对偶形式求解就是因为 对偶形式可以引入核函数解决线性不可分的情况。 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
核函数解决线性不可分问题的原理就是将数据映射到高维的空间去,解决原始空间的线性不可分问题。 举个例子: 比如我们有一个一维的数据分布是如下图的样子,你想把它用一个直线来分开,你发现是不可能的,因为他们是间 隔的。所以不论你画在哪,比如绿色竖线,都不可能把两个类分开。

Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
但是如果我们把这个使用一个最简单的方式映射到二维中,x->(x, x^2)。比如:
0->(0,0)
1->(1,1)
2->(2,4)
这时候就线性可分了。 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片

这就是一个简单的升维的方法,而核函数就是给我们提供了这样的一个机会。简单来说,在SVM中核函数kernel的 基本目的就是映射。
2、核函数和映射的关系 我们将原始的分类函数 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
通过一种映射变为下面的形式 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
和b都是已知的了就只要求找到这映射Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
就可以解决问题了。但事实并不是这样的,虽然我们可以求解Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
就 可 以得到正确答案了,但是这样计算的代价实在是太大了。 对一个二维空间做映射,选择的新空间是原始空间的所有 一 阶和二阶的组合,得到了五个维度;如果原始空间是三维,那么我们会得到 19 维的新空间,这个数目是呈爆炸性 增长的。所以不是单单靠映射这么简单。
现在我们其实还没说到核函数,那么核函数怎么和映射联系到一起呢? 其实有很多核函数,它们经过转换就能够得到内积的形式,可以简化计算。例如对于这样一种核函数 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
,假设x和z都是n维的数据, 我们把它展开可以得到: Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
可以看出,只要变换一下就得到了内积的形式,而我们发现用核函数很简单,只要相乘再平方就好了。你们可以用最 简单的n = 3,看看就会发现如果用直接映射,得到的映射函数如下 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
再加上两个映射函数相乘,你会发现计算量还是很大的,但是用核函数就很简单了。
应该注意的是:在SVM之前核函数就已经存在了,只不过在SVM的求解过程中正好碰到了向量内积和非线性的问题, 正好用到了核函数的方法。其实很多地方都能够用到核函数,比如逻辑回归、降维等等。 这里超知乎上的一段:核函数不仅可以建立点和点映射(如SVM) ,还可以建立一个分布和点的映射,通过比较两 组数据映射点的距离,可以判断两组数据是不是同一个分布。参见谷歌 kernel enbedding of distributions。 3、核函数的种类 我们通常使用的核函数有几种(其实核函数是可以构造的): (1)多项式核Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
,上面的例子就是个简单的多项式核,这个核的映射按道理是能写 出来的,但是没什么必要。映射后的维度为Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
,m为原始维度,这是个排列组合问题就不说了有兴趣自己找找。 (2)高斯核,也叫做径向基函数(Radial Basis Function 简称RBF) Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
,这个核是大部分比较常用的核,可以将原始空间映射到无限维的空间中。通过调节 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
就能够调节高斯核,有很大的灵活性。
4、利用核函数分类样本 (1)线性可分时候就是求得w和b ,对于新样本 带入 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
,值大于1就是正类,小于等于-1是负类 (2)线性不可分就利用核函数,将内积变为核函数形式就可以了,判断方法还是和上面一样。 Python|SVM原理介绍与Python实现(三)(核函数的引出)
文章图片
5、总结 核函数的作用就是,在遇到线性不可分的时候要向高维度映射达到线性可分,但是维度很高的时候求解内积就变得非常困难,但是利用核函数就可以在低维度上运算达到高纬度的效果。注意核函数是个很复杂的理论。

    推荐阅读