转自:http://blog.csdn.net/songzitea/article/details/42521851
支持向量机在解决小样本、非线性及高维模式识别问题中表现出了许多特有的优势,针对多类分类问题的经典SVM 算法主要有一对一方法(1-vs-1),一对多方法(1-vs-all.
线性可分问题
SVM 是从线性可分情况下的最优分类面发展而来的,所谓最优分类面就是要求分类面不但能将两类样本正确分开(训练错误率为0),而且使分类间隔最大.设有n 个样本xi 及其所属类别yi 表示为:
超平面W·X+b=0 方程,能将两类样本正确区分,并使分类间隔最大的优化问题可表示为在式的约束下求下式最小值.
满足条件且使||w||2 最小的分类面就是最优分类面. 过两类样本中离分类面最近的点且平行于最优分类面的超平面上的训练样本就是第一个式子中使等号成立的那些样本,它们叫做支持向量. 因为它们支撑了最优分类面.
线性不可分问题
最优分类面是在线性可分的前提下讨论的,在线性不可分的情况下,就是某些训练样本不能满足第一个式子的条件,因此可以在条件中增加一个松弛项,此时约束条件变为:
式中的C 为某个指定的常数,起到对错分样本惩罚程度控制的作用,实现在错分样本的比例和算法复杂程度之间的“折衷”. 该问题可转化为其对偶问题.
这是一个不等式约束下二次函数极值问题,存在唯一解. 求解出上述各系数α、W、b 对应的最优解α*、W*、b*后,得到最优分类函数
非线性问题
现实问题几乎都是非线性可分的,对非线性问题,可以通过非线性变换转化为某个高维空间中的线性问题3,在变换空间求最优分类面. 根据泛函的有关理论,只要一种核函数k(x, xi)满足Mercer 条件,它就对应某一变换空间中的内积. 因此,在最优分类面中用适当的内积核函数k(x, xi)就可以实现从低维空间向高维空间的映射,从而实现某一非线性变换后的线性分类,而计算复杂度却没有增加.
多类SVM 分类算法分析与研究
一对一支持向量机(1-vs-1 SVM)是利用两类SVM 算法在每两类不同的训练样本之间都构造一个最优决策面. 如果面对的是一个k 类问题,那么这种方法需要构造k(k-1) / 2 个分类平面(k>2). 这种方法的本质与两类SVM 并没有区别,它相当于将多类问题转化为多个两类问题来求解. 具体构造分类平面的方法如下:从样本集中取出所有满足yi=s 与yi=t (其中1燮s, t燮k, s≠t)通过两类SVM 算法构造最优决策函数用同样的方法对k 类样本中的每一对构造一个决策函数,又由于fst(x)=-fts(x),容易知道一个k 类问题需要k(k-1) / 2 个分类平面.根据经验样本集构造出决策函数以后,接下来的问题是如何对未知样本进行准确的预测.
通常的办法是采取投票机制:给定一个测试样本x,为了判定它属于哪一类,该机制必须综合考虑上述所有k(k-1)/2 个决策函数对x 所属类别的判定:有一个决策函数判定x 属于第s 类, 则意味着第s 类获得了一票,最后得票数最多的类别就是最终x 所属的类别.
1-vs-1 SVM 方法,优点在于每次投入训练的样本相对较少,因此单个决策面的训练速度较快,同时精度也较高. 但是由于k 类问题需要训练k(k-1) / 2 个决策面,当k 较大的时候决策面的总数将过多,因此会影响后面的预测速度. 这是一个有待改进的地方. 在投票机制方面,如果获得的最高票数的类别多于一类时,将产生不确定区域;另外在采用该机制的时候,如果某些类别的得票数已经使它们不可能成为最终的获胜者,那么可以考虑不再计算以这些类中任意两类为样本而产生的决策函数,以此来减小计算复杂度.
一对多支持向量机(1-vs-all SVM)[4]是在一类样本与剩余的多类样本之间构造决策平面,从而达到多类识别的目的. 这种方法只需要在每一类样本和对应的剩余样本之间产生一个最优决策面,而不用在两两之间都进行分类. 因此如果仍然是一个k 类问题的话,那么该方法仅需要构造k 个分类平面(k>2). 该方法其实也可以认为是两类SVM 方法的推广. 实际上它是将剩余的多类看成一个整体,然后进行k 次两类识别. 具体方法如下:
假定将第j 类样本看作正类(j=1, 2, …, k),而将其他k-1 类样本看作负类,通过两类SVM 方法求出一个决策函数, 这样的决策函数fj(x)一共有k 个. 给定一个测试输入x,将其分别带入k 个决策函数并求出函数值,若在k 个fj(x)中fs(x)最大,则判定样本x 属于第s 类.
1-vs-all SVM 方法和1-vs-1 SVM 相比,构造的决策平面数大大减少,因此在类别数目k 较大时,其预测速度将比1-vs-1 SVM 方法快. 但是由于它每次构造决策平面的时候都需要用上全部的样本集,因此它在训练上花的时间并不比1-vs-1SVM 少. 同时由于训练的时候总是将剩余的多类看作一类,因此正类和负类在训练样本的数目上极不平衡,这很可能影响到预测时的精度. 另外,与1-vs-1 方法类似,当同时有几个j 能取到相同的最大值fj(x)时,将产生不确定区域。
直方图与SVM的关系
细胞单元中的每一个像素点都为某个基于方向的直方图通道投票。投票是采取加权投票的方式,即每一票都是带权值的,这个权值是根据该像素点的梯度幅度计算出来。可以采用幅值本身或者它的函数来表示这个权值,实际测试表明:使用幅值来表示权值能获得最佳的效果。不同形状的物体具有不同的梯度分布,其梯度方向直方图也有较大差异。
将直方图分为9 级,直方图包含的级数太多导致对小的方向旋转太敏感,而级数太少则导致结构太粗糙。计算每个单元对应的用梯度幅值加权的梯度方向直方图,将其表示为一个9 维的特征向量。这个特征向量就是后一级SVM的输入向量。
SVM中点的代表物xi与yi的定义
xi是前级由直方图获得的特征向量.关于g(x)=wx+b 这个表达式要注意式中的x 不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(1,2),则xiT=(1,2),而不是x=1
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:
Di=(xi,yi) xi 就是向量(维数很高),yi 就是分类标记。在二元的线性分类中,这个表示分类的标记只有两个值,1 和-1(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔。
δi=yi(wxi+b)这个公式是个定义,但变换就能看出一些有意思的东西。首先注意到如果某个样本属于该类别的话,那么wxi+b>0,而yi 也大于0;wxi+b<0,而yi 也小于0,因此其值与分类所得值是相同符号的。
SVM中比较方法的深入理解
所谓“一对ALL”的方法,就是每次解一个两类分类的问题。比如我们有5个类别,第一次就把类别1的样本定位正样本,其余的定位负样本,这样得到一个两类分类器,它能够指出一篇文章是还是不是第1类的;第二次把2定位正样本,其余定为负样本,得到一个分类器。如此下去,我们可以得到5个这样的两类分类器。需要分类时就每次不停的询问是哪个组的。好处在于每个优化问题的规模比较小,而且分类的速度快.缺点在于,很有可能询问完成后发现有多个响应或者没有响应,前者选择样本离超平面最远的分组即可,后者则需要分类第6类,这会造成数据集偏斜的问题。“一对一”的方法可以避免数据集偏斜的问题。因为在询问时,第一个回答“是第一类还是第二类”,这样的问题总能得到答案,因此不会出现无响应的情况。有点在于,虽然分组变多,但在训练阶段所用时间减少。最后通过每次询问结果统计票数,将样本投给票数最多的分组。缺点在于分类器需要很多,硬件开销变大。