1

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

方法1(一对一):

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

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

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

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

4

1 回答 1

3

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

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

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

于 2012-01-25T01:16:08.133 回答