8 Support vector machine(3)

本学习笔记参考自Andrew的机器学习课程(点此打开), 内容来自视频以及其讲义, 部分内容引用网友的学习笔记,会特别注明


本集内容


1. 核函数(kernels)
2. 软间隔(Soft Margin)
3. SMO算法


核函数


特征映射


首先在前面第三节内容中,有一个面积—房价关系的例子,如果只考虑面积一个特征,那么我们用线性规划得到的结果是一条直线,但事实上这条直线的表现是欠拟合的。更符合实际情况的或许是一个二次曲线,那么要从一个特征通过线性规划得到一个回归结果为二次曲线的话,我们需要对这一个特征x(x表示面积)映射到更高维的(x, x^2),这样去拟合就能得到二次曲线。这说明一个学习问题有时候为了得到更好的拟合效果,我们需要将原始特征映射到更高纬度上,原始特征称作问题的属性,映射后的向量才叫做特征。这举一个简单例子,x表示一个问题的属性,是一维的,用φ表示特征映射,映射得到三维特征向量:


所以在上一节推导出来的对偶优化的结果需要把所有的x替换为φ(x),所有内积 <x,z>变成<φ(x),φ(z)>。事实上需要特征映射不只是为了更好的拟合模型,后面会介绍到很多原始问题是线性不可分的,但往往经过高纬映射后就线性可分了(即存在一个超平面能够把正负样本分开)。

核函数定义以及举例


为什么有核函数,是因为映射后的向量往往维度过高,甚至是无限维,计算效率非常低,引入核函数可以能够漂亮的解决高纬度向量内积计算效率问题。核函数定义如下:

也就是x和z的内积<x,z>可以替换为K(x, z)。核函数为什么能够高效率的解决高纬度向量内积?我们先看一个核函数的例子,假设:


把里面给展开得到:

根据前面核函数定义K(x,z) = φ(x) T φ(z),先假设假设x,z是3维的,即n = 3,我们对比得出特征映射:

现在我们整体来看一下计算效率的问题,如果我们直接计算映射到高纬向量的内积,即φ(x) T φ(z),可以看到时间复杂度是O(n^2),但是如果我们直接计算核函数 (x T z)^2 我们能够得到同样的计算结果,但是时间复杂度为O(n)。再举例一个核函数:

仍然假设n = 3,那么对比得到的特征映射为:

可以看到现在有二阶项,一阶项,并且有c可以控制一阶项和二阶项的相对权重。更一般的,对核函数,所对应的特征映射有维(这个一直不太清楚怎么回事,因为对于上面的例子n=3,d=2,按这个结果特征映射应该是c(5,2) = 10才对,没弄明白),如果计算映射后向量的内积则需要O(n^d),而计算核函数只需要O(n)时间,通过核函数,我们甚至不需要去显示的表示出映射后的高纬度向量,就能以很高的效率计算到了高纬度的向量内积。

现在考虑另一类核函数,我们先直观性的了解一下该核函数。很多时候我们认为两个特征向量 φ(x) ,φ(z)相似的话(按照角度度量即向量夹角很小,也可按照距离度量),就把它们分为一类,它们对应的内积值也很大。如果不相似的话,两个向量夹角比较大,或者距离比较小,内积值就小。也就是当特征向量相似,我们把核函数K(x,z) = φ(x) T φ(z)值设计的很大;当特征向量不相似,我们把该核函数值设计的很小,按照这个直观的理解,我们有如下核函数,可以两个向量的距离来衡量相似性:

当x,z相似时,K(x, z)接近1,当不相似时,K(x, z)接近0。这个核函数成为高斯核函数,它所对应的特征映射是无限维的。

核函数的有效性


前面举了若干个核函数的例子,我们只定义了它们,并不知道是否能够作为核函数。一个核函数是否有效这个问题可以等价于对于一个核函数,是否能够找到一个特征映射使得集合K(x,z) = φ(x) T φ(z)。下面讨论这个问题。
先定义核矩阵,假设由m个训练样本,即,定义一个m*m的矩阵K,令



这个矩阵叫做核矩阵。如果核函数是有效的话,我们看到K是对称的


在看一个性质,对任意的向量z有:

这说明核矩阵K是半正定的,上面的过程说明:
核函数是有效的 => 核函数所对应的核矩阵是对称半正定的
核矩阵K是对称半正定的是一个必要条件,但事实上,它也是一个充分条件,通过Mercer定理可以得到:
核函数所对应的核矩阵是对称半正定的 => 核函数是有效的
Mercer定理:
函数K是R n × R n → R,如果K是有效的核函数,当且仅当对于所有训练样本,所对应的核矩阵是对称半正定的。
这样通过Mercer定理,我们不需要去寻找是否存在一个特征映射 φ来证明某个核函数是有效的,我们只需要遍历所有样本,求得对应的核矩阵,并判断是否为对称半正定矩阵即可。到此,我们可以看到核函数在SVM中是非常重要的,它提高了样本的线性可分性,决定了SVM非线性分类的处理能力!事实上,核函数不止在SVM中很重要,在其他地方,如果出现了向量的内积,都可以用上这一方法,将原有向量映射到更高维,然后用核方法计算内积。


规则化和不可分情况


在前面的讨论中,一直都是假设所有样本是线性可分的,但实际情况即便我们将原问题属性映射到了高维特征向量上的确提高了样本的线性可分性,但不能完全确保就一定线性可分。先看一个例子:

左边的是一个最优的间隔分类器,当在样本中添加一个异常的样本值如右图,按照算法的求解得到最优间隔分类器会旋转一个角度,但我们并不想因为这样一个不可信的样本就使得超平面旋转这样一个角度,并且当该异常的样本点落在更上面的话,该问题就非线性可分的了。下面要讨论改进的模型以解决非线性可分的样本和噪声敏感问题。模型改进如下(使用 L1规则化):


该模型所得到的结果算法也叫做L1 norm软间隔SVM(Soft Margin SVM)。ξ i称为松弛变量,从约束条件看,函数间隔可以取负数,但在前面介绍过知道函数间隔取负数表示分类不正确(即误分样本点),所以通过令 某些ξ i大于1,使的函数间隔小于0,就能允许该算法对一些样本进行错误分类。从目标函数看,现包括距离函数和松弛变量误差,对于函数间隔为负数或者小于1的(这表明ξ i不为0)会使目标函数增加一个惩罚项,使目标函数增大。而权重C用来调和距离函数和松弛变量误差,如果容忍噪声的话,就下调C,这样让噪声在目标函数中所占权重变小。如果需要严格、噪声小的模型,就调大C。通过对C进行控制,可以实现对模型的控制。这里我的理解,用上面最右边的图举例说明:没有噪声时,我们得到的结果是图中的虚线,当出现了一个噪声时,我们通过模型会得到噪声样本点的函数间隔小于1,它对应的松弛变量ξ i不为0,这个时候如果C值调整的足够小,假设极端情况为0,那么噪声在目标函数中所提供的值为0,也就是目标函数与没有噪声时没有变化,为了得到几何间隔最大的超平面,我们不得不得到实线的结果,这表明我们考虑了噪声的存在,允许它对模型造成改变,即下调C,我们容忍了噪声。那么考虑增大C,我们最后的目标函数会增大,记得目标函数越小代表着几何间隔越大,也就是现在求出的几何间隔会比原来算法执行得到的结果较小,原来算法执行的结果是实线,即在支持向量中距离超平面的距离已经最大化了,现在得到的几何间隔,通过合适的C,可以使结果为虚线,因为虚线肯定没有实线对应的几何间隔大,这样看起来我们像忽略了噪声点,不允许它对模型造成任何影响,即增大C,我们得到了噪声小、较严格的模型。并且该优化问题也是一个凸优化问题。
现在我们和以前一样,为了求解该模型,我们需要找到一般化的拉格朗日函数,并找到拉个朗日对偶优化问题(这样能帮助我们求解模型参数)一般化的拉格朗日函数:

这里 α i ,r i 是拉格朗日乘数,下面要找其对偶优化,我们是先在w, b上求得L(w,b,ξ,α,r)的最小值,即关于α的函数,这需要我们分别对w, b求偏导,并令其为0。然后将w, b带入L(w,b,ξ,α,r)得到:

我们看到与没有规则化之前的相比,多了α i≤C,这里b*求值公式也发生了变化,下面会再介绍,KKT中对偶互补条件变化如下:


下面就只差了求解最后的对偶优化问题了。



座标上升法


下面考虑这样一个问题:

这里的α i没有任何约束,座标上升法可以求解这个问题,描述如下:

其基本思想是每次循环只把某一个参数当做变量,使其他参数都固定,求解函数值最大对应时的参数,内部相当于一个一元函数,执行起来非常高效。就按照这种方式知道收敛。下面举例说明该过程:

该图是某个二次函数的各个等高线,座标轴表示两个参数,起始点是(2, -2),先固定横轴变量,对纵轴变量进行调整,使函数获得最大值,相应的纵轴所在的参数从-2变化为1,然后又固定纵轴变量,调整横轴变量,使横轴从2变化0.5,这样反复执行,直到收敛。



SMO算法


现在考虑最后那个对偶优化的求参数的问题,由于存在约束条件,我们会将座标上升进行一些调整应用到SVM中。我们要优化的问题是这样的:

我们先直接照搬座标上升,假设选取α 1进行调整,固定其他所有参数,但是我们发现第二个约束条件可变化为:

这样当固定其他参数时,α 1就已经固定了,如果调整α 1,那么结果所有参数肯定不满足约束条件,为此需要修改算法,考虑一次调整两个变量。SMO算法简要步骤如下:

由于内部参数调整十分高效,所以整个SMO算法是高效的,下面简要推导内部是如何进行调整的。举例调整α 1 ,α 2,由于约束条件,我们变化如下:

由于y^(i)要么取值为1要么为-1,所以α1,α2的关系是线性的,又由于约束条件0 ≤ α i ≤ C ,α1,α2会落在一个矩形区域内,关于α1,α2二维简图如下:

图表明α1,α2既要落在矩形里面,又要在直线上。以图中的直线为例,α1在[0,C]的范围时,α2是有更严格的限制的,从图中看到,L ≤ α 2 ≤ H,这样才能保证α1,α2既要落在矩形里面,又要在直线上。即不论直线是什么样的,α1在[0,C]的范围时都会存在一个L,H来限制α2(L ≤ α 2 ≤ H),使得点落在矩形内又在直线上。
我们在上面的方程两边同时乘以y^(1)可以得到如下:

然后带入到函数W得到:

事实上,经过推导,发现这是一个关于α 2的一元二次方程,即方程最终形式可以化为。如果不考虑L ≤ α 2 ≤ H,直接求解出该最优参数是非常快的,所以这是SMO算法高效的一个原因。最后加上α 2的约束条件(不满足约束时,下面进行了裁剪),我们得到解:


这一节没有介绍如何选取α1,α2的方法,以及对b*的推导,有兴趣的以后可以看看 Platt的论文,名字叫Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines,也可以在网上搜一搜JerryLead的学习笔记,他写的特别详细,让人佩服啊

到此SVM全部就讲完了,有时间来总结一下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章