支持向量机学习方法包括构建由简至繁的模型:线性可分支持向量机、线性支持向量机及非线性支持向量机。当训练数据线性可分时,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据近似线性可分时,通过软间隔最大化,也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
分类学习最基本的想法就是基于训练集D在样本空间中找到一个超平面,将不同类别的样本分开。但是正如下图所示,能将训练样本分开的超平面可能有很多,那我们应该选择哪一个呢?
直观上看,我们应该去找位于两类训练样本“正中间”的超平面,也就是样本点与直线的距离最大那条直线。因为该超平面对训练样本局部扰动的容忍性最好。
在样本空间中,超平面可用如下方程来描述:
其中为法向量,决定了超平面的方向;b为位移项,是超平面与远点之间的距离。显然超平面可由法向量w和位移b唯一确定。
一般来说,一个点距离超平面的距离d的大小可以表示分类预测的确信程度。在超平面确定的情况下。
(1)
当点A表示某一实例,其类标记为
。点A与超平面的距离记作
,那么
(2)
当点A表示某一实例,其类标记为
。点A与超平面的距离记作
,那么
(3)
一般地,点与超平面的距离是
(4)
公式(4)也被称为超平面关于样本点的几何间隔。
最大间隔分离超平面
如上图所示,距离超平面最近的这几个训练样本点被称为支持向量,两个异类支持向量(即分别位于超平面两侧的点)到超平面的距离之和为
(5)
上面(5)的d称为间隔(margin)。
要求得最大间隔(即最大化),就是要满足:
显然,为了最大化间隔,仅需最大化,这等价于最小化
,于是上式可以重写为:
这就是支持向量机的基本模型。
拉格朗日函数
首先,我们先要从宏观的视野上了解一下拉格朗日对偶问题出现的原因和背景。
我们知道我们要求解的是最小化问题,所以一个直观的想法是如果我能够构造一个函数,使得该函数在可行解区域内与原目标函数完全一致,而在可行解区域外的数值非常大,甚至是无穷大,那么这个没有约束条件的新目标函数的优化问题就与原来有约束条件的原始目标函数的优化问题是等价的问题。这就是使用拉格朗日方程的目的,它将约束条件放到目标函数中,从而将有约束优化问题转换为无约束优化问题。
随后,人们又发现,使用拉格朗日获得的函数,使用求导的方法求解依然困难。进而,需要对问题再进行一次转换,即使用一个数学技巧:拉格朗日对偶。
所以,显而易见的是,我们在拉格朗日优化我们的问题这个道路上,需要进行下面二个步骤:
- 将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数
- 使用拉格朗日对偶性,将不易求解的优化问题转化为易求解的优化
对偶问题求解的3个步骤:
1)首先固定,要让 L 关于 w 和 b 最小化,我们分别对w,b求偏导数,即令 ∂L/∂w 和 ∂L/∂b 等于零:
将以上结果代入之前的L:
得到:
推导过程:
最后,得到:
2)求对的极大,即是关于对偶问题的最优化问题。经过上面第一个步骤的求w和b,得到的拉格朗日函数式子已经没有了变量w,b,只有
。从上面的式子得到:
3)在求得L(w, b, a) 关于 w 和 b 最小化,以及对的极大之后,最后一步则可以利用SMO算法求解对偶问题中的拉格朗日乘子
。
SMO算法
SMO算法的目标是求出一系列αiαi和bb,一旦求出了这些,就很容易计算出权重向量w并得到分隔超平面。
SMO算法的工作原理是:每次循环中选择两个进行优化处理。一旦找到了一对合适的
,那么就增大其中一个同时减小另一个。这里所谓的”合适”就是指两个
必须符合以下两个条件,条件之一就是两个
必须要在间隔边界之外,而且第二个条件则是这两个
还没有进行过区间化处理或者不在边界上。
SMO算法的解法
先来定义特征到结果的输出函数为:
接着,我们回忆一下原始优化问题,如下:
求导得:
将上述公式带入输出函数中:
与此同时,拉格朗日对偶后得到最终的目标化函数:
具体可参考博客:https://blog.csdn.net/luanpeng825485697/article/details/78823919
线性支持向量机以及软间隔最大化
假设给定一个特征空间上的训练数据集
假设训练数据集不是线性可分的,通常情况是,训练数据中有一些特异点,将这些特异点去除以后,剩下的大部分的样本点组成的集合是线性可分的。
线性不可分意味着某些样本点不能满足函数间隔大于等于1的约束条件,为了解决这个问题,可以对每个样本点
引进一个松弛变量
,这样,约束条件变为:
同时,对于每个松弛变量,支付一个代价
,目标函数由原来的
变为:
这里,C>0称为惩罚参数,一般由应用问题决定,C值大时对误分类的惩罚增大, C值小时对误分类的惩罚减小,此时,最小化目标函数有两层含义:使尽量小,同时使误分类的个数尽量少,C是调和二者的系数。
有了上面的思路,上面问题变成如下凸二次规划问题(原始优化问题):
上面的对偶问题是:
原始优化问题的拉格朗日函数是:
非线性支持向量机和核函数
非线性分类问题是指通过利用非线性模型才能很好地进行分类的问题。先看一个例子:
由上图可见,无法用直线(线性模型)将正负实例正确分开,但是我们却可以用一条椭圆双曲线(非线性模型)将他们正确分开。
非线性问题往往不好求解,我们可以将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。正如上面的例子,通过将原始的二维空间映射到一个合适的三维空间,就能找到一个合适的超平面。
上面的例子说明,用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原来的空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据集中学习分类模型。核技巧就是属于这样的方法。
令表示将x映射后的特征向量,于是在特征空间中超平面所对应的模型可表示为
类似地,可得到:
其对偶问题是:
我们注意到上面式子的计算涉及到了就算,这是样本
与
映射到特征空间后的内积,由于特征空间的维数可能很高,甚至可能是无穷维,因此直接计算
通常是困难的,因此,我们可以设想有这样一个函数:
然后用上面的式子,我们就不必直接去计算高维甚至无穷维特征空间的内积,于是,我们可以将公式改写成如下:
求解后,得到
这里的就是核函数。
那么常用的核函数都有什么呢?
1、线性核是最简单的核函数,核函数的数学公式如下:
2、多项式核实一种非标准核函数,它非常适合于正交归一化后的数据,其具体形式如下:
3、这里说一种经典的鲁棒径向基核,即高斯核函数(RBF核函数),鲁棒径向基核对于数据中的噪音有着较好的抗干扰能力,其参数决定了函数作用范围,超过了这个范围,数据的作用就“基本消失”。高斯核函数是这一族核函数的优秀代表,也是必须尝试的核函数,其数学形式如下:
4、指数核函数就是高斯核函数的变种,它仅仅是将向量之间的L2距离调整为L1距离,这样改动会对参数的依赖性降低,但是适用范围相对狭窄。其数学形式如下:
5、拉普拉斯核完全等价于指数核,唯一的区别在于前者对参数的敏感性降低,也是一种径向基核函数。
6、Sigmoid 核来源于神经网络,现在已经大量应用于深度学习,是当今机器学习的宠儿,它是S型的,所以被用作于“激活函数”。
7、 二次有理核完完全全是作为高斯核的替代品出现,如果你觉得高斯核函数很耗时,那么不妨尝试一下这个核函数,顺便说一下,这个核函数作用域虽广,但是对参数十分敏感,慎用!!!!
此外,还可通过函数组合得到,例如:
SVM的核函数如何选取
最常用的是Linear核与RBF核。需要注意的是需要对数据归一化处理。
1、Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
2、RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。
有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。如果特征的提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果。
这些函数中应用最广的应该就是RBF核了,无论是小样本还是大样本,高维还是低维等情况,RBF核函数均适用,它相比其他的函数有一下优点:1)RBF核函数可以将一个样本映射到一个更高维的空间,而且线性核函数是RBF的一个特例,也就是说如果考虑使用RBF,那么就没有必要考虑线性核函数了。2)与多项式核函数相比,RBF需要确定的参数要少,核函数参数的多少直接影响函数的复杂程度。另外,当多项式的阶数比较高时,核矩阵的元素值将趋于无穷大或无穷小,而RBF则在上,会减少数值的计算困难。3)对于某些参数,RBF和sigmoid具有相似的性能。
因此,在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最下的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。在吴恩达的课上,也曾经给出过一系列的选择核函数的方法:
下面是吴恩达的见解:
1、如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
2、 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
3、 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
总结
SVM的优缺点
优点
可用于线性/非线性分类,也可以用于回归,泛化错误率低,也就是说具有良好的学习能力,且学到的结果具有很好的推广性。
可以解决小样本情况下的机器学习问题,可以解决高维问题,可以避免神经网络结构选择和局部极小点问题。
SVM是最好的现成的分类器,现成是指不加修改可直接使用。并且能够得到较低的错误率,SVM可以对训练集之外的数据点做很好的分类决策。
缺点
对参数调节和和函数的选择敏感。