吴恩达机器学习笔记-SVM(cs229)

下面是一个最简单的SVM:

                                                          吴恩达机器学习笔记-SVM(cs229)_第1张图片

  • 分类算法:支持向量机(SVM)是一个分类算法(机器学习中经常把算法称为一个“机器”),它的目标是找到图中实线所表示的决策边界,也称为超平面(Hyperplane)
  • 支持向量(Support vectors):支持向量就是图中虚线穿过的数据点(两个×与一个O),直观上来看,它们确定了超平面的位置——超平面与过同一类的两个支持向量(两个×)的直线平行,并且两类支持向量到超平面的距离相等
  • 与logistic回归的对比:SVM与logistic回归用的是相同的模型,但是处理方式不一样——logistic回归用概率的方式求解模型(最大似然估计),SVM从几何的角度解析;另外在logistic回归中,每一个数据点都会对分类平面产生影响,在SVM中它却只关注支持向量(如果支持向量无变化,增加或者删除一些远处的数据点,产生的超平面还是一样的)——所以产生了这两个不同的算法,但是它们还是比较相似的。

1、SVM的推导

1.1、起源

SVM与logistic回归使用了相同的模型,现在来回顾一下熟悉的logistic回归模型:

                                    

其中:

                                                   


并且其图像如下图:

                                                  吴恩达机器学习笔记-SVM(cs229)_第2张图片

图像的输出是“分类结果g(z)是1的概率”,它的取值范围是(0,1),一般来说以0.5为界,当g(z)是1的概率大于0.5的时候,把x分类为1,当g(z)是1的概率小于0.5的时候,把x分类为0,这样,虽然它的直接输出是(0,1)之间的概率,却有感知器那样的分类效果。
同时可以看到当z在0附近时,输出概率在0.5附件徘徊,而且比较敏感,但是当z=θTx>>0时它的输出很接近1,当z=θTx<<0时它的输出很接近0。所以如果我们能够让z>>0或者z<<0,我们就会更加确信这个样本被正确分类了。
换句话说,如果把z=0这条直线当做决策边界,那么数据点z距离这条直线越远,就越不可能被分错。

SVM就是从几何的角度,在这方面下功夫的。

 

下面是在logistic回归模型下,因为SVM这个算法的特点而引起的符号改变:

                                         

截距b就是截距θ0,向量w就是除了θ0外,剩下的向量θ,而且这里的向量x应该是差了一个x0=1(xθ,θ∈Rn+1,xw,w∈Rn),但是不影响…它们表达的意思是一样的,只是换了些符号而已。
另外,这里的g(z)不再是式(2)中的形式,而是:

                                                   

式(3)与式(5)就是SVM模型了,参数是θ与b,当这两个参数确定了,我们就可以做出分类超平面,对数据进行分类。

对同一个模型,logistic模型用概率的方式求解,下面就要引入函数间隔与几何间隔来从几何的角度来解析SVM了。

 

1.2、函数间隔(Functional margins)与几何间隔(Geometric margins)

给定一个训练样本(x(i),y(i)),我们将其函数间隔定义为:

                                                       

函数间隔的作用有两个。
一个是确认样本点有没有被正确分类
由式(3)与式(5)可以知道,y(i)的取值为{1,−1},那么在w,b确定了,并且样本被正确分类的情况下,wTx+b与y(i)是同号的,即γ^(i)=∣∣(wTx+b)∣∣,所以当函数间隔γ^(i)>0,即γ^(i)是正数的时候,我们就认为这个点被正确地分类了(错误分类时γ^(i)<0)。
另一个是衡量该样本点被正确分类的确信度:由sigmoid函数g(z)我们注意到,一个点离超平面越远,其输出就越接近1,同样地,γ^(i)越大,这个样本被分对的也确信度越大。

进一步地,相比只有一个训练样本的情况,如果给定一个训练集S={(x(i),y(i);i=1,2,⋯,m)},那么整个训练集合的函数间隔为:

                                                

有了函数间隔我们就可以去选择超平面了,在判断数据点有没有被正确分类这一点上,函数间隔没有问题。当所有样本点的函数间隔都是正数的时候,它们就全都被正确分类了(在这里讨论的是数据集线性可分的情况,如图一所示)。
需要注意的是,此时的超平面不一定就是最优的,所以我们还要最大化其被分类正确的确信度,这时候就需要依赖到函数间隔的第二个作用了。

但是在使得确信度最大这一点上,函数间隔却存在着缺陷。我们希望在样本点全部被正确分类的前提下,它们被分对的确信度最大,即让γ^尽可能地大。(也就是要找到离超平面最近的两个分类的点,并且保证它们和超平面的距离最大

可是只要成比例地改变w与b,比如把它们变成2w与2b,超平面并没有发生改变(wx+b=0和2wx+2b=0等价),但是函数间隔γ^却变成了原来的两倍,这意味着,我们可以成比例地增大w与b,使得函数间隔γ^变得无限大。这显然没有意义,因为超平面的位置并没有发生改变。(相当于函数间隔增大了,但是超平面没有变,反而把最近的点放远了)

这时候就轮到几何间隔出场了,它是增加了约束的函数间隔,使函数间隔变得唯一,用符号γ表示。
直观上来看几何间隔是样本点到超平面的距离
此时改变几何间隔就能够移动超平面,同时几何间隔仍然能反映样本被正确分类的确信度,所以对几何间隔的最大化,就是对超平面的最优化。

下面我们借助图三来寻找几何间隔:

                                         吴恩达机器学习笔记-SVM(cs229)_第3张图片

设点B是向量x,点B在超平面上,点A为样本点向量x(i)。
因为点A与点B在法向量w上的距离就是几何间隔γ(i),所以我们有:

                                           

吴恩达机器学习笔记-SVM(cs229)_第4张图片

所以说几何间隔是增加了约束的函数间隔,是对函数间隔的完善,这时如果成比例地改变w与b,几何间隔是不会改变的。此时只要对超平面进行处理,即确定最优超平面的位置。

1.3、最优间隔分类器(The optimal margin classifier)

把图一再贴上来一次,并且默认上方的叉叉为正实例,下方的圈圈为负实例:

                                                              吴恩达机器学习笔记-SVM(cs229)_第5张图片

然后我们之前的几何间隔,函数间隔什么的都是点到平面的距离,现在我们定义一个超平面到训练集间隔为这个超平面到训练集的每个点的几何距离最小的距离。

这个平面到数据集的间隔就是我们一开始直观感受时所需要的那个衡量远近的数值。

从这个意义上来说,其实我们在衡量一个平面到数据集的“远近”时,我们其实只需要看的是到所有的样本点距离中最近的那个。

 

所以对于一个超平面(ω,b)我们可以得到它到给定训练集的间隔为:

 

这个式子很容易理解,如果放进min里面,即,就表示在每个几何间隔中找最小的。因为和具体样本点无关所以被提了出来,然后后面的

就是表示训练集中每个点到这个超平面的函数间隔中的最小值。

这里还需要理解的是,如果给定了这个分类超平面,那么这个超平面到训练集的距离就定了,因为训练集是给定了每个点是固定的。所以超平面如果调整,这个间隔就会变化。

所以我们现在需要找到这么一个超平面,它不但可以正确分类,而且它到训练集的间隔是所有可正确分类的超平面中最大的。这也是我们一开始提出的那个直观上的问题。

 

然后我们就可以得到我们的最最原始的优化目标了(即找到最近样本的同时,还要使样本与超平面的距离最大):

 

(写到这里我在想一个问题,如何能保证按照这个优化目标找出来的超平面它正好到正样本集和负样本集的间隔是一样的。经过思考后发现,这个已经被包含在了这个优化目标内部。可以这么解释:因为其实我觉得我们可以把平面优化分为ω的最优化和b的最优化,对于相同的ω,不同的b的平面都是平行的。当ω固定时,这时一个正样本到这个平面的距离和一个负样本到这个平面的距离之和的最小值也固定了!

但是不同的b会导致不同,不同的b会导致平面保持相同的“斜率”平移。发现因为这里取最小值。所以我们假设这个平面从正负样本的正中间往正样本方向偏离一小段距离,那么可能是到正样本距离变小,到负样本的距离变大,但是注意到是取最小值,所以这个最小值就会从原来的1/2变小,并不是我们最后的最优的结果,所以从这个角度看,直线位于正中间是最优的。)

得到这个最最原始的优化目标后,直接尝试解决它是很复杂的。我们还可以进一步简化。注意到如果我们对ω和b同时进行缩放,即,然后把kω和kb代入原来的式子,会发现对原来的优化问题并没有影响,因子都被约了。那我们就可以通过这个特性来简化式子。

所以我们不如就让这个为1,即我们通过同时缩放ω和b让距离超平面最近的那些样本点的函数间隔为1,这样调整后,不仅对原来的优化问题没有影响,而且还能简化计算。

(这里缩放需要理解到位,同时缩放ω和b,会改变每个样本点到这个超平面的函数间隔,但是并不会改变每个样本点到这个超平面的几何间隔,所以我们不如就让距离这个超平面最近的那些点的函数间隔为1,简化了计算,但是也带来了约束

但是既然设置了=1,那么就意味着增加了约束

对于离超平面最近的那些样本点,它们的

对于其他的样本点,它们的

所以现在可以说:当可以找到一个超平面正确分类给定的训练集时,每个样本点的函数间隔满足:

 

这个就是简化所带来的约束条件

现在我们看一看简化后的优化式子变成了:

 

约束就是上面的对于每个样本点满足

但是我们一般把这个优化问题转化为和它等价的:

 

而且一般会加上系数1/2,书上说是为了之后推导的方便。

所以现在我们的优化问题变成了:

 

  其中i=1,2,3...m

接下来就可以对这个函数进行求解了。

 

 

2、SVM的转换与优化

2.1、SVM转换——引入拉格朗日对偶与KKT条件

2.1.1、目标函数转化为原始问题(Primal problem)

现在我们把吴恩达机器学习笔记-SVM(cs229)_第6张图片这个目标函数式改写一下:

                                                       

对于这种含有不等式约束条件的优化问题可以引入拉格朗日乘子法,引入拉格朗日乘子αi≥0(i=1,2,⋯,n),得到如下原始问题:

                                                                 吴恩达机器学习笔记-SVM(cs229)_第7张图片

下标p被称为原始问题,即:

                   

上述式子和原始问题是等价的。这是因为有被称为栅栏(Barrier)的带有拉格朗日乘子的那个加项maxα≥0∑mi=1αig(wi)的存在,它的作用是将不可行域的w排除掉,只留下了可行域内的w,这两个式子一样,“在的约束下,对(即f(w))求最小值”的意思。

先分析不可行域的情况

                       

结合起来就是:

                                                                    

所以引入拉格朗日乘子的原始问题式子 与目标函数式是等价的:

                                                        

2.1.2、原始问题与对偶问题(Dual problem)的关系

对于原始问题有:

                                                             

下标D被称为对偶问题,在上式中将minw,b与maxα≥0的顺序交换一下就变成了对偶问题:

                                                             

弱对偶性(Weak duality)

对于一对原始问题与对偶问题,如果它们都存在最优解,并且分别将其表示为,那么它们必定有如下关系:

                                                                                   

这被称为弱对偶性。有如下证明:

                                                

强对偶性(Strong duality)

对于一对原始问题与对偶问题,w∗,b∗是原始问题的解,α∗是对偶问题的解,并且它们满足KKT条件,有d∗=p∗。这被称为强对偶性,此时可以通过求解对偶问题得到原始问题的解。
KKT条件如下:

                                       吴恩达机器学习笔记-SVM(cs229)_第8张图片

我们的求解目标经历了以下转化:

                                                    通过几何分析(几何间隔的意义)得到最初始的目标函数

                                                 ⟹通过几何间隔与函数间隔的关系与一些约束与手段,从最初始的目标函数得到常用的且较正规的目标函 数式,此时它是一个凸函数

                                                 ⟹引入拉格朗日算子将目标函数式变成式原始问题

                                                 ⟹每个原始问题都有对应的对偶问题,满足KKT条件后对偶问题的解与原始问题的解相等,可通过求解对偶问题式来获得原始问题式的解
 

2.1.3、对偶问题的初步求解   

接下来讨论如何求解对偶问题,对偶问题的式子为:

                                                                           

要求解得到最后的参数,对偶问题的求解方法分成两步。

第一步,minw,bL(w,b,α)。把α当成常数,对w,b求L(w,b,α)的最小值,然后把用α表示的w,b代回L(w,b,α)中,此时的L(w,b,α)成为了参数α的函数,实际上是L(α),形式上用W(α)表示。
第二步,maxα≥0minw,bL(w,b,α)=maxα≥0W(α)。对W(α)求最大值,此时解出来的α是确切的常数,再把这些常数代回第二步中“用α表示的w,b”中,即可得到最终的参数w,b。
本小节只做第一步的处理,第二步的处理将在第三章“SVM的求解”中介绍。

对L(w, b, α)分别求w和b的极值。也就是L(w, b,α)对w和b的梯度(偏导)为0:∂L/∂w=0和∂L/∂b=0,还需要满足>=0。求解这里导数为0的式子可以得到:

把L(w,b,α)的原式稍微展开(w被认为是常数 ,所以wT=w):

                                    吴恩达机器学习笔记-SVM(cs229)_第9张图片

对w求偏导可以简单得到:

                                                           吴恩达机器学习笔记-SVM(cs229)_第10张图片

 

同样,对b求偏导可以得到:

                                                                  

  其中xi,yi都是样本中的已知量,α为未知量。

吴恩达机器学习笔记-SVM(cs229)_第11张图片

之后求对α的极大值

问题变为:

约束条件为:

 

之前对w求偏导时

吴恩达机器学习笔记-SVM(cs229)_第12张图片

                                                                           

                                                 

吴恩达机器学习笔记-SVM(cs229)_第13张图片

2.2、SVM优化一——引入核函数(Kernel)

2.2.1、核函数的作用

核函数的作用:把原坐标系里线性不可分的数据投影到另一个空间,尽量使得数据在新的空间里线性可分。
为了有一个直观感受可以看这个视频:https://www.youtube.com/watch?v=3liCbRZPrZA

低维空间(这里是二维)里有红色与蓝色两种不同的分类点,可以看到在这里它们线性不可分:

                 

用核函数把低维空间里的数据投影到高维空间(这里是三维)中去:

                      吴恩达机器学习笔记-SVM(cs229)_第14张图片

在高维空间中做一个超平面将数据分类:

                吴恩达机器学习笔记-SVM(cs229)_第15张图片

高维空间中的分类超平面,表现在低维空间中,就是那个发光的圆:

                吴恩达机器学习笔记-SVM(cs229)_第16张图片

可以看到,即使原空间中的数据线性不可分,也可以获得很好的分类超平面,这就是核函数在SVM中的作用。

2.2.2、核函数本身

将数据映射到高维空间

让我们来看下式中可以使用核函数的地方:

                                                               

吴恩达机器学习笔记-SVM(cs229)_第17张图片

线性不可分问题一般来说不好求解。所以我们将数据映射到高维空间,在高维空间里使用求解线性可分问题的方法,来求解在原空间中线性不可分的问题。
我们看到虽然样本点经过了映射,但是参数w,b却没变,因为式与式中的w,b本来就是相同的,只是在不同维度中表现出不同的样子而已(在(这里的)高维空间里表现为一条直线,在低维空间里表现为一个椭圆)。
这些跟图四到图七所表达的意思也是很吻合的。

化解计算量问题

将数据映射到高维空间,在高维空间中去寻找线性超平面的这个方式固然好,但是却引来了新的问题。
ϕ(x)是映射后的数据,一般比原数据更高维,而真正使用的时候,还是在计算它的内积ϕ(x)Tϕ(z),这样的计算代价太高昂了。
核函数的一个巧妙之处在于,可以通过计算低维向量内积的平方,得到高维向量的内积,下面是一个例子。
如果我们有一个核函数如下,并且x,z都是n维的:

                                                  

它可以展开成如下形式:

                                                                  吴恩达机器学习笔记-SVM(cs229)_第18张图片

当n=3的时候,有:

                                                               吴恩达机器学习笔记-SVM(cs229)_第19张图片

假如式子是上述式子中的ϕ,我们有:

                                                      吴恩达机器学习笔记-SVM(cs229)_第20张图片

我们的初衷是在更高维的空间(ϕ)中做分类,使得数据更加线性可分,但是此时的时间复杂度变高了,为O(n2),但是通过核函数的转换,通过计算低维向量内积的平方(时间复杂度为O(n))获得了相同的效果,降低了计算成本,而且这个时间复杂度与原始的式相比是相同的。计算完内积之后得到的是一个常数,对一个常数做平方的代价在现在的计算机中几乎可以忽略不计。

其他核函数

这里再给出一个相似的核函数:

                                         


同样等n=3时,有:

                                                吴恩达机器学习笔记-SVM(cs229)_第21张图片

其更一般的形式为:

                                                                             

另外,再给出SVM中应用广泛的高斯核(Radial Basis Function ,简称 RBF),也称为径向基函数:               

                                                                          

它能将原始特征映射到无穷维度,而且它能够衡量x与z的接近程度。

 

核函数有效性判断

关于核函数的有效性判断这里有Mercer定理直接给出结论。
Mercer 定理:半正定的函数都可以作为核函数。所谓半正定的函数f(xi,xj),是指拥有训练数据集合(x1,x2,⋯,xn),我们定义一个矩阵的元素aij=f(xi,xj),这个矩阵是n*n的,如果这个矩阵是半正定的,那么f(xi,xj)就称为半正定的函数。
这里是证明:
Mercer定理表明为了证明K是有效的核函数,那么我们不用去寻找ϕ,而只需要在训练集上求出各个Kij,然后判断矩阵K是否是半正定(使用左上角主子式大于等于零等方法)即可。
一个直观的理解是:一个向量与自己的内积一定大于等于0。
另外,不只是在SVM中,其他出现了内积的算法中,也可以用核函数代替内积,也是用Mercer定理来证明其有效性。

 

2.3、SVM优化二——软间隔分类器

                 吴恩达机器学习笔记-SVM(cs229)_第22张图片

在引入核函数之前,我们一直在强调数据是线性可分的,如上图中的左图。
但是,如果映射到高维空间中仍然线性不可分,或者如图九右图中一样出现影响了超平面位置的不可避免的噪声时,该如何处理?
回到原始目标函数式中,我们允许某些数据点拥有比1小的几何间隔,同时加入一个预设的惩罚系数C,就得到了下面的软间隔分类器:

                                                    吴恩达机器学习笔记-SVM(cs229)_第23张图片


然后引入拉格朗日乘子,得到:

                                              

接着如上文所说,进行对偶问题的第一步求解,即minL(w,b,α),同样地,我们分别对w,b,ξi求偏导,令其偏导数结果为0之后,再把它们代回式。这里不进行具体求解,直接给出对偶问题第一步求解完成后的形式:

                                                             吴恩达机器学习笔记-SVM(cs229)_第24张图片

与式吴恩达机器学习笔记-SVM(cs229)_第25张图片的形式只增加了一个αi上界的限制C,ξi已经不见了踪影,这也是求解对偶问题的一个优点所在。
初次之外还有两个变化,一个是得到截距b的方式产生了变化,另一个是KKT互补条件发射了变化:

                                                                      吴恩达机器学习笔记-SVM(cs229)_第26张图片

这些条件将在下一节的SMO算法中判断其是否收敛。

3、SVM的求解

在第一章结束的时候,我们就已经得到了目标函数,并且明确了我们要求解的参数是w,b。但是为了解决线性不可分的问题,以及为了更方便地求解参数,我们引入了拉格朗日乘子,把最初的目标函数变成了一个原始问题,再通过求解该原始问题的对偶问题,来获得原始问题,也即最初始的目标函数,就能取得参数w,b了。
于是我们的目标转换到了求解这个对偶问题上:

                                                                 

3.2.1、SMO算法

                         吴恩达机器学习笔记-SVM(cs229)_第27张图片

为了方便求解,把原始最优化问题转化成了其对偶问题,因为对偶问题是一个凸二次规划问题,这样的凸二次规划问题具有全局最优解,如下:

                                           

其中(xi,yi)表示训练样本数据,xi为样本特征,yi∈{−1,1}为样本标签,C为惩罚系数由自己设定。上述问题是要求解N个参数(α1,α2,α3,...,αN),其他参数均为已知,有多种算法可以对上述问题求解,但是算法复杂度均很大。但1998年,由Platt提出的序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。

3.2.2、SMO原理分析

(1)视为一个二元函数:

为了求解N个参数(α1,α2,α3,...,αN),首先想到的是坐标上升的思路,例如求解α1,可以固定其他N-1个参数,可以看成关于α1的一元函数求解,但是注意到上述问题的等式约束条件∑Ni=1yiαi=0,当固定其他参数时,参数α1也被固定,因此此种方法不可用。
SMO算法选择同时优化两个参数,固定其他N-2个参数,假设选择的变量为α1,α2,固定其他参数α3,α4,...,αN,由于参数α3,α4,...,αN的固定,可以简化目标函数为只关于α1,α2的二元函数,Constant表示常数项(不包含变量α1,α2的项)。

(上式是把原始问题展开,只保留未知数α1与α2相关的项,其他项用一个常数表示。此时目标函数被视为一个二元函数。)

 

(2)视为一个一元函数

(2)式带回到(1)中得到只关于参数α2的一元函数,由于常数项不影响目标函数的解,以下省略掉常数项Constant

(3)对一元函数求极值点

上式中是关于变量α2的函数,对上式求导并令其为0得:

吴恩达机器学习笔记-SVM(cs229)_第28张图片

吴恩达机器学习笔记-SVM(cs229)_第29张图片

这样就有了新旧α2的迭代规则,其中η=K11+K22−2K12。
但是要注意αnew,unclipped2还不是完全新的迭代值,“unclipped”表示未裁剪。因为还要考虑到约束条件:

                                                                             

在二维平面上直观表达上述两个约束条件

                      吴恩达机器学习笔记-SVM(cs229)_第30张图片

吴恩达机器学习笔记-SVM(cs229)_第31张图片

(4)取临界情况

吴恩达机器学习笔记-SVM(cs229)_第32张图片

4.启发式选择变量

上述分析是在从N个变量中已经选出两个变量进行优化的方法,下面分析如何高效地选择两个变量进行优化,使得目标函数下降的最快。

第一个变量的选择

第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的αi作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。当遍历完整个样本集后,遍历非边界样本集(0<αi

                                         吴恩达机器学习笔记-SVM(cs229)_第33张图片

第二个变量的选择

SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为α1,第二个变量的选择希望能使α2有较大的变化,由于α2是依赖于|E1−E2|,当E1为正时,那么选择最小的Ei作为E2,如果E1为负,选择最大Ei作为E2,通常为每个样本的Ei保存在一个列表中,选择最大的|E1−E2|来近似最大化步长。
有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:

                            吴恩达机器学习笔记-SVM(cs229)_第34张图片

阈值b的计算

每完成对两个变量的优化后,要对b的值进行更新,因为b的值关系到f(x)的计算,即关系到下次优化时Ei的计算。

        

由(5)式得,上式前两项可以替换为:

                                               

得出:

                     吴恩达机器学习笔记-SVM(cs229)_第35张图片

 

小结

从logistic函数开始,提出了函数间隔与几何间隔的概念,在几何函数之上获得了初始的目标函数;
加入拉格朗日乘子把目标函数变成一个原始问题,在满足KKT条件的情况下,通过求解对偶问题获得原始问题的解;
在对偶问题的第一步求解之后,整个目标函数的初始参数w,b

已经消失,取而代之的参数是拉格朗日乘子;
因为对偶问题的优良结构,我们可以引入核函数在高维空间中寻找超平面,还可以使用软间隔分类器允许噪声存在(同时目标函数结构几乎无变化),使得原先线性不可分的问题得以解决;
最后使用SMO算法对对偶问题进行第二步求解,求得参数拉格朗日乘子的值。
到此,SVM整个的参数求解过程完成。

你可能感兴趣的:(机器学习)