libsvm的多分类策略


前言

问题提出:众所周知,支持向量机(Support Vector Machine,SVM)是一个解决二分类问题的分类器,svm处理多分类问题只能通过一对一策略(One versus One,OvO)或者一对多策略(One versus Rest,OVR),这里先不讨论那种策略的好坏,因为libsvm工具箱用的时OvO策略,所以我们就OvO策略展开,很多博客都给出了OvO策略的原理,无非就是投票,既然是投票,就有可能出现票数相同的情况,本文就是讨论libsvm解决多分类问题采样投票法,得票数量相同的情况的做法。


一、SVM的OvO多分类策略

为了方便,这里就直接复制SVM的OvO背景了,原文连接如下

点此跳转

svm多分类效果不佳,目前是svm研究的热点之一。libsvm用的是one- versus-one法。
简介:
一对一法(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 如果是C win,则C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)

二、解决得票数量相同问题

很明显,在以上投票机制下会出现得票数量相同的情况,比如分类的6个SVM分类器的结果为:

SVM(A,B)=- 1.3860
SVM(A,C)=- 0.6228
SVM(A,D)=0.3749
SVM(B,C)=- 0.0739
SVM(B,D)=1.2906
SVM(C,D)=-1.5409
SVM分类的结果是一个数,表示属于每一个类别的概率(可以看作样本到超平面的距离?),假设正数为代表最后结果为第一类,负数为第二类,那么由以上输出值可得,6个分类器得出的最终结果为:
SVM(A,B) =B
SVM(A,C)=C
SVM(A,D)=A
SVM(B,C)=C
SVM(B,D)=B
SVM(C,D)=D
这里,B的票数为2, C的票数也为2。 当票数相同时,可以采用输出概率的大小解决问题,相同票数下,概率值越大的那类为最终输出结果。

下面来算B、C的概率和:
---------------P( B )=abs(-1.3860)+abs(1.2906)=2.6766
---------------P( C )=abs(-0.6228 )+abs(- 0.0739)=0.6967
因为,P( B )>P( C ),虽然B和C的票数相同,但libsvm还是将最终分类结果给予了B。

总结

libsvm采用OvO策略解决多分类问题,具体来说就是投票算法,当得票相同时,则可以用概率绝对值的和作为判断最终分类输出的依据。
libsvm分类中,分类概率的获取方法:

[pa pb pc]=svmpredict(y_test,feature_test,model); 

这里的pc输出的就是所谓的分类概率,其维度为[样本数量*二分类器数量],每一列对应一个二分类器的输出。
这里的做法可以扩展到其他的分类器,比如LDA的分类结果也是输出一个类似的正/负数概率,根据这个概率,采样投票法就可以将LDA采用OvO策略扩展为多分类分类器。

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值