参考:http://www.blogjava.net/zhenandaci/category/31868.html
也可参考刘建平大佬博客:http://www.cnblogs.com/pinard/p/6097604.html

SVM简介

http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html
所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。

机器学习本质上就是一种对问题真实模型的逼近。与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。统计学习因此而引入了泛化误差界的概念,就是指真实风险应该由两部分内容刻画,一是经验风险,二是置信风险
1. 经验风险,代表了分类器在给定样本上的误差;
2. 置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果。
很显然,第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,而不叫泛化误差)。

置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC维越大,推广能力越差,置信风险会变大。

泛化误差界的公式为:
R(w)Remp(w)+ϕ(n/h)
R(w)就是真实风险,Remp(w)就是经验风险,ϕ(n/h)就是置信风险。
统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。SVM正是这样一种努力最小化结构风险的算法。

小样本,并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。
高维模式识别是指样本维数很高,例如文本的向量表示,如果没有经过另一系列文章(《文本分类入门》)中提到过的降维处理,出现几万维的情况很正常,其他算法基本就没有能力应付了,SVM却可以,主要是因为SVM 产生的分类器很简洁,用到的样本信息很少(仅仅用到那些称之为“支持向量”的样本,此为后话),使得即使样本维数很高,也不会给存储和计算带来大麻烦(相对照而言,kNN算法在分类时就要用到所有样本,样本数巨大,每个样本维数再一高,这日子就没法过了……)。

非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓。

线性分类器

超平面(Hyper Plane)

g(x)=ωTx+b
我们可以取阈值为0,这样当有一个样本xi需要判别的时候,我们就看g(xi)的值。若g(xi)>0,就判别为类别C1,若g(xi)<0,则判别为类别C2。此时也等价于给函数g(xi)附加一个符号函数sgn(),即f(x)=sgn[g(x)]是我们真正的判别函数。

关于g(x)=ωTx+b这个表达式要注意三点:

  1. 式中的x不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8),则xT=(3,8) ,而不是x=3(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置)。
  2. 这个形式并不局限于二维的情况,在n维空间中仍然可以使用这个表达式,只是式中的ω成为了n维向量(在二维的这个例子中,ω是二维向量,为了表示起来方便简洁,以下均不区别列向量和它的转置,聪明的读者一看便知);
  3. g(x)不是中间那条直线的表达式,中间那条直线的表达式是g(x)=0,即ωTx+b=0,我们也把这个函数叫做分类面。

分类间隔

显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:

Di=(xi,yi)
xi就是文本向量(维数很高),yi就是分类标记。
在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:
δi=yi(ωTxi+b)
这个公式乍一看没什么神秘的,也说不出什么道理,只是个定义而已,但我们做做变换,就能看出一些有意思的东西。
yi(ωTxi+b)总是大于0的,而且它的值就等于|ωTxi+b|!(也就是|g(xi)|)【注意到如果某个样本属于该类别的话,那么ωTxi+b>0(记得么?这是因为我们所选的g(x)=ωTx+b就通过大于0还是小于0来判断分类),而yi也大于0;若不属于该类别的话,那么ωTxi+b<0,而yi也小于0】
现在把ωb进行一下归一化,即用ω||ω||b||ω||分别代替原来的ωb,那么间隔就可以写成
δi=yi(ωTxi+b)=|ωTxi+b|=|ω||ω||xi+b||ω|||=1||ω|||ωxi+b|=1||ω|||g(xi)|

这个公式是不是看上去有点眼熟?没错,这不就是解析几何中点xi到直线g(x)=0的距离公式嘛!(推广一下,是到超平面g(x)=0的距离)
小Tips:||ω||是什么符号?||ω||叫做向量ω的范数,范数是对向量长度的一种度量。我们常说的向量长度其实指的是它的2-范数.

几何间隔

当用归一化的ωb代替原值之后的间隔有一个专门的名称,叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离,我们下面就简称几何间隔为“距离”。以上是单个点到某个超平面的距离(就是间隔,后面不再区别这两个词)定义,同样可以定义一个点的集合(就是一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。下面这张图更加直观的展示出了几何间隔的现实含义:
SVM(1)简介
H是分类面,而H1和H2是平行于H,且过离H最近的两类样本的直线,H1与H,H2与H之间的距离就是几何间隔。
之所以如此关心几何间隔这个东西,是因为几何间隔与样本的误分次数间存在关系:

(2Rδ)2
其中的δ是样本集合到分类面的间隔,R=max||xi|| (i=1,…,n),即R是所有样本中(xi是以向量表示的第i个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)

至此我们就明白为何要选择几何间隔来作为评价一个解优劣的指标了,原来几何间隔越大的解,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标。

相关文章: