我们知道,SVM相对感知机而言,它可以解决线性不可分的问题,那么它是怎么解决的呢?它的解决思想很简单,就是对原始数据的维度变换,一般是扩维变换,使得原样本空间中的样本点线性不可分,但是在变维之后的空间中样本点是线性可分的,然后再变换后的高维空间中进行分类。
线性可分时:
求的最终结果:
其中表示任选的一个支持向量
当然这是线性可分的情况,那么如果问题本身是线性不可分的情况呢,那就是先扩维后再计算,计算形式是一样的:
其中表示原来的样本扩维后的坐标。
从中可以看出,不管是不扩维的求解还是扩维的求解,在求解对偶问题的过程中都会用到各样本点的内积的结果,那么这时候问题来了,在很多情况下,扩维可能会吧原数据扩到很高维(甚至无穷维),这时候直接求内积是非常困难的,我们为了避免做这样的事就提出了核函数的概念。
核函数:任意两个样本点在扩维后的空间的内积,如果等于这两个样本点在原来空间经过一个函数后的输出,那么这个函数就叫核函数。
核函数它本质上隐含了从低维到高维的映射,从而避免直接计算高维的内积。
一般情况下,常用的几个核函数如下:
①线性核函数
②多项式核函数
其中,γ,r,n都需要自己调参定义,比较麻烦。n默认是3,γ 默认为'auto',即1/特征维度,r默认为0.一般需要通过交叉验证选择一组合适的γ,r,n。
③高斯核函数(径像基核函数)
④拉普拉斯核函数:
⑤sigmoid核函数:
一般情况下,对非线性数据使用默认的高斯核函数会有比较好的效果,如果你不是SVM调参高手的话,建议使用高斯核来做数据分析。
一般推荐在做训练之前对数据进行归一化,当然测试集中的数据也需要归一化。。
在特征数非常多的情况下,或者样本数远小于特征数的时候,使用线性核,效果已经很好,并且只需要选择惩罚系数C即可。
在选择核函数时,如果线性拟合不好,一般推荐使用默认的高斯核'rbf'。这时我们主要需要对惩罚系数C和核函数参数γ进行艰苦的调参,通过多轮的交叉验证选择合适的惩罚系数C和核函数参数γ。
理论上高斯核不会比线性核差,但是这个理论却建立在要花费更多的时间来调参上。如果调的不好,可能比线性核函数还要差。所以我们实际应用中,能用线性核函数得到较好效果的都会选择线性核函数。如果线性核不好,我们就需要使用RBF,在享受RBF对非线性数据的良好分类效果前,我们需要对主要的超参数进行选取。