执行多类SVM的最佳方法


18

我知道SVM是二进制分类器。我想将其扩展到多类SVM。哪种方法是最好的,也许是最简单的?

代码:在MATLAB中

   u=unique(TrainLabel); 
    N=length(u); 
    if(N>2)    
        itr=1;    
        classes=0;   
        while((classes~=1)&&(itr<=length(u)))   
            c1=(TrainLabel==u(itr));    
            newClass=double(c1); 
            tst = double((TestLabel == itr));
            model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154');  
            [predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model);    
            itr=itr+1;   
        end
        itr=itr-1;
    end

如何改善呢?


变量classes在代码中起什么作用?似乎没用。

你得出什么结论了吗?我的工作有这个问题。如果您遇到了麻烦,请在这里分享您的多分类代码。谢谢。
me.rasouli's

Answers:


16

有许多用于多类分类的方法。与SVM无关的两个经典选项是:

  1. 一对多(OVA)分类:
    假设您具有类A,B,C和D。不是进行四向分类,而是训练四个二进制分类器:A vs. not-A,B vs. not-B ,C与非C,以及D与非D。然后,选择“最佳”的阳性类别(例如,在所有四个行程中距边缘都最远)。如果所有分类都不是肯定的(即它们都不都是X),则选择最差的分类(例如,最接近页边距)的“对立”。

  2. All-vs-All:
    训练所有可能的分类对。通过某种因素(例如,选择的次数)对课程进行排名,然后选择最佳课程。

哪种方法效果最好一直存在争议: Duan和Keerthi进行了一项经验研究,提出了一种特定的“ 万事通”方法,而Rifkin和Klautau则主张“ 万事通”方案。甚至有些方案中,人们可以学习描述类标签而不是标签本身的纠错码。

祝好运!

编辑:您真正想要的,尤其是对于OVA,是每个类别的后验概率。对于某些方法,例如朴素贝叶斯(Naive Bayes),要摆脱困境并不容易。SVM通常不给您概率,但是有一些方法可以计算它们。请参见John Platt的1999年论文“支持向量机的概率输出...”。


2
对于OVA-您可以选择概率最大的类(由Platt缩放引起)吗?
B_Miner 2012年

1
是的,这基本上是段和Keerthi论文的结果。他们将Platt概率与Hastie的成对耦合技巧结合在一起,并获得了良好的结果。我可能应该编辑文本以包含该内容。B_Miner好收获!
Matt Krause 2012年

在SVM中,您是否需要进行投票或汇总池?
lakesh 2012年

@lakesh,全民投票或全民投票就像投票制度。如果使用一组二进制分类器,则必须做一些事情才能将它们变成多分类器。或者,您可以使用下面由carlosdc描述的修改后的SVM ...
Matt

那是什么东西?
lakesh 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.