支持向量机

Posted 不成为ML大神不改名

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持向量机相关的知识,希望对你有一定的参考价值。



这篇文章应该是蓄谋已久了,周四就把支持向量机的理论东西看完了,包括线性支持向量机,软间隔最大化,核函数等,就想写一篇里面的数学知识,主要是拉格朗日乘子法(本科教材有讲过吧)和KKT条件,以及SMO算法,SVR(支持向量回归)等。




先说KKT条件与拉格朗日乘子法吧,迫不及待了,因为刚开始学的时候不理解KKT条件的目的和意义何在,其本质是什么,所以现在懂了一点之后,就想要写下来,总结一下。


在取有约束条件的优化问题时,我们通常分为两类:对于等式约束的优化问题,使用拉格朗日乘子法求最优值;对于不等式约束的优化问题时,应用KKT条件取求解。这两种方法求的结果只是必要条件,只有当目标函数和约束函数都是凸函数时,才能保证其求得到的解是充分必要条件。


首先,不加赘述的给出最优化理论的研究函数:

在给定一组约束条件下的最小值(或最大值) 的数学问题,其基本形式为:

支持向量机(二)

KKT条件给出了判定x*是否是最优解的必要条件,即:

支持向量机(二)


其实KKT条件应用场景并不大,但非常重要,关系到最优解的若干特性,由上总结出KKT条件的组成:

支持向量机(二)


对这3个条件一一理解。


首先第一个非常直观,我们要求的最优解肯定是一个解,没毛病。


第二个条件和第三个条件体现了拉格朗日乘子的特性,即广义拉格朗日乘子,其实质就是简化条件,将附属的约束条件转移到函数当中,方便计算。在最优点x∗, ∇f必须是∇gi和∇hj的线性組合, μi和λj都叫作拉格朗日乘子。但是限制条件不同,对于等式约束,拉格朗日乘子可以没有方向,但是对于不等式条件来说,其乘子有方向性,所以每一个μi都必须大于或等于零。至于KKT条件不等式乘子为什么要大于0,简而言之,就是以下:

1 对于约束曲面上的任意点,该点的梯度正交与约束曲面。

2 在最优店,目标函数在该点的梯度正交与约束曲面。

由此可知,在最优点,约束函数在该点的梯度与目标函数在该点的梯度方向相反(相同有矛盾),进而根据拉格朗日乘子法移项得到上述。


第三个条件很明显了,μi=0即约束条件不起作用时,gi(x*)<0;

μi>0即约束条件起作用时,gi(x*)=0.


总结

同时包含等式约束和不等式约束的最优化问题时:

支持向量机(二)

KKT条件(x*为最优解的必要条件)为:

支持向量机(二)

至此,推导完了KKT条件,可以对比一下无约束优化、等式约束优化和等式+不等式约束优化条件下某点为局部最优解(极值点)的必要条件。




问题来了,说了这么多,KKT条件我还是没懂,你能简单的告诉我这有什么用吗?OK,KKT条件是这样的,在最优化问题中,KKT条件给出了问题最优解需满足的一些必要条件(函数为凸函数,则是充要条件)。在机器学习里面,最大熵模型和支持向量机都用到了KKT条件。在支持向量机中,KKT条件证明了:训练完成后,大部分训练样本都可以不保留,支持向量机最终模型只与支持向量有关,而跟远离分界面的样本无关。如下图,KKT条件并不能保证给我们找到最优解的办法,但可以给我们很好的解释原问题上的一些性质,比如支持向量。

支持向量机(二)





OK,KKT条件讲完了,接下来可以随意调用这些概念而不用解释了。


上一节我们说到,将原始求解问题转化为了广义拉格朗日的极大极小问题,并且,通过KKT条件可以证明,最终的模型只与支持向量有关,这也就是支持向量机名字的由来。


我们要解决的优化问题是:

支持向量机(二)

这是一个凸二次规划问题,是目标函数为二次函数时的特殊的凸规划问题,所谓凸规划问题可以百度之,他的意义在于局部最优解即是全局最优解。


通过拉格朗日乘子法,得到其对偶问题:

支持向量机(二)


接下来就是上述的广义拉格朗日的极大极小问题:

支持向量机(二)

可见,其满足KKT条件,求解这个问题用二次规划自然可以,台湾的林教授开发了求解函数包。当然,我们有更高效的SMO算法。









SMO算法是一种启发式算法,基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,我们可以选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。注意到,我们选取的变量,只要有一个不满足KKT条件,目标函数就会在迭代后减小。直观地说,就是KKT条件违背程度越大,变量更新后可能导致的目标函数值减幅越大。于是,SMO先选取违背KKT条件程度最大的那个变量,第二个应选择一个使目标函数减值最快的那个变量。但由于各变量对目标函数减值幅度的复杂度过高,一般第二个变量有约束条件自动确定。


如此,SMO算法包括两个部分:求解两个变量二次规划的解析方法和选择变量的启发式方法。


具体解析部分,全是数学运算和证明,我在学习时,算了一遍很头疼,只用记下其算法核心思路即可,即:先固定除某一参数之外的所有参数,然后再求该参数上的极值。由于有约束条件的存在,每次需要选择两个变量并固定其他参数,这样,在参数初始化后,SMO算法不断执行以下两个步骤直至收敛:

1 选取一对需要更新的变量ai,aj;

2 固定ai,aj以外的所有参数,求解两个变量的二次规划问题,获得更新后的ai,aj.







下面讲线性不可分线性不可分支持向量机。

比如说,给定一个特征空间上的训练数据集,训练数据集不是线性可分的,通常情况是,训练集数据中有一些特异点,除去这些特异点后,剩下的大部分样本点组成的集合是线性可分的。


线性不可分意味着某些样本点不能满足函数间隔大于等于1的约束条件。所以,为每个样本点引入一个松弛变量,使函数间隔加上松弛变量大于等于1。这样,约束条件变为:

支持向量机(二)

放松约束条件后,我们要对目标函数重新调整,对离群点进行惩罚,C表示离群点的权重,C越大表示离群点对目标函数影响越大,又称为惩罚参数。


同样我们采用对偶问题的解决来求解该问题的最优解,具体过程就不一一细述。


得到最终算法如下:

支持向量机(二)

这种情况下的支持向量比线性可分中支持向量要复杂的多。


支持向量机(二)









终于应该要到最后了,最后的最后讲述的应该是非线性支持向量机与核函数。

假设数据集输入所示:

支持向量机(二)


可以明显地看到,将坐标轴适当旋转后,数据集是通过一个平面分开来的。


支持向量机(二)

原始数据集是这样的:


支持向量机(二)



图中的两类数据,分别分布为两个圆圈的形状,不论是任何高级的分类器,只要它是线性的,就没法处理,SVM 也不行。因为这样的数据本身就是线性不可分的。

对于这个数据集,生成它的时候就是用两个半径不同的圆圈加上了少量的噪音得到的,所以,一个理想的分界应该是一个“圆圈”而不是一条线(超平面)。如果用  X1 和  X2 来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:


a1X1+a2X1^2+a3X2+a4X2^2+a5X1X2+a6=0


注意上面的形式,如果我们构造另外一个五维的空间,其中五个坐标的值分别为  Z1=X1,  Z2=X1^2,  Z3=X2,  Z4=X2^2,  Z5=X1X2,那么显然,上面的方程在新的坐标系下可以写作:


∑aiZi+a6=0


关于新的坐标  Z ,这正是一个 hyper plane 的方程!也就是说,如果我们做一个映射  ϕ:ℝ2→ℝ5 ,将  X 按照上面的规则映射为  Z ,那么在新的空间中原来的数据将变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是 Kernel 方法处理非线性问题的基本思想。


原始的数据时非线性的,我们通过一个映射 ϕ(⋅) 将其映射到一个高维空间中,数据变得线性可分了,这个时候,我们就可以使用原来的推导来进行计算,只是所有的推导现在是在新的空间,而不是原始空间中进行。当然,推导过程也并不是可以简单地直接类比的,例如,原本我们要求超平面的法向量 w ,但是如果映射之后得到的新空间的维度是无穷维的(确实会出现这样的情况,比如 Gaussian Kernel ),要表示一个无穷维的向量描述起来就比较麻烦。


先抛出非线性支持向量机的算法过程:

支持向量机(二)



一一解释之。

核函数。这样理解:在映射后的高维特征空间中,计算内积通常比较困难,因此提出核函数,代替我们计算高维甚至无穷维的内积。而内积如何选择呢?通常来说,只要一个对称函数所对应的核矩阵半正定,他就能作为核函数使用。换言之,任何一个核函数都隐式地定义了一个称为“再生核希尔伯特空间”的特征空间。


通常我们有以下几种常用的核函数:




最后,总结一下:对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。由于核函数的优良品质,这样的非线性扩展在计算量上并没有比原来复杂多少,这一点是非常难得的。当然,这要归功于核方法——除了 SVM 之外,任何将计算表示为数据点的内积的方法,都可以使用核方法进行非线性扩展。






至此,本篇支持向量机讲述完毕。此时应该有课后习题来练练手。比如西瓜书后面的习题,又比如李航的课后习题,其中我选做了这两道题。分享一下我做的这两道题,有兴趣的同学可以做一下~





PS:


周末牺牲睡眠时间,早起来图书馆学习,完全忽略掉周五下午在健身房的全身酸痛。不过开心的是,终于搞完了SVM这一节,然而Matlab还没写。。。


哦对了我好像学习都忘了,现在正是WE比赛,世界赛预选赛第一天。。。什么都不说了,我去看比赛了。。

以上是关于支持向量机的主要内容,如果未能解决你的问题,请参考以下文章

支持向量机

支持向量机原理 线性支持向量机的软间隔最大化模型

支持向量机

什么是支持向量机?

支持向量机

支持向量机原理线性不可分支持向量机与核函数