1. SVM由浅入深的尝试(五)核函数的理解
对于线性分类问题,线性分类向量机是一种非常有效的方法。但是,当分类变得不线性,线性分类向量机就会失效,我们就需要新的方法去解决,那就是非线性向量机,而在非线性向量机中,一种非常重要的方法就必须要知道,那就是核函数。
对于我本人来说,因为之前也涉猎过核函数,因此,在理解上可能相对快一点。
网上有很多对核函数的介绍,知乎上的介绍我印象很深,有兴趣的可以搜一下。
核函数的入门理解还是要从,将二维非线性问题转化为三维线性问题。
原本线性不可分的问题瞬间变成了线性分割面可以分类的问题。很神奇!
具体实现的手段就是增加维度。
上图中,我们发现x1,x2是非线性分类,于是我们通过变化,z=phi(x),我们发现,z1,z2是线性分类问题。
这里的phi(x)便是映射函数。
其实白话理解就是,假设存在映射函数phi(x),对初始空间所有的x,z,存在
那么,K(x,z)便是核函数。
从上例可以看出,核函数一定,映射函数是不唯一的,而且当维度是无线大的时候,我们几乎无法求得映射函数,那么核函数的作用就在于此,核函数避免了映射函数的求解,叫做核技巧。
核函数是半正定矩阵。
分类决策函数为
分类决策函数为:
...太复杂,没看懂,有时间再看。
我们的线性问题也可以用线性核来解决。
Linear kernel
因此,我们得到的对偶问题就可以切换,
切换为
注:书中的SMO算法也是用线性核的凸二次规划对偶方程求解。
2. 10 SVM - 核函数
09 SVM - 线性不可分模型
假设: 函数Ф是一个从低维特征空间到高维特征空间的一个映射,那么如果存在函数K(x,z), 对于任意的低维特征向量x和z,都有:
称函数K(x,z)为核函数(kernal function);
核函数在解决线性不可分问题的时候,采取的方式是:使用低维特征空间上的计算来避免在高维特征空间中向量内积的恐怖计算量;也就是说此时SVM模型可以应用在高维特征空间中数据可线性分割的优点,同时又避免了引入这个高维特征空间恐怖的内积计算量。
本质: 核函数是一个低纬的计算结果,并没有采用低纬到高维的映射。只不过核函数低纬运算的结果 等价于 映射到高维时向量点积的值。
不妨还是从最开始的简单例子出发,设两个向量x 1 = (μ 1 + μ 2 ) T 和x 2 = (η 1 + η 2 ) T ,两个向量的点积是五维空间的映射,因此映射过后的内积为:
而同时我们可以发现有以下公式:
可以发现两者之间非常相似,所以我们只要乘上一个相关的系数,就可以让这两个式子的值相等,这样不就将五维空间的一个内积转换为两维空间的内积的运算。
现有有两个两维的向量,进行二阶多项式扩展,然后进行内积计算,这个时候映射高高维后计算的计算量为:11次乘法+4次加法;采用近似计算的计算量为:3次乘法+2次加法;采用加系数后的近似计算的计算量为:4次乘法+2次加法;
线性核函数(Linear Kernel): 即原函数,不做映射。
多项式核函数(Polynomial Kernel):其中γ、r、d属于超参,需要调参定义; 类似上面的函数,上面的0.8476是调参出来的结果。
重点: 高斯核函数(Gaussian Kernel): 其中γ属于超参,要求大于0,需要调参定义; 高斯核在实际运用中特别多 ,不仅仅是因为需要调的参数比较少。 最重要的原因是:
在sklearn中,核函数是rbf,即Radial basis functionfuntion 径向基 ;其中真正用到的核函数算法是高斯核。
PS:之前在讲加权线性回归中提过相似度的度量,其中用到的就是类似高斯核的函数。
Sigmoid核函数(Sigmoid Kernel):其中γ、r属于超参,需要调参定义;
了解即可,这个核函数别去用它,垃圾得一塌糊涂。
该算法大致上就是把Sigmoid函数变成了tan函数。
将原始数据映射到高维,然后找一个超曲面来分割它们。差不多就是我上一章一开始画的那个图。
1、 核函数可以自定义;核函数必须是正定核函数,即Gram矩阵是半正定矩阵;
2、核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算; 3、 通过核函数,可以将非线性可分的数据转换为线性可分数据;
令z=x;那么进行多维变换后,应该是同一个向量,从而可以得到以下公式:
了解核函数的构造方式,尤其是高斯核。
11 SVM - 序列最小优化算法 SMO
3. SVM几种核函数的对比分析以及SVM算法的优缺点?
SVM核函数的作用
SVM核函数是用来解决数据线性不可分而提出的,把数据从源空间映射到目标空间(线性可分空间)。
SVM中核函数的种类
1、线性核
优点:
方案首选,奥卡姆剃刀定律
简单,可以求解较快一个QP问题
可解释性强:可以轻易知道哪些feature是重要的
限制:只能解决线性可分问题
2、多项式核
基本原理:依靠升维使得原本线性不可分的数据线性可分;升维的意义:使得原本线性不可分的数据线性可分;
优点:
可解决非线性问题
可通过主观设置幂数来实现总结的预判
缺点:
对于大数量级的幂数,不太适用
比较多的参数要选择
通常只用在已经大概知道一个比较小的幂数的情况
请点击输入图片描述
3、高斯核
优点:
可以映射到无限维
决策边界更为多样
只有一个参数,相比多项式核容易选择
缺点:
可解释性差(无限多维的转换,无法算w)
计算速度比较慢(解一个对偶问题)
容易过拟合(参数选不好时容易overfitting)
4、Sigmoid核
采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络,应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。
在实战中更多的是:
特征维数高选择线性核
样本数量可观、特征少选择高斯核(非线性核)
样本数量非常多选择线性核(避免造成庞大的计算量)
SVM的优缺点
1、SVM算法对大规模训练样本难以实施
SVM的空间消耗主要是存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、张学工的CSVM以及O.L.Mangasarian等的SOR算法。如果数据量很大,SVM的训练时间就会比较长,如垃圾邮件的分类检测,没有使用SVM分类器,而是使用了简单的naive bayes分类器,或者是使用逻辑回归模型分类。
2、用SVM解决多分类问题存在困难
经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器。
3、对缺失数据敏感,对参数和核函数的选择敏感
支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造SVM算法。目前比较成熟的核函数及其参数的选择都是人为的,根据经验来选取的,带有一定的随意性.在不同的问题领域,核函数应当具有不同的形式和参数,所以在选取时候应该将领域知识引入进来,但是目前还没有好的方法来解决核函数的选取问题。