上一篇:成旭元:SVM: 最大间隔分类器原理及推导
Kernels
这部分我们讲解SVM中的一个核心技巧:Kernel(核)方法。
很多讲解SVM的教材是从最优化求解SVM的Loss对偶问题中,简化特征空间内积计算的角度对Kernel方法进行的讲解,这里我们换一个角度来说Kernel。
首先回忆一下,在Logistic Regression中,如果遇到了如下图的,线性不可分的问题怎么办?
![cd6d50cd6c35b47f3a8b4b8a6ec5f4d9.png](https://i-blog.csdnimg.cn/blog_migrate/9f6cb96b519f39ac21145e0e27edb259.jpeg)
如上图,我们可以构造更多的多项式特征:
而Naive的SVM,也就是最大间隔分类器,它的划分能力同LR一样,也是只具备线性分类能力,因此在面对非线性可分问题时,同样要提升特征维度,在高维空间找到一个可能的最大间隔超平面来划分数据。而问题是,我们要提升特征维度,额外的特征从哪里来呢?
当然我们可以使用上面说的多项式特征,但是这里介绍一种新的提升维度方法:
首先,原有的
然后,以原来有二维特征构成的平面为例,我们在平面内选择若干个代表点
然后对于任意一个样本
然后我们可以用下面这个公式来作为
这个函数类似于正态分布的概率密度函数,在
使用这个函数之后,类似地,如果共有
那么现在我们就通过代表点和
这样做的原因是什么?下面我们将解释使用Kernel函数之后,为什么就能够将本来不能线性划分的数据从高维空间划分开。
同样以二维原始特征举例,假如现在我们只有一个代表点
![e4037f458bd3be961c7d1a925592ddda.png](https://i-blog.csdnimg.cn/blog_migrate/1eb71a03852abb890214eda7eaee8d45.jpeg)
可以看出,函数值的分布是一个二维正态分布,在
那么
![e6f20185115a45d11ec061ec251dacf1.png](https://i-blog.csdnimg.cn/blog_migrate/eb7636d751a9eccf70076ea48f839f2c.png)
如果我们对所有的样本点使用高斯核函数,求它们到
所有蓝色样本点,由于他们距离
而所有橙色样本点,由于他们距离
而在半山腰的位置,正好能够找到一个线性的超平面,将山顶的蓝色样本和山下的橙色样本完美的一分为二!
![dd87996d92ce3b33938ad0be95a9e8cd.png](https://i-blog.csdnimg.cn/blog_migrate/ad635aed1f74a9c2c30722c8a65fcf87.jpeg)
因此,我们的高斯核函数就实现了,将低维空间无法线性分类的数据映射到高维空间,并且很容易找到一个线性平面分类数据。
而且实际上,我们并不需要
这还仅为1个代表点的情况,如果我们多选若干个代表点,从直观上可以想象,模型将会有处理更复杂的非线性分布数据的能力。
此外,我们看高斯核函数中的参数
![ef4ca48e4c62e4e38e5b895c35e6ef92.png](https://i-blog.csdnimg.cn/blog_migrate/4e00d8c1c87cf0325716be130a686007.png)
那么当
而
下图六是另一个例子,说明通过更多的代表点,构成更复杂的特征空间,就可以拟合更复杂的样本分布。
![5a712309f8a955ccb601a3bb075f7652.png](https://i-blog.csdnimg.cn/blog_migrate/f6a705e585e693ed9592c6ec68a06ece.jpeg)
经过上边的叙述,我们已经知道代表点和高斯核函数的作用了。那么一个重要的问题就是,在实现的过程中是怎么选择代表点的?
实际上,给定一个有
也就是说,如果给定一个样本
应用技巧
- 当应用于小样本数据集,且样本特征维度非常高时(
),应优先考虑使用Linear Kernel,在样本自身构成的高维特征空间中拟合一个线性超平面即可,因为如果要想用很少的样本去拟合及其复杂超平面,很容易造成过拟合。
- 当应用于大数据集,而特征维度较少时(
),可以考虑使用RBF Kernel或其他一些非线性Kernel。但是如果m非常非常非常大,这样使用RBF就会很慢,此时最好直接放弃SVM,换其他的算法。
- 在使用RBF Kernel时,应注意如果原始特征之间数值差距特别大(比如某个维度a取值范围是(-10000~10000),另一个b维度数据范围都是0.几),这时候要注意先对特征做归一化处理,因为RBF本质上是相似度函数,有它的公式可知,在计算相似度距离时,如果有两个样本的a特征相差不大,而b特征就算相差很大,也只有0.几的差距,这个差距完全被a的数量级抹去了,最终两个样本距离也不会很大。这就会导致,本来特征b是有区分度的,但区分度却在计算Kernel时受影响被抹去了,因此要提前对原始特征做归一化。
- 常见的Kernel:
Linear Kernel:线性核函数
RBF(Gaussian) Kernel:高斯或径向基核函数,较为常用
Polynomial Kernel:多项式核函数,形如![]()
String Kernel:用来计算字符串之间相似度的核函数Kernel:卡方核函数
Histogram Intersection Kernel:直方交叉核函数