您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 【超详细】支持向量机入门
SVM入门SVM入门(一)SVM的八股简介 支持向量机(SupportVectorMachine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。支持向量机方法是建立在统计学习理论的VC维理论和结构风险昀小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求昀佳折衷,以期获得昀好的推广能力[14](或称泛化能力)。以上是经常被有关SVM的学术文献引用的介绍,有点八股,我来逐一分解并解释一下。Vapnik是统计机器学习的大牛,这想必都不用说,他出版的《StatisticalLearningTheory》是一本完整阐述统计机器学习思想的名著。在该书中详细的论证了统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统完全成了一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。结构风险昀小听上去文绉绉,其实说的也无非是下面这回事。机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),但毫无疑问,真实模型一定是不知道的(如果知道了,我们干吗还要机器学习?直接用真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多大差距,我们就没法得知。比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。这个与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。昀直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。以前的机器学习方法都把经验风险昀小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险昀小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛一毛,经验风险昀小化原则只在这占很小比例的样本上做到没有误差,当然不能保证在更大比例的真实文本上也没有误差。统计学习因此而引入了泛化误差界的概念,就是指真实风险应该由两部分内容刻画,一是经验风险,代表了分类器在给定样本上的误差;二是置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果。很显然,第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,而不叫泛化误差)。置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC维越大,推广能力越差,置信风险会变大。泛化误差界的公式为:R(w)≤Remp(w)+Ф(n/h)公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险。统计学习的目标从经验风险昀小化变为了寻求经验风险与置信风险的和昀小,即结构风险昀小。SVM正是这样一种努力昀小化结构风险的算法。SVM其他的特点就比较容易理解了。小样本,并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓,以后会详细讨论。多说一句,关于文本分类这个问题究竟是不是线性可分的,尚没有定论,因此不能简单的认为它是线性可分的而作简化处理,在水落石出之前,只好先当它是线性不可分的(反正线性可分也不过是线性不可分的一种特例而已,我们向来不怕方法过于通用)。高维模式识别是指样本维数很高,例如文本的向量表示,如果没有经过另一系列文章(《文本分类入门》)中提到过的降维处理,出现几万维的情况很正常,其他算法基本就没有能力应付了,SVM却可以,主要是因为SVM产生的分类器很简洁,用到的样本信息很少(仅仅用到那些称之为“支持向量”的样本,此为后话),使得即使样本维数很高,也不会给存储和计算带来大麻烦(相对照而言,kNN算法在分类时就要用到所有样本,样本数巨大,每个样本维数再一高,这日子就没法过了……)。下一节开始正式讨论SVM。别嫌我说得太详细哦。SVM入门(二)线性分类器Part 1 线性在一用一C1直线数能分的什么维空函数实际分类别的示不性分类器(一一个线性分一个二维空和C2是要线就是一个能够将样本的。么叫线性函空间里就是数还有一个际上,一个线类问题(例的问题)需不属于(不一定意义上,分类器中,可以空间里仅有两要区分的两个个分类函数,本完全正确的数呢?在一是一个平面,个统一的名称线性函数是例如这里的二需要离散的输不属于C1也,也可以叫做以看到SVM两类样本的个类别,在,它可以将两的分开,就称一维空间里,可以如此想称——超平是一个实值二元分类问输出值,例也就意味着属做感知机)M形成的思的分类问题来在二维平面中两类样本完称这些数据里就是一个点想象下去,平面(Hype值函数(即函问题——回答例如用1表示属于C2)是昀简单也思路,并接触来举个小例中它们的样完全分开。一据是线性可分点,在二维空,如果不关注erPlane)函数的值是连答一个样本示某个样本,这时候只也很有效的触很多SVM例子。如图所样本如上图所一般的,如分的,否则空间里就是注空间的维!连续的实数本属于还是不本属于类别C只需要简单的的分类器形式M的核心概所示所示。中间如果一个线性则称为非线性是一条直线维数,这种线数),而我们不属于一个C1,而用的在实值函式.概念.间的性函性可,三线性们的个类0表函数的基础上附加一个阈值即可,通过分类函数执行时得到的值大于还是小于这个阈值来确定类别归属。例如我们有一个线性函数g(x)=wx+b我们可以取阈值为0,这样当有一个样本xi需要判别的时候,我们就看g(xi)的值。若g(xi)0,就判别为类别C1,若g(xi)0,则判别为类别C2(等于的时候我们就拒绝判断,呵呵)。此时也等价于给函数g(x)附加一个符号函数sgn(),即f(x)=sgn[g(x)]是我们真正的判别函数。关于g(x)=wx+b这个表达式要注意三点:一,式中的x不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8),则xT=(3,8),而不是x=3(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置)。二,这个形式并不局限于二维的情况,在n维空间中仍然可以使用这个表达式,只是式中的w成为了n维向量(在二维的这个例子中,w是二维向量,注意这里的w严格的说也应该是转置的形式,为了表示起来方便简洁,以下均不区别列向量和它的转置,聪明的读者一看便知);三,g(x)不是中间那条直线的表达式,中间那条直线的表达式是g(x)=0,即wx+b=0,我们也把这个函数叫做分类面。实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。下一节我们就仔细说说分类间隔,也补一补相关的数学知识。SVM入门(三)线性分类器Part 2 上回说到对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:Di=(xi,yi)xi就是文本向量(维数很高),yi就是分类标记。在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:δi=yi(wxi+b)这个公式乍一看没什么神秘的,也说不出什么道理,只是个定义而已,但我们做做变换,就能看出一些有意思的东西。首先注意到如果某个样本属于该类别的话,那么wxi+b0(记得么?这是因为我们所选的g(x)=wx+b就通过大于0还是小于0来判断分类),而yi也大于0;若不大于现在那么这个g(x上节小T度量p-范它的看看就像不属于该类于0的,而在把w和b么间隔就可个公式是不x)=0的距离节中提到的Tips:||w||量。我们常范数,可以向量w=(w的p-范数为看把p换成像||w||这样使类别的话,那而且它的值就b进行一下可以写成不是看上去有离公式嘛!的分类超平面|是什么符号常说的向量长以写成如下表w1,w2,w3,为成2的时候使用时,就那么wxi+b就等于|wxi归一化,即有点眼熟?(推广一下面)号?||w||叫长度其实指表达式……wn),不就是传就意味着我们b0,而yi+b|!(也即用w/||w|没错,这不下,是到超平做向量w的指的是它的2传统的向量长们不关心p也小于0,也就是|g(xi)|||和b/||w||不就是解析平面g(x)=的范数,范2-范数,范长度么?当p的值,用几这意味着|)分别代替原析几何中点x0的距离,范数是对向量范数昀一般的当我们不指明几范数都可yi(wxi+b)总原来的w和xi到直线,g(x)=0就量长度的一的表示形式明p的时候可以;或者上总是和b,就是一种式为候,上文已经当用几何离”定义合中含义H是H,之所经提到了p用归一化的何间隔所表。以上是义,同样可以中离超平面义:是分类面,H2与H之所以如此关的值,为了的w和b代表示的正是点是单个点到某以定义一个面昀近的点的而H1和H之间的距离就关心间隔这个了叙述方便替原值之后点到超平面某个超平面个点的集合的距离。下面H2是平行于就是几何间个东西,是便不再重复指后的间隔有面的欧氏距离面的距离(就(就是一组面这张图更于H,且过离间隔。是因为间隔与指明。有一个专门的离,我们下面就是间隔,组样本)到某更加直观的展离H昀近的与样本的误的名称,叫面就简称几后面不再区某个超平面展示出了几的两类样本误分次数间存叫做几何间隔几何间隔为区别这两个面的距离为此几何间隔的现本的直线,H存在关系:隔,“距个词)此集现实H1与其中的半和推以看至此的解二把类时但是样的这个一个一回隔(现在下来SVM中的δ是样半径(也就是推导过程,只看出,误分此我们就明解,它的误差把刀作者所时期就已有是看过一些
本文标题:【超详细】支持向量机入门
链接地址:https://www.777doc.com/doc-4277702 .html