通过实验加深对SVM的认识
借实验的机会加深了对SVM的认识,于是把这次实验进行了总结,进一步巩固这种认识。
一、实验题目
实验一:原空间求解线性分类面问题
仔细阅读svc.m程序,尝试利用matlab的二次优化函数在原空间中求解线性分类面问题。并比较原空间问题的解和对偶空间问题的解的区别。
实验二:印章识别
受银行的委托:
编制程序显示印章图像(24位真彩色位图);
读出位图中每一像素点的(R,G,B)样本值;
以RGB其中某两个(或三个)为坐标,取一定数量的图像点为分析样本,分析其坐标系中的分布;
采用本章将要学习的方法找到分类判别函数,对这些样本进行分类;(要求首先将印章与底纹区分,将印章、底纹、签字区分)
将分类后的结果标记到原始图像上,检查其效果。
二、实验基础知识总结
l 间隔(Margin)的概念
支持向量积(SVM)的理解需要从间隔的概念入手。所谓的间隔就是在追寻最优二维线性分类器时所用到的衡量线性分类面好坏的度量。对于分类好坏的衡量,一种合理方式就是比较不同分类的可信度,可以看作寻找在已知条件下概率最大的分类方式,下面对这种观点进行简要描述。
考虑logistic regression,我们知道就是进行判别的条件概率的模型,而且当且仅当(或者)时判别为类1。显然,当()时,y的类别极可能是1。所以的大小衡量regression的可信度。
再用图形来形象地描述。如下图所示,‘x’和‘o’代表正、负两类训练样本,分类面是一条直线,考虑三个样本点A,B,C。注意到A离分界面很远,常理来看A可以很大程度上确认为‘x’类;相反,C离分界面特别近,如果分界面稍有改变,C可能就从‘x’类变为‘o’类了,因此对C属于‘x’类的确信度较小。从以上直观的描述中,我们可以发现样本点(A,B,C)属于‘x’类或者‘o’类的确信度(或者概率)可以用它们到分界面的距离来表征,这种思想引出了间隔(margin)的概念。
图1 示意图
受此启发,我们考虑classification问题:为二分问题设计线性分类器。类别标签用表示,特征用x表示,线性分类器用 进行参数化描述:
现在让我们看看所谓的间隔(margin)。其实间隔有函数间隔和几何间隔之分,它们之间的联系与规范化(归一化)有关。对于训练样本和分类器我们定义函数间隔为
可以看出当和同号时,越大则函数间隔越大。因此,大的函数间隔代表了确信度高且正确的类别判别。本来以为函数间隔就直接可以用来作为分类面优劣的衡量标准(头脑简单的根本原因在于数学功底不够),但是它存在一个问题:把变成,不会有任何改变,但是函数间隔会增大两倍。这意味着我们需要对函数间隔进行一点小小的修改,这就是规范化。比如说,我们可以规定一个规范化条件(可以有其他选择),则变为。对于训练集和分类器,函数间隔定义为
也就是单个样本点的最小函数间隔。
接下来总结一下什么是几何间隔。如下图所示,分类器为图中的超平面(直线),为垂直于分类面的法向量。B点是训练样本点A在超平面上的投影,A到超平面的距离,即线段AB的长度,就是几何间隔。
图2 示意图
下面计算几何间隔。易知是单位法向量。考虑已知A代表样本点,则B为,而且可知B在超平面上,满足,所以有
解得
为了引入分类条件,重新将对于训练样本相对超平面的几何间隔定义为
可以看出,当时,函数间隔就等于几何间隔。同样地,对于训练集和分类器,几何间隔定义为
对于训练集,比较直观的想法是找到一个分类器使得几何间隔最大,用数学语言描述为
但是这个问题解决不了,因为存在这个非凸约束。为了去掉这个烦人的约束,将上面的最优化问题改写为等价形式
但是我们还是无法直接求解这个问题。我们从上文中加入的约束(缩放约束)并不改变分界面性质中得到启发,这次我们加入的缩放约束。于是得到了如下优化问题
这是一个常见的二次规划问题,已经有很大成熟的方法和工具可以解决。这也就是所谓 最优间隔分类器的原问题。
l 最优间隔分类器(对偶问题)
先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题:
目标函数是,下面是等式约束。通常解法是引入拉格朗日算子,这里使用β来表示算子,得到拉格朗日公式为
然后分别对和求偏导,使得偏导数等于0,然后解出和。至于为什么引入拉格朗日算子可以求出极值,原因是的 变化方向受其他不等式的约束,的变化方向与的梯度垂直时才能获得极值,而且在极值处,的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。
然后我们探讨有不等式约束的极值问题求法,问题如下:
我们定义一般化的拉格朗日公式
这里的和都是拉格朗日算子。如果按这个公式求解,会出现问题,因为我们求解的是最小值,而这里的,我们可以将调整成很大的正值,来使最后的函数结果是负无穷。因此我们需要排除这种情况,我们定义下面的函数:
如果直接求解,首先面对的是两个参数,而也是不等式约束,然后再在上求最小值。这个过程不容易做,那么怎么办呢?答案就是拉格朗日对偶,对偶优化问题数学描述如下
很明显,与只是“max”和“min”的顺序进行了交换,那它们之间有什么联系呢?它们的大小关系如下
我们只关心等号什么时候成立。Karush-Kuhn-Tucker (KKT)条件给了我们答案。
KKT条件
l SVM 的优化问题:
我们将约束条件改写为:
从KKT条件得知只有函数间隔是 1(离超平面最近的点)的线性约束式前面的系数>0,也就是说这些约束式,对于其他的不在线上的点(),极值不会在他们所在的范围内取得,因此前面的系数=0,注意每一个约束式实际就是一个训练样本。
图3 示意图
如上图所示,实线是最大间隔超平面,在虚线上的点就是函数间隔是 1 的点,那么他们前面的系数>0,其他点都是=0,这三个点称作支持向量。构造拉格朗日函数如下:
下面就可以按照对偶问题的求解步骤来一步步进行,
并得到
将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值:
然后求解
根据求解得到的,我们代入前式得到
也就是说,以前新来的要分类的样本首先根据和做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了,我们不需要求出,只需将新来的样本和训练数据中的所有样本做内积和即可。此外,我们从 KKT 条件中得到,只有支持向量的,其他情况。因此,我们只需求新来的样本和支持向量的内积,然后运算即可;这为核函数(kernel)做了很好的铺垫。
l SVM 多类分类方法
SVM多类分类方法的实现根据其指导思想大致有两种:
(1)将多类问题分解为一系列SVM可直接求解的两类问题,基于这一系列SVM求解结果得出最终判别结果。
(2)通过对前面所述支持向量分类机中的原始最优化问题的适当改变,使得它能同时计算出所有多类分类决策函数,从而“一次性”地实现多类分类。
第(2)种指导思想看起来简单,但由于它的最优化问题求解过程太复杂,计算量太大,实现起来比较困难,因此未被广泛应用。而基于第(1)种指导思想的SVM多类分类方法主要有5种。
1、一对其余法
一类对余类法(One versus rest,OVR)是最早出现也是目前应用最为广泛的方法之一,其步骤是构造k个两类分类机(设共有k个类别),其中第i个分类机把第i类同余下的各类划分开,训练时第i个分类机取训练集中第i类为正类,其余类别点为负类进行训练。判别时,输入信号分别经过k个分类机共得到k个输出值fi(x)=sgn(gi(x)),若只有一个+1出现,则其对应类别为输入信号类别;实际情况下构造的决策函数总是有误差的,若输出不只一个+1(不只一类声称它属于自己),或者没有一个输出为+1(即没有一个类声称它属于自己),则比较g(x)输出值,最大者对应类别为输入的类别。
这种方法的优点是,对k类问题,只需要训练k个两类分类支持向量机,故其所得到的分类函数的个数(k个)较少,其分类速度相对较快。
2、一对一
该方法在每两类问训练一个分类器,因此对于一个k类问题,将有k(k-1)/2个分类函数。当对一个未知样本进行分类时,每个分类器都对其类别进行判断.并为相应的类别“投上一票”,最后得票最多的类别即作为该未知样本的类别。决策阶段采用投票法,可能存在多个类的票数相同的情况,从而使未知样本同时属于多个类别,影响分类精度。
3、DAG方法(有向无环图)
DAG-SvMS是由PIatt提出的决策导向的循环图DAG导出的,是针对“一对一"SVMS存在误分,拒分现象提出的。这种方法的训练过程类似于“一对一”方法,k类别问题需要求解k(k-1)/2个支持向量机分类器,这些分类器构成一个有向无环图。该有向无环图中含有k(k-1)/2个内部节点和k个叶结点,每个节点对应一个二类分类器。
DAG-SVMS简单易行,只需要使用k-1个决策函数即可得出结果,较“一对一"方法提高了测试速度,而且不存在误分、拒分区域;另外,由于其特殊的结构,故有一定的容错性,分类精度较一般的二叉树方法高。然而,由于存在自上而下的“误差积累”现象是层次结构固有弊端,故DAG-SVMS也逃脱不掉。即如果在某个结点上发生了分类错误,则会把分类错误延续到该结点的后续结点上.
4、决策树方法
决策树的基本思想是从根节点开始,采用某种方法将该节点所包含的类别划分为两个子类,然后再对两个子类进一步划分,如此循环,直到子类中只包含一个类别为止,这样,就得到了一个倒立的二叉树。最后,在二叉树各决策节点训练支持向量机分类器,实现对识别样本的分类。决策树支持向量机多分类方法有很多种,不同方法的主要区别在于设计树结构的方法不同。
完全二叉树结构分类时使用的平均分类器数目为log2k,偏二叉树使用的平均分类器数为(k+1)/2-1/k,具有其他层次结构的二叉树使用的分类器平均值介于二者之间。完全二叉树分类时所需要的分类器数目最少,因此具有较少支持向量的完全二叉树的分类器速度也是较快的。
5、纠错输出编码法(ECOC)
对于K类分类问题,可以根据不同方法构造一系列的两类分类问题,对于每个两类分类问题可以建立一决策函数。共得到L个决策函数,如果这些决策函数完全正确,K类中的每一类都对应一个元素为-l或+1的长度为L的数列,按照K类中的第一类、第二类,...,第K类的顺序,把这些数列排列起来,便可得到一个K行L列的编码矩阵,若要判断一个测试输入点的归属,首先用所得到的L个决策函数,得到一个元素为-l或l的长度为L的数列,然后将此数列与先前得到矩阵比较,相应于矩阵中有一行且仅有一行向与此数列相同,这个行数就是输入点的归属类;若矩阵中没有一行与该数列相同,可以通过计算汉明距离找出最近的一行,改行对应的类别即为该点的类别。
三、实验及结果分析
l 实验一:原空间求解线性分类面问题
1、总体实验方案
原始问题为:
对偶问题为:
在svc.m中,作者是在对偶空间中利用Matlab中的二次规划函数quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)进行参数求解的。其中二次规划问题如下:
工具箱中的svc.m所调用的二次规划函数形式为:
quadprog(H,f,[],[],aeq,beq,vlb,vub,x0)。
现在要在原空间求解问题,也就是求解
我没有使用quadprog()进行求解,而是使用了fmincon()。有约束非线性多变量优化函数x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)针对标准问题
进行求解。只需将题目改写成标准问题,即可使用fmincon()进行求解。
2、具体技术途径
令变量,函数margin(x)==,则fmincon()各参数的数值如下:
fun=@margin
x0=zeros(n+1,1)
A=sampleY.*sampleX;
b=-ones(m,1);
Aeq,beq,lb,ub=[];
3、实验结果与分析
以印章提取二分类的测试图为例,提取像素的R值、G值和B值,分别以(R,G)和(R,G,B)作为特征,分别提取正(印章)、负(底纹)样本各10个,进行比较,并在坐标中显示其数值分布,如下图所示:
图4 以(R,G)作为特征的结果图
图5 以(R,G,B)作为特征的结果图
使用Steve Gunn工具包得到结果见下图
图6 用Steve Gunn工具包得到分类面
图7 用Steve Gunn工具包得到分类效果
可以看出采用2个特征就可以得到很好的效果了,也验证了间隔最优分类算法对此问题的有效性。
为了比较对偶空间与原空间的计算效率,比较了两空间的运算时间。
表 1 运算时间对比
方法 | 训练时间 | 测试样本判别时间 |
原空间 | 0.556517 秒 | 0.788372 秒 |
对偶空间 | 0.025058 秒 | 20.910515 秒 |
可以看到,训练样本数为正、负各10个的情况,原空间和对偶空间的训练效率和判别效率是有明显差异的。其原因为:原始问题的复杂度由特征维数决定,而对偶问题复杂度由训练样本个数决定。具体来说,当特征维数大于训练样本个数时,原空间问题复杂度较高,效率较低;当训练样本个数大于特征维数时,对偶空间问题复杂度较高,效率较低。但是,它们的计算结果是相同的。
l 实验二:印章识别
1、总体实验方案
由于需要将印章、底纹、签字区分,所以这是一个多类分类问题。将多类问题分解为一系列SVM可直接求解的两类问题,基于这一系列SVM求解结果得出最终判别结果,这里采用一类对余类法(One versus rest,OVR)。
两类问题的分类采用了原空间和对偶空间求解两种方式。
2、具体技术途径
对一类对余类法进行了一定的修改,在本问题中应用的具体步骤为构造2个两类分类机(印章、底纹、签字3个类别),其中第i个分类机把第i类同余下的各类划分开,训练时第i个分类机取训练集中第i类为正类,其余类别点为负类进行训练。2个分类器,按照(印章,其余)、(签字,其余)依此判别时,第1个分类器从总样本中分出印章,第2个分类器在余下的样本中分出签字,剩下的就是底纹。
对偶空间的求解没有使用steve gunn的工具包,而是自己根据拉格朗日对偶原理重新进行了相关程序的编写。
3、实验结果与分析
总共取20个样本点作为训练集,在原空间和对偶空间求解二分问题,效果如下
图8 原空间求解得到分类效果
图9 对偶空间得到分类效果
可以看出,分类效果很好,分类器基本上将印章、底纹、签字3个类别分开了,这验证了间隔最优分类算法和一对其余多分类算法对此问题的有效性。
四、实验心得与体会
本次实验主要通过编程解决具体问题加深对SVM原理的理解。我的收获与体会有如下几点:
1.怎样针对问题设计最优化
最优化问题是我们很面熟的问题,我们在以前的学习中常常遇到,但是以前需要优化的问题(变量,目标,约束)都是以数学语言进行了精确描述的,只需我们求解就好了,可这次我们需要自己去定义好坏的标准,优化变量以及约束条件,我认为只要优劣的衡量标准是合理的,可行的,它不会是唯一的,比如,该问题中我们使用了“间隔”的概念;
2.数学很重要,很有趣
推导原空间问题的形式时,将问题一步步从难求解的非凸优化问题变为易求解的二次规划问题的过程令人神往;处理多分类问题时多种多样的算法也令人眼花缭乱。
3.具体问题具体分析
没有最优的唯一标准,最适合的方法就是最好的方法。对一对其余的多类分类方法进行了修改,变简单了,但是对该问题同样优秀。
文中的多分类方法完全引用了开到荼蘼的博客
http://blog.sina.com.cn/fanhuasijin118
文中关于SVM的知识参考了吴恩达斯坦福机器学习讲义和JerryLead的斯坦福大学机器学习个人笔记