使用 LIBSVM 的多类

Posted

技术标签:

【中文标题】使用 LIBSVM 的多类【英文标题】:MultiClass using LIBSVM 【发布时间】:2012-02-17 06:26:56 【问题描述】:

我有一个多类 svm 分类(6 类)。我想使用 LIBSVM 对其进行分类。以下是我尝试过的,我对它们有一些疑问。

方法一(一对一):

model = svmtrain(TrainLabel, TrainVec, '-c 1 -g 0.00154 -b 0.9');
[predict_label, accuracy, dec_values] = svmpredict(TestLabel, TestVec, model);

关于这个方法的两个问题:1)我需要做的就是解决多类问题 2) '-b n' 中的 n 应该是什么值。我不确定

方法2(一VS休息):

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

对于第二种方法,我如何附加分类分数。我无法投票。

除此之外,这是我尝试过的两种方法。哪种方法更好?

想听听一些cmets。如果我错了,请纠正我。

【问题讨论】:

我很好奇你是否在非常不平衡的集合(一些“一”和许多“休息”)的“一与休息”中取得了良好的结果,并且当示例之间存在很多差异时在“休息”中? 【参考方案1】:

关于 '-b' 参数,在 LIBSVM README 中它说:

-b probability_estimates:是否训练SVC或SVR模型进行概率估计,0或1(默认0)

因此,如果您希望经过训练的模型返回类别概率,则应指定“-b 1”,否则应指定“-b 0”。您只需拨打svmtrain 一次。此外,如果您指定 '-b 1' 用于训练,则还必须指定它用于预测。

【讨论】:

你指的是方法1吗?我对吗?这是因为我做的第二种方法是 on one vs rest。这就是为什么我要打几次电话.. 是的,我指的是方法1。

以上是关于使用 LIBSVM 的多类的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 libsvm 库(Matlab)实现 1 对 1 多类分类?

如何通过 LIBSVM 使用 platt 缩放和交叉验证?

C# LibSVMsharp 库中的 LIBSVM“决策值”

多类 SVM。二元决策树。 LIBSVM 的问题

使用 LIBSVM 的 one vs rest 多类分类。 matlab

如何使用 libsvm 计算多类预测的概率?