SVM用于多分类的网上资料综合

SVM多类分类方法

  (2012-04-12 09:46:51)
   

下节内容来自:http://blog.sina.com.cn/s/blog_5eef0840010147pa.html

SVM多类分类方法的实现根据其指导思想大致有两种:

(1)将多类问题分解为一系列SVM可直接求解的两类问题,基于这一系列SVM求解结果得出最终判别结果。

(2)通过对前面所述支持向量分类机中的原始最优化问题的适当改变,使得它能同时计算出所有多类分类决策函数,从而“一次性”地实现多类分类。原始问题可以改写为:
SVM多类分类方法
虽然第(2)种指导思想看起来简单,但由于它的最优化问题求解过程太复杂,计算量太大,实现起来比较困难,因此未被广泛应用[7]。而基于第(1)种指导思想的SVM多类分类方法主要有5种。

***1、一对其余法

    一类对余类法(One versus rest,OVR)是最早出现也是目前应用最为广泛的方法之一,其步骤是构造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个叶结点,每个节点对应一个二类分类器。

SVM多类分类方法


DAG-SVMS简单易行,只需要使用k一1个决策函数即可得出结果,较“一对一"方法提高了测试速度,而且不存在误分、拒分区域;另外,由于其特殊的结构,故有一定的容错性,分类精度较一般的二叉树方法高。然而,由于存在自上而下的“误差积累”现象是层次结构固有弊端,故DAG-SVMS也逃脱不掉。即如果在某个结点上发生了分类错误,则会把分类错误延续到该结点的后续结点上.

**4、决策树方法

     决策树的基本思想是从根节点开始,采用某种方法将该节点所包含的类别划分为两个子类,然后再对两个子类进一步划分,如此循环,直到子类中只包含一个类别为止,这样,就得到了一个倒立的二叉树。最后,在二叉树各决策节点训练支持向量机分类器,实现对识别样本的分类。决策树支持向量机多分类方法有很多种,不同方法的主要区别在于设计树结构的方法不同。

SVM多类分类方法
    完全二叉树结构分类时使用的平均分类器数目为log2k,偏二叉树使用的平均分类器数为(k+1)/2-1/k,具有其他层次结构的二叉树使用的分类器平均值介于二者之间。完全二叉树分类时所需要的分类器数目最少,因此具有较少支持向量的完全二叉树的分类器速度也是较快的。
**5、纠错输出编码法(ECOC)

对于K类分类问题,可以根据不同方法构造一系列的两类分类问题,对于每个两类分类问题可以建立一决策函数。共得到L个决策函数,如果这些决策函数完全正确,K类中的每一类都对应一个元素为-l或+1的长度为L的数

列,按照K类中的第一类、第二类,...,第K类的顺序,把这些数列排列起来,便可得到一个K行L列的编码矩阵,若要判断一个测试输入点的归属,首先用所得到的L个决策函数,得到一个元素为-l或l的长度为L的数列,然后将此数列与先前得到矩阵比较,相应于矩阵中有一行且仅有一行向与此数列相同,这个行数就是输入点的归属类;若矩阵中没有一行与该数列相同,可以通过计算汉明距离找出最近的一行,改行对应的类别即为该点的类别。


下节内容来自http://www.matlabsky.com/thread-9471-1-1.html


SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。

a.一对多法(one-versus-rest,简称1-v-r SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

b.一对一法(one-versus-one,简称1-v-1 SVMs)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得 票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。

c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。

对c和d两种方法的详细说明可以参考论文《支持向量机在多类分类问题中的推广》(计算机工程与应用。2004)
d.其他多类分类方法。除了以上几种方法外,还有有向无环图SVM(Directed Acyclic Graph SVMs,简称DAG-SVMs)和对类别进行二进制编码的纠错编码SVMs。


下节内容来自:http://blog.sina.com.cn/s/blog_4c98b96001009b8d.html

SVM多类分类---多个二值分类combine

SVM 算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目 标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较 高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-oneone-against-all两种。

a.一对多法(one-versus-rest,简称OVR SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

假如我有四类要划分(也就是4个Label),他们是A、B、C、D。于是我在抽取训练集的时候,分 别抽取A所对应的向量作为正集,B,C,D所对应的向量作为负集;B所对应的向量作为正集,A,C,D所对应的向量作为负集;C所对应的向量作为正集, A,B,D所对应的向量作为负集;D所对应的向量作为正集,A,B,C所对应的向量作为负集,这四个训练集分别进行训练,然后的得到四个训练结果文件,在 测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试,最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x).于是最终 的结果便是这四个值中最大的一个。

yode:这种方法有种缺陷,因为训练集是1:M,这种情况下存在biased.因而不是很实用.

b.一对一法(one-versus-one,简称OVO SVMs或者pairwise)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得 票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。

还是假设有四类A,B,C,D四类。在训练的时候我选择A,B; A,C; A,D; B,C; B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。

投票是这样的.
A=B=C=D=0;
(A, B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
(A,C)-classifer 如果是A win,则A=A+1;otherwise, C=C+1;
...
(C,D)-classifer 如果是A win,则C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)

yode:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的.

c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。

对c的详细说明可以参考论文《支持向量机在多类分类问题中的推广》(计算机工程与应用。2004)

d.DAG-SVMS是由Platt提出的决策导向的循环图DDAG导出的,是针对“一对一”SVMS存在误分、拒分现象提出的。
算法在训练阶段与“一对一”法同,也要构 每

两类间的分类面,既有n(n-1)/2个分类器。但在分类阶段,该方法将所有分类器构成一个两
向有向 环图,包括n(n-1)/2个节点和n个叶。其中每个节点为一个分类器,并与下一层的
两个节点(或叶)相连。当对一个未知 本进行分类时,首先从顶部的 节点(包含两类)开始, 
据 节点的分类结果用下一层的左节点或右节点继续分类,直到达到底层某个叶为
止,该叶所表示类别即为未知 本的类别
DAGSVM在训练上同OVOSVM,都需要训练n*(n-1)/2个分类器,但是在分类的时候借助
有向 环图的结构,可以只利用(n-1)个分类器就可以完成。 而效率上有提升。



点击看大图


尽快对svmlight和libsvm做个调研,比较一下2者用在多类分类上的速度和性能.个人偏爱svmlight,不过还是应该用事实说话,我记得原来调研过,现在的其实只需把svmlight在多类的问题上增加一项关于类别个数n的式子,应该不会有大的改动,svmlight的速度快一些.


下节内容来自:http://www.ilovematlab.cn/thread-84377-1-1.html

Matlab的LSSVM多分类问题

在lssvm工具箱中编程,解决分五类的问题。
经过样本训练,所得分类图形如附件所示,请问如何分辨该模型是否正确?
%**********输入样本数据***********%
X为250行5列的矩阵,Y为250行1列的矩阵(Y元素为1/2/3/4/5)
%***************编码********************%
[Yc,codebook,old_codebook] = code(Y,'code_MOC');
%**************调整参数******************%
type = 'classification';
L_fold = 10;
[gam,sig2] = tunelssvm({X,Yc,type,1,1,'RBF_kernel'},[],...
             'gridsearch',{},'crossvalidate',{X,Yc,L_fold,'misclass'});        
[alpha,b] = trainlssvm({X,Yc,type,gam,sig2,'RBF_kernel'});
%*************显示分类模型*************%
plotlssvm({X,Yc,type,gam,sig2,'RBF_kernel'},{alpha,b});

1.fig

18.86 KB, 下载次数: 3124

训练后所得分类模型




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值