ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:585.27KB ,
资源ID:3928011      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3928011.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(支持向量机.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

支持向量机.docx

1、支持向量机支持向量机: Maximum Margin Classifierby pluskid, on 2010-09-08, inMachine Learning71 comments本文是“支持向量机系列”的第一篇,参见本系列的其他文章。支持向量机即Support Vector Machine,简称 SVM 。我最开始听说这头机器的名号的时候,一种神秘感就油然而生,似乎把 Support 这么一个具体的动作和 Vector 这么一个抽象的概念拼到一起,然后再做成一个 Machine ,一听就很玄了!不过后来我才知道,原来 SVM 它并不是一头机器,而是一种算法,或者,确切地说,是一类算法,

2、当然,这样抠字眼的话就没完没了了,比如,我说 SVM 实际上是一个分类器 (Classifier) ,但是其实也是有用 SVM 来做回归 (Regression) 的。所以,这种字眼就先不管了,还是从分类器说起吧。SVM 一直被认为是效果最好的现成可用的分类算法之一(其实有很多人都相信,“之一”是可以去掉的)。这里“现成可用”其实是很重要的,因为一直以来学术界和工业界甚至只是学术界里做理论的和做应用的之间,都有一种“鸿沟”,有些很 fancy 或者很复杂的算法,在抽象出来的模型里很完美,然而在实际问题上却显得很脆弱,效果很差甚至完全 fail 。而 SVM 则正好是一个特例在两边都混得开。好了

3、,由于 SVM 的故事本身就很长,所以废话就先只说这么多了,直接入题吧。当然,说是入贴,但是也不能一上来就是 SVM ,而是必须要从线性分类器开始讲。这里我们考虑的是一个两类的分类问题,数据点用x来表示,这是一个n维向量,而类别用y来表示,可以取 1 或者 -1 ,分别代表两个不同的类(有些地方会选 0 和 1 ,当然其实分类问题选什么都无所谓,只要是两个不同的数字即可,不过这里选择 +1 和 -1 是为了方便 SVM 的推导,后面就会明了了)。一个线性分类器就是要在n维的数据空间中找到一个超平面,其方程可以表示为wTx+b=0一个超平面,在二维空间中的例子就是一条直线。我们希望的是,通过这个

4、超平面可以把两类数据分隔开来,比如,在超平面一边的数据点所对应的y全是 -1 ,而在另一边全是 1 。具体来说,我们令f(x)=wTx+b,显然,如果f(x)=0,那么x是位于超平面上的点。我们不妨要求对于所有满足f(x)0则对应y=1的数据点。当然,有些时候(或者说大部分时候)数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在,不过关于如何处理这样的问题我们后面会讲,这里先从最简单的情形开始推导,就假设数据都是线性可分的,亦即这样的超平面是存在的。如图所示,两种颜色的点分别代表两个类别,红颜色的线表示一个可行的超平面。在进行分类的时候,我们将数据点x代入f(x)中,如果得到的结果

5、小于 0 ,则赋予其类别 -1 ,如果大于 0 则赋予类别 1 。如果f(x)=0,则很难办了,分到哪一类都不是。事实上,对于f(x)的绝对值很小的情况,我们都很难处理,因为细微的变动(比如超平面稍微转一个小角度)就有可能导致结果类别的改变。理想情况下,我们希望f(x)的值都是很大的正数或者很小的负数,这样我们就能更加确信它是属于其中某一类别的。从几何直观上来说,由于超平面是用于分隔两类数据的,越接近超平面的点越“难”分隔,因为如果超平面稍微转动一下,它们就有可能跑到另一边去。反之,如果是距离超平面很远的点,例如图中的右上角或者左下角的点,则很容易分辩出其类别。实际上这两个 Criteria

6、是互通的,我们定义 functional margin 为=y(wTx+b)=yf(x),注意前面乘上类别y之后可以保证这个 margin 的非负性(因为f(x)1。事实上,当最优的超平面确定下来之后,这些后方的点就完全成了路人甲了,它们可以在自己的边界后方随便飘来飘去都不会对超平面产生任何影响。这样的特性在实际中有一个最直接的好处就在于存储和计算上的优越性,例如,如果使用 100 万个点求出一个最优的超平面,其中是 supporting vector 的有 100 个,那么我只需要记住这 100 个点的信息即可,对于后续分类也只需要利用这 100 个点而不是全部 100 万个点来做计算。(当

7、然,通常除了 K-Nearest Neighbor 之类的Memory-based Learning算法,通常算法也都不会直接把所有的点记忆下来,并全部用来做后续 inference 中的计算。不过,如果算法使用了 Kernel 方法进行非线性化推广的话,就会遇到这个问题了。Kernel 方法在下一次会介绍。)当然,除了从几何直观上之外,支持向量的概念也会从其优化过程的推导中得到。其实上一次还偷偷卖了另一个关子就是虽然给出了目标函数,却没有讲怎么来求解。现在就让我们来处理这个问题。回忆一下之前得到的目标函数:max1ws.t.,yi(wTxi+b)1,i=1,n这个问题等价于(为了方便求解,我

8、在这里加上了平方,还有一个系数,显然这两个问题是等价的,因为我们关心的并不是最优情况下目标函数的具体数值):min12w2s.t.,yi(wTxi+b)1,i=1,n到这个形式以后,就可以很明显地看出来,它是一个凸优化问题,或者更具体地说,它是一个二次优化问题目标函数是二次的,约束条件是线性的。这个问题可以用任何现成的QP (Quadratic Programming)的优化包进行求解。所以,我们的问题到此为止就算全部解决了,于是我睡午觉去了啊?呃,有人说我偷懒不负责任了?好吧,嗯,其实呢,虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过Lagrange Duality变

9、换到对偶变量 (dual variable) 的优化问题之后,可以找到一种更加有效的方法来进行求解这也是 SVM 盛行的一大原因,通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。此外,在推导过程中,许多有趣的特征也会被揭露出来,包括刚才提到的 supporting vector 的问题。关于 Lagrange duality 我没有办法在这里细讲了,可以参考 Wikipedia 。简单地来说,通过给每一个约束条件加上一个 Lagrange multiplier,我们可以将它们融和到目标函数里去L(w,b,)=12w2i=1ni(yi(wTxi+b)1)然后我们令(w)=ma

10、xi0L(w,b,)容易验证,当某个约束条件不满足时,例如yi(wTxi+b)1,那么我们显然有(w)=(只要令i=即可)。而当所有约束条件都满足时,则有(w)=12w2,亦即我们最初要最小化的量。因此,在要求约束条件得到满足的情况下最小化12w2实际上等价于直接最小化(w)(当然,这里也有约束条件,就是i0,i=1,n),因为如果约束条件没有得到满足,(w)会等于无穷大,自然不会是我们所要求的最小值。具体写出来,我们现在的目标函数变成了:minw,b(w)=minw,bmaxi0L(w,b,)=p这里用p表示这个问题的最优值,这个问题和我们最初的问题是等价的。不过,现在我们来把最小和最大的位

11、置交换一下:maxi0minw,bL(w,b,)=d当然,交换以后的问题不再等价于原问题,这个新问题的最优值用d来表示。并,我们有dp,这在直观上也不难理解,最大值中最小的一个总也比最小值中最大的一个要大吧!总之,第二个问题的最优值d在这里提供了一个第一个问题的最优值p的一个下界,在满足某些条件的情况下,这两者相等,这个时候我们就可以通过求解第二个问题来间接地求解第一个问题。具体来说,就是要满足KKT 条件,这里暂且先略过不说,直接给结论:我们这里的问题是满足 KKT 条件的,因此现在我们便转化为求解第二个问题。首先要让L关于w和b最小化,我们分别令L/w和L/b等于零:Lw=0Lb=0w=i

12、=1niyixii=1niyi=0带回L得到:L(w,b,)=12i,j=1nijyiyjxTixji,j=1nijyiyjxTixjbi=1niyi+i=1ni=i=1ni12i,j=1nijyiyjxTixj此时我们得到关于 dual variable的优化问题:maxs.t.,i=1ni12i,j=1nijyiyjxTixji0,i=1,ni=1niyi=0如前面所说,这个问题有更加高效的优化算法,不过具体方法在这里先不介绍,让我们先来看看推导过程中得到的一些有趣的形式。首先就是关于我们的 hyper plane ,对于一个数据点x进行分类,实际上是通过把x带入到f(x)=wTx+b算出

13、结果然后根据其正负号来进行类别划分的。而前面的推导中我们得到w=ni=1iyixi,因此f(x)=(i=1niyixi)Tx+b=i=1niyixi,x+b这里的形式的有趣之处在于,对于新点x的预测,只需要计算它与训练数据点的内积即可(这里,表示向量内积),这一点至关重要,是之后使用 Kernel 进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来事实上,所有非 Supporting Vector 所对应的系数都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。为什么非支持向量对应的等于零呢?直观上来理解的话,就

14、是这些“后方”的点正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。这个结论也可由刚才的推导中得出,回忆一下我们刚才通过 Lagrange multiplier 得到的目标函数:maxi0L(w,b,)=maxi012w2i=1ni(yi(wTxi+b)1)注意到如果xi是支持向量的话,上式中红颜色的部分是等于 0 的(因为支持向量的 functional margin 等于 1 ),而对于非支持向量来说,functional margin 会大于 1 ,因此红颜色部分是大于零的,而i又是非负的,为了

15、满足最大化,i必须等于 0 。这也就是这些非 Supporting Vector 的点的悲惨命运了。嗯,于是呢,把所有的这些东西整合起来,得到的一个 maximum margin hyper plane classifier 就是支持向量机(Support Vector Machine),经过直观的感觉和数学上的推导,为什么叫“支持向量”,应该也就明了了吧?当然,到目前为止,我们的 SVM 还比较弱,只能处理线性的情况,不过,在得到了 dual 形式之后,通过 Kernel 推广到非线性的情况就变成了一件非常容易的事情了。不过,具体细节,还要留到下一次再细说了。支持向量机: Kernelby

16、pluskid, on 2010-09-11, inMachine Learning52 comments本文是“支持向量机系列”的第三篇,参见本系列的其他文章。前面我们介绍了线性情况下的支持向量机,它通过寻找一个线性的超平面来达到对数据进行分类的目的。不过,由于是线性方法,所以对非线性的数据就没有办法处理了。例如图中的两类数据,分别分布为两个圆圈的形状,不论是任何高级的分类器,只要它是线性的,就没法处理,SVM 也不行。因为这样的数据本身就是线性不可分的。对于这个数据集,我可以悄悄透露一下:我生成它的时候就是用两个半径不同的圆圈加上了少量的噪音得到的,所以,一个理想的分界应该是一个“圆圈”而

17、不是一条线(超平面)。如果用X1和X2来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:a1X1+a2X21+a3X2+a4X22+a5X1X2+a6=0注意上面的形式,如果我们构造另外一个五维的空间,其中五个坐标的值分别为Z1=X1,Z2=X21,Z3=X2,Z4=X22,Z5=X1X2,那么显然,上面的方程在新的坐标系下可以写作:i=15aiZi+a6=0关于新的坐标Z,这正是一个 hyper plane 的方程!也就是说,如果我们做一个映射:R2R5,将X按照上面的规则映射为Z,那么在新的空间中原来的数据将变成线性可分的,从而

18、使用之前我们推导的线性分类算法就可以进行处理了。这正是 Kernel 方法处理非线性问题的基本思想。再进一步描述 Kernel 的细节之前,不妨再来看看这个例子映射过后的直观例子。当然,我没有办法把 5 维空间画出来,不过由于我这里生成数据的时候就是用了特殊的情形,具体来说,我这里的超平面实际的方程是这个样子(圆心在X2轴上的一个正圆):a1X21+a2(X2c)2+a3=0因此我只需要把它映射到Z1=X21,Z2=X22,Z3=X2这样一个三维空间中即可,下图(这是一个 gif 动画)即是映射之后的结果,将坐标轴经过适当的旋转,就可以很明显地看出,数据是可以通过一个平面来分开的:现在让我们再

19、回到 SVM 的情形,假设原始的数据时非线性的,我们通过一个映射()将其映射到一个高维空间中,数据变得线性可分了,这个时候,我们就可以使用原来的推导来进行计算,只是所有的推导现在是在新的空间,而不是原始空间中进行。当然,推导过程也并不是可以简单地直接类比的,例如,原本我们要求超平面的法向量w,但是如果映射之后得到的新空间的维度是无穷维的(确实会出现这样的情况,比如后面会提到的 Gaussian Kernel ),要表示一个无穷维的向量描述起来就比较麻烦。于是我们不妨先忽略过这些细节,直接从最终的结论来分析,回忆一下,我们上一次得到的最终的分类函数是这样的:f(x)=i=1niyixi,x+b现

20、在则是在映射过后的空间,即:f(x)=i=1niyi(xi),(x)+b而其中的也是通过求解如下 dual 问题而得到的:maxs.t.,i=1ni12i,j=1nijyiyj(xi),(xj)i0,i=1,ni=1niyi=0这样一来问题就解决了吗?似乎是的:拿到非线性数据,就找一个映射(),然后一股脑把原来的数据映射到新空间中,再做线性 SVM 即可。不过若真是这么简单,我这篇文章的标题也就白写了说了这么多,其实还没到正题呐!其实刚才的方法稍想一下就会发现有问题:在最初的例子里,我们对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;如果原始空间是三维,那么

21、我们会得到 19 维的新空间(验算一下?),这个数目是呈爆炸性增长的,这给()的计算带来了非常大的困难,而且如果遇到无穷维的情况,就根本无从计算了。所以就需要 Kernel 出马了。不妨还是从最开始的简单例子出发,设两个向量x1=(1,2)T和x2=(1,2)T,而()即是到前面说的五维空间的映射,因此映射过后的内积为:(x1),(x2)=11+2121+22+2222+1212另外,我们又注意到:(x1,x2+1)2=211+2121+222+2222+21212+1二者有很多相似的地方,实际上,我们只要把某几个维度线性缩放一下,然后再加上一个常数维度,具体来说,上面这个式子的计算结果实际上

22、和映射(X1,X2)=(2X1,X21,2X2,X22,2X1X2,1)T之后的内积(x1),(x2)的结果是相等的(自己验算一下)。区别在于什么地方呢?一个是映射到高维空间中,然后再根据内积的公式进行计算;而另一个则直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果。回忆刚才提到的映射的维度爆炸,在前一种方法已经无法计算的情况下,后一种方法却依旧能从容处理,甚至是无穷维度的情况也没有问题。我们把这里的计算两个向量在映射过后的空间中的内积的函数叫做核函数 (Kernel Function) ,例如,在刚才的例子中,我们的核函数为:(x1,x2)=(x1,x2+1)2核函数能简化映射

23、空间中的内积运算刚好“碰巧”的是,在我们的 SVM 里需要计算的地方数据向量总是以内积的形式出现的。对比刚才我们写出来的式子,现在我们的分类函数为:i=1niyi(xi,x)+b其中由如下 dual 问题计算而得:maxs.t.,i=1ni12i,j=1nijyiyj(xi,xj)i0,i=1,ni=1niyi=0这样一来计算的问题就算解决了,避开了直接在高维空间中进行计算,而结果却是等价的,实在是一件非常美妙的事情!当然,因为我们这里的例子非常简单,所以我可以手工构造出对应于()的核函数出来,如果对于任意一个映射,想要构造出对应的核函数就很困难了。最理想的情况下,我们希望知道数据的具体形状和分布,从而得到一个刚好可以将数据映射成线性可分的(),然后通过这个()得出对应的(,)进行内积计算。然而,第二步通常是非常困难甚至完全没法做的。不过,由于第一步也是几乎无法做到,因为对于任意的数据分析其形状找到合适的映射本身就不是什么容易的事情,所以,人们通常都是“胡乱”选择映射的,所以,根本没有必要精确地找出对应于映射的那个核函数,而只需要“胡乱”选择一

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1