在机器学习几大算法中,支持向量应该算是应用最广泛的,但是却也是理解最困难的。相对于其他的算法而言,这个算法的逻辑可能并不难难,难的是它的内部逻辑转换,如何转化求解最大超平面。其实最近我在想,机器学习有时候感觉理解起来并不太难,有时候相对于其他知识来说,比如电磁场,固体物理等,简直是最简单的,甚至感觉某些人把这个学科神话了。但是这句话我是说不出口的,因为我只是学了个皮毛。学了很多,却总是忘记,因此,在之后的博客中,我将尽可能的详细记录,以便之后自己回顾复习,又花了两天时间,发现这个smo是难以理解,感觉坑有点深,最近事情有比较多,暂且先放一放,转载一篇。


  • 前言:对于这一章,有许多的关键点需要掌握,而且每一个关键点都不简单。从前往后一次是:1、什么是支持向量;2、将这种问题转化为对偶问题的凸二次规划问题;3、为了解决速度慢的问题,新的算法使用了SMO算法;4、进一步优化SMO,提出Platt SMO算法。
  • 1、支持向量:相对于逻辑回归而言,SVM其实也是通过一条线段来分割平面,所不同的是,支持向量机的函数刻度不同,SVM找的是离超平面距离最小的“几个”点(几个而不是全部),使其距离最大,即maxmin
  • 2、maxmin这种问题是一种带约束条件的优化问题,可以使用《工程优化》中的知识来求解,即拉格朗日乘子法,引入拉格朗日乘子法后,可以将这个问题转化为对偶形式的凸二次规划问题
  • 3、尽管通过一般的方法,也能够解决凸二次规划问题,但是这种方式太慢,大数据情况下不太实际。1999年微软研究院提出了一种SMO算法,这种算法,通过每次只优化一对alpha值来进行迭代,从而求得最优化的值,迭代过程尽量趋向于不满足kkt条件的(kkt条件是凸二次规划的条件,具体是什么,这方面没有仔细看,理解可能有误)。
  • 4、但是通过观察SMO算法,发现简化的SMO其实存在许多重复的计算,因此,提出了一种启发式方法(启发式,即基于当前的条件选择下一步最优的,每次只知道下“一”步的策略)。其他逻辑和SMO一样,不同的是alpha选择的方式,两种方式交替进行:一种是在所有的数据集上单遍扫描,另一种是只在非边界alpha进行单遍扫描(其中很多alpha值是在边界上)
  • 多说一句,听起来很简单,但是逻辑很复杂

后面的暂且转载:链接

11 SMO优化算法(Sequential minimal optimization)

SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。

我拜读了一下,下面先说讲义上对此方法的总结。

首先回到我们前面一直悬而未解的问题,对偶函数最后的优化问题:

机器学习实战-6支持向量机

要解决的是在参数机器学习实战-6支持向量机上求最大值W的问题,至于机器学习实战-6支持向量机机器学习实战-6支持向量机都是已知数。C由我们预先设定,也是已知数。

按照坐标上升的思路,我们首先固定除机器学习实战-6支持向量机以外的所有参数,然后在机器学习实战-6支持向量机上求极值。等一下,这个思路有问题,因为如果固定机器学习实战-6支持向量机以外的所有参数,那么机器学习实战-6支持向量机将不再是变量(可以由其他值推出),因为问题中规定了

机器学习实战-6支持向量机

因此,我们需要一次选取两个参数做优化,比如机器学习实战-6支持向量机机器学习实战-6支持向量机,此时机器学习实战-6支持向量机可以由机器学习实战-6支持向量机和其他参数表示出来。这样回带到W中,W就只是关于机器学习实战-6支持向量机的函数了,可解。

这样,SMO的主要步骤如下:

机器学习实战-6支持向量机

意思是,第一步选取一对机器学习实战-6支持向量机机器学习实战-6支持向量机,选取方法使用启发式方法(后面讲)。第二步,固定除机器学习实战-6支持向量机机器学习实战-6支持向量机之外的其他参数,确定W极值条件下的机器学习实战-6支持向量机机器学习实战-6支持向量机机器学习实战-6支持向量机表示。

SMO之所以高效就是因为在固定其他参数后,对一个参数优化过程很高效。

下面讨论具体方法:

假设我们选取了初始值机器学习实战-6支持向量机满足了问题中的约束条件。接下来,我们固定机器学习实战-6支持向量机,这样W就是机器学习实战-6支持向量机机器学习实战-6支持向量机的函数。并且机器学习实战-6支持向量机机器学习实战-6支持向量机满足条件:

机器学习实战-6支持向量机

由于机器学习实战-6支持向量机都是已知固定值,因此为了方面,可将等式右边标记成实数值机器学习实战-6支持向量机

机器学习实战-6支持向量机

机器学习实战-6支持向量机机器学习实战-6支持向量机异号时,也就是一个为1,一个为-1时,他们可以表示成一条直线,斜率为1。如下图:

机器学习实战-6支持向量机

横轴是机器学习实战-6支持向量机,纵轴是机器学习实战-6支持向量机机器学习实战-6支持向量机机器学习实战-6支持向量机既要在矩形方框内,也要在直线上,因此

机器学习实战-6支持向量机机器学习实战-6支持向量机

同理,当机器学习实战-6支持向量机机器学习实战-6支持向量机同号时,

机器学习实战-6支持向量机机器学习实战-6支持向量机

然后我们打算将机器学习实战-6支持向量机机器学习实战-6支持向量机表示:

机器学习实战-6支持向量机

然后反代入W中,得

机器学习实战-6支持向量机

展开后W可以表示成机器学习实战-6支持向量机。其中a,b,c是固定值。这样,通过对W进行求导可以得到机器学习实战-6支持向量机,然而要保证机器学习实战-6支持向量机满足机器学习实战-6支持向量机,我们使用机器学习实战-6支持向量机表示求导求出来的机器学习实战-6支持向量机,然而最后的机器学习实战-6支持向量机,要根据下面情况得到:

机器学习实战-6支持向量机

这样得到机器学习实战-6支持向量机后,我们可以得到机器学习实战-6支持向量机的新值机器学习实战-6支持向量机

下面进入Platt的文章,来找到启发式搜索的方法和求b值的公式。

这边文章使用的符号表示有点不太一样,不过实质是一样的,先来熟悉一下文章中符号的表示。

文章中定义特征到结果的输出函数为

机器学习实战-6支持向量机

与我们之前的机器学习实战-6支持向量机实质是一致的。

原始的优化问题为:

机器学习实战-6支持向量机

求导得到:

机器学习实战-6支持向量机

经过对偶后为:

机器学习实战-6支持向量机

s.t. 机器学习实战-6支持向量机

机器学习实战-6支持向量机

这里与W函数是一样的,只是符号求反后,变成求最小值了。机器学习实战-6支持向量机机器学习实战-6支持向量机是一样的,都表示第i个样本的输出结果(1或-1)。

经过加入松弛变量机器学习实战-6支持向量机后,模型修改为:

机器学习实战-6支持向量机

机器学习实战-6支持向量机

由公式(7)代入(1)中可知,

机器学习实战-6支持向量机

这个过程和之前对偶过程一样。

重新整理我们要求的问题为:

机器学习实战-6支持向量机

与之对应的KKT条件为:

机器学习实战-6支持向量机

这个KKT条件说明,在两条间隔线外面的点,对应前面的系数机器学习实战-6支持向量机为0,在两条间隔线里面的对应机器学习实战-6支持向量机为C,在两条间隔线上的对应的系数机器学习实战-6支持向量机在0和C之间。

将我们之前得到L和H重新拿过来:

机器学习实战-6支持向量机

机器学习实战-6支持向量机

之前我们将问题进行到这里,然后说将机器学习实战-6支持向量机机器学习实战-6支持向量机表示后代入W中,这里将代入机器学习实战-6支持向量机中,得

机器学习实战-6支持向量机

其中

机器学习实战-6支持向量机

这里的机器学习实战-6支持向量机机器学习实战-6支持向量机代表某次迭代前的原始值,因此是常数,而机器学习实战-6支持向量机机器学习实战-6支持向量机是变量,待求。公式(24)中的最后一项是常数。

由于机器学习实战-6支持向量机机器学习实战-6支持向量机满足以下公式

机器学习实战-6支持向量机

因为机器学习实战-6支持向量机的值是固定值,在迭代前后不会变。

那么用s表示机器学习实战-6支持向量机,上式两边乘以机器学习实战-6支持向量机时,变为:

机器学习实战-6支持向量机

其中

机器学习实战-6支持向量机

代入(24)中,得

机器学习实战-6支持向量机

这时候只有机器学习实战-6支持向量机是变量了,求导

机器学习实战-6支持向量机

如果机器学习实战-6支持向量机的二阶导数大于0(凹函数),那么一阶导数为0时,就是极小值了。

假设其二阶导数为0(一般成立),那么上式化简为:

机器学习实战-6支持向量机

将w和v代入后,继续化简推导,得(推导了六七行推出来了)

机器学习实战-6支持向量机

我们使用机器学习实战-6支持向量机来表示:

机器学习实战-6支持向量机

通常情况下目标函数是正定的,也就是说,能够在直线约束方向上求得最小值,并且机器学习实战-6支持向量机

那么我们在(30)两边都除以机器学习实战-6支持向量机可以得到

机器学习实战-6支持向量机

这里我们使用机器学习实战-6支持向量机表示优化后的值,机器学习实战-6支持向量机是迭代前的值,机器学习实战-6支持向量机

与之前提到的一样机器学习实战-6支持向量机不是最终迭代后的值,需要进行约束:

机器学习实战-6支持向量机

那么

机器学习实战-6支持向量机

在特殊情况下,机器学习实战-6支持向量机可能不为正,如果核函数K不满足Mercer定理,那么目标函数可能变得非正定,机器学习实战-6支持向量机可能出现负值。即使K是有效的核函数,如果训练样本中出现相同的特征x,那么机器学习实战-6支持向量机仍有可能为0。SMO算法在机器学习实战-6支持向量机不为正值的情况下仍有效。为保证有效性,我们可以推导出机器学习实战-6支持向量机就是机器学习实战-6支持向量机的二阶导数,机器学习实战-6支持向量机机器学习实战-6支持向量机没有极小值,最小值在边缘处取到(类比机器学习实战-6支持向量机),机器学习实战-6支持向量机时更是单调函数了,最小值也在边缘处取得,而机器学习实战-6支持向量机的边缘就是L和H。这样将机器学习实战-6支持向量机机器学习实战-6支持向量机分别代入机器学习实战-6支持向量机中即可求得机器学习实战-6支持向量机的最小值,相应的机器学习实战-6支持向量机还是机器学习实战-6支持向量机也可以知道了。具体计算公式如下:

机器学习实战-6支持向量机

至此,迭代关系式出了b的推导式以外,都已经推出。

b每一步都要更新,因为前面的KKT条件指出了机器学习实战-6支持向量机机器学习实战-6支持向量机的关系,而机器学习实战-6支持向量机和b有关,在每一步计算出机器学习实战-6支持向量机后,根据KKT条件来调整b。

b的更新有几种情况:

机器学习实战-6支持向量机

来自罗林开的ppt

这里的界内指机器学习实战-6支持向量机,界上就是等于0或者C了。

前面两个的公式推导可以根据机器学习实战-6支持向量机

和对于机器学习实战-6支持向量机机器学习实战-6支持向量机的KKT条件推出。

这样全部参数的更新公式都已经介绍完毕,附加一点,如果使用的是线性核函数,我们就可以继续使用w了,这样不用扫描整个样本库来作内积了。

w值的更新方法为:

机器学习实战-6支持向量机

根据前面的

机器学习实战-6支持向量机

公式推导出。

12 SMO中拉格朗日乘子的启发式选择方法

终于到了最后一个问题了,所谓的启发式选择方法主要思想是每次选择拉格朗日乘子的时候,优先选择样本前面系数机器学习实战-6支持向量机机器学习实战-6支持向量机作优化(论文中称为无界样例),因为在界上(机器学习实战-6支持向量机为0或C)的样例对应的系数机器学习实战-6支持向量机一般不会更改。

这条启发式搜索方法是选择第一个拉格朗日乘子用的,比如前面的机器学习实战-6支持向量机。那么这样选择的话,是否最后会收敛。可幸的是Osuna定理告诉我们只要选择出来的两个机器学习实战-6支持向量机中有一个违背了KKT条件,那么目标函数在一步迭代后值会减小。违背KKT条件不代表机器学习实战-6支持向量机,在界上也有可能会违背。是的,因此在给定初始值机器学习实战-6支持向量机=0后,先对所有样例进行循环,循环中碰到违背KKT条件的(不管界上还是界内)都进行迭代更新。等这轮过后,如果没有收敛,第二轮就只针对机器学习实战-6支持向量机的样例进行迭代更新。

在第一个乘子选择后,第二个乘子也使用启发式方法选择,第二个乘子的迭代步长大致正比于机器学习实战-6支持向量机,选择第二个乘子能够最大化机器学习实战-6支持向量机。即当机器学习实战-6支持向量机为正时选择负的绝对值最大的机器学习实战-6支持向量机,反之,选择正值最大的机器学习实战-6支持向量机

最后的收敛条件是在界内(机器学习实战-6支持向量机)的样例都能够遵循KKT条件,且其对应的机器学习实战-6支持向量机只在极小的范围内变动。

至于如何写具体的程序,请参考John C. Platt在论文中给出的伪代码。

13 总结

这份SVM的讲义重点概括了SVM的基本概念和基本推导,中规中矩却又让人醍醐灌顶。起初让我最头疼的是拉格朗日对偶和SMO,后来逐渐明白拉格朗日对偶的重要作用是将w的计算提前并消除w,使得优化函数变为拉格朗日乘子的单一参数优化问题。而SMO里面迭代公式的推导也着实让我花费了不少时间。

对比这么复杂的推导过程,SVM的思想确实那么简单。它不再像logistic回归一样企图去拟合样本点(中间加了一层sigmoid函数变换),而是就在样本中去找分隔线,为了评判哪条分界线更好,引入了几何间隔最大化的目标。

之后所有的推导都是去解决目标函数的最优化上了。在解决最优化的过程中,发现了w可以由特征向量内积来表示,进而发现了核函数,仅需要调整核函数就可以将特征进行低维到高维的变换,在低维上进行计算,实质结果表现在高维上。由于并不是所有的样本都可分,为了保证SVM的通用性,进行了软间隔的处理,导致的结果就是将优化问题变得更加复杂,然而惊奇的是松弛变量没有出现在最后的目标函数中。最后的优化求解问题,也被拉格朗日对偶和SMO算法化解,使SVM趋向于完美。

另外,其他很多议题如SVM背后的学习理论、参数选择问题、二值分类到多值分类等等还没有涉及到,以后有时间再学吧。其实朴素贝叶斯在分类二值分类问题时,如果使用对数比,那么也算作线性分类器。

转载止于此

相关文章:

  • 2021-11-03
  • 2022-01-06
  • 2021-09-01
  • 2021-05-28
  • 2021-11-19
  • 2021-10-01
  • 2021-06-02
猜你喜欢
  • 2021-11-30
  • 2021-12-10
  • 2021-11-19
  • 2021-11-18
  • 2021-11-07
  • 2022-12-23
  • 2021-06-11
相关资源
相似解决方案