svm对未知数据的分类_SVM: Kernels和应用技巧

上一篇:成旭元:SVM: 最大间隔分类器原理及推导

Kernels

这部分我们讲解SVM中的一个核心技巧:Kernel(核)方法。

很多讲解SVM的教材是从最优化求解SVM的Loss对偶问题中,简化特征空间内积计算的角度对Kernel方法进行的讲解,这里我们换一个角度来说Kernel。

首先回忆一下,在Logistic Regression中,如果遇到了如下图的,线性不可分的问题怎么办?

cd6d50cd6c35b47f3a8b4b8a6ec5f4d9.png
图一 非线性可分数据集

如上图,我们可以构造更多的多项式特征:

等等,再对这个更高维的特征空间进行划分,这时候更高维度的空间就很可能是线性可分的了。换言之,如果我们在低维空间无法对数据进行划分,就把设法把数据升到更高维度,这样就可能将高维数据用线性的超平面分割开来。

而Naive的SVM,也就是最大间隔分类器,它的划分能力同LR一样,也是只具备线性分类能力,因此在面对非线性可分问题时,同样要提升特征维度,在高维空间找到一个可能的最大间隔超平面来划分数据。而问题是,我们要提升特征维度,额外的特征从哪里来呢?

当然我们可以使用上面说的多项式特征,但是这里介绍一种新的提升维度方法:

首先,原有的

维特征是
,记新的的特征为
,新的特征向量维度目前未知。

然后,以原来有二维特征构成的平面为例,我们在平面内选择若干个代表点

然后对于任意一个样本

,定义其新的特征1,是
所代表点的相似度,即令

然后我们可以用下面这个公式来作为

函数,用以度量相似度:

这个函数类似于正态分布的概率密度函数,在

很接近时,其值接近1;在
距离很远时,其值接近0。

使用这个函数之后,类似地,如果共有

个代表点
,我们可以定义出
个新的特征:

那么现在我们就通过代表点和

函数把总的维度从原来的
维提高到了
维度(如果
),而这个
函数就是我们需要的kernel函数,上边这种形式的kernel函数被称为是高斯核函数,或者叫RBF核函数。

这样做的原因是什么?下面我们将解释使用Kernel函数之后,为什么就能够将本来不能线性划分的数据从高维空间划分开。

同样以二维原始特征举例,假如现在我们只有一个代表点

,那么我们计算的
原特征空间下,高斯核函数的函数值和函数等高线的分布就如同下图:

e4037f458bd3be961c7d1a925592ddda.png
图二 l1点的高斯核函数分布

可以看出,函数值的分布是一个二维正态分布,在

越接近
的点,函数值越高,离
越远,函数值越低,从等高线图也可以看出这个趋势。

那么

特征有什么作用呢?假设我们有下面这样分布的非线性可分数据集,蓝色样本的中心点接近于代表点

e6f20185115a45d11ec061ec251dacf1.png
图三 代表点L1选择在蓝色样本中心附近

如果我们对所有的样本点使用高斯核函数,求它们到

的相似度,就会得到一个非常有趣的结果(如图四):

所有蓝色样本点,由于他们距离

较近,因此都有较高的核函数值,在图二的二维高斯分布构成的曲面上,蓝色样本点的都位于山顶的位置;

而所有橙色样本点,由于他们距离

较远,核函数值较低,因此在曲面上,橙色样本点的都位于山下的平面上;

而在半山腰的位置,正好能够找到一个线性的超平面,将山顶的蓝色样本和山下的橙色样本完美的一分为二!

dd87996d92ce3b33938ad0be95a9e8cd.png
图四 样本点在在l1附近高斯核函数值的分布

因此,我们的高斯核函数就实现了,将低维空间无法线性分类的数据映射到高维空间,并且很容易找到一个线性平面分类数据。

而且实际上,我们并不需要

共三个维度的特征,只需要保留
的值,单独用这一个维度就可以完美的分离蓝橙两个类别了(蓝橙两个类别的函数值分别分布于一条一维线段的两端),因此并不是在高维空间中寻找的超平面,反而减少了很多计算量。

这还仅为1个代表点的情况,如果我们多选若干个代表点,从直观上可以想象,模型将会有处理更复杂的非线性分布数据的能力。

此外,我们看高斯核函数中的参数

的作用,根据高斯分布的定义可以知道,
的越大,分布越矮胖;
越小,分布越瘦高,其分布如图五所示。

ef4ca48e4c62e4e38e5b895c35e6ef92.png
图五 高斯核函数分布与σ方之间关系

那么当

越小时,
值随原特征变化的越快,如果是在图四上,就会表现为山的高度变高,山顶的蓝色样本更密集,山地的橙色样本更稀疏,且蓝橙样本的距离分的更开,可能会更容易找到划分的超平面,但这个时候更容易造成过拟合,因为原特征的微小变化就会引发新特征巨大的变化。

较大时,
值随原特征变化的慢,表现在图四上为,山的高度较低,山顶的蓝色样本和山底的橙色样本距离更近,可能会更难找出一个划分的超平面,可能会产生欠拟合。

下图六是另一个例子,说明通过更多的代表点,构成更复杂的特征空间,就可以拟合更复杂的样本分布。

5a712309f8a955ccb601a3bb075f7652.png
图六 更多代表点生成的特征空间能产生更复杂的决策边界

经过上边的叙述,我们已经知道代表点和高斯核函数的作用了。那么一个重要的问题就是,在实现的过程中是怎么选择代表点的?

实际上,给定一个有

个样本的训练集
,那么Kernel方法就直接选择所有的
个样本
作为代表点
,即最后生成的特征空间变为了

也就是说,如果给定一个样本

,Kernel方法会使用核函数(如高斯函数)计算样本
到所有样本的,一共
个相似度,然后再将这
个相似度组成
新的特征向量,送给最大间隔分类器去分类。而这样的相似度,从直观上来讲就是这个样本到其他样本的距离(类似于KNN算法)。

应用技巧

  1. 当应用于小样本数据集,且样本特征维度非常高时(
    ),应优先考虑使用Linear Kernel,在样本自身构成的高维特征空间中拟合一个线性超平面即可,因为如果要想用很少的样本去拟合及其复杂超平面,很容易造成过拟合。
  2. 当应用于大数据集,而特征维度较少时(
    ),可以考虑使用RBF Kernel或其他一些非线性Kernel。但是如果m非常非常非常大,这样使用RBF就会很慢,此时最好直接放弃SVM,换其他的算法。
  3. 在使用RBF Kernel时,应注意如果原始特征之间数值差距特别大(比如某个维度a取值范围是(-10000~10000),另一个b维度数据范围都是0.几),这时候要注意先对特征做归一化处理,因为RBF本质上是相似度函数,有它的公式可知,在计算相似度距离时,如果有两个样本的a特征相差不大,而b特征就算相差很大,也只有0.几的差距,这个差距完全被a的数量级抹去了,最终两个样本距离也不会很大。这就会导致,本来特征b是有区分度的,但区分度却在计算Kernel时受影响被抹去了,因此要提前对原始特征做归一化。
  4. 常见的Kernel:
Linear Kernel:线性核函数
RBF(Gaussian) Kernel:高斯或径向基核函数,较为常用
Polynomial Kernel:多项式核函数,形如

String Kernel:用来计算字符串之间相似度的核函数
Kernel:卡方核函数

Histogram Intersection Kernel:直方交叉核函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值