我有一个多类svm分类(6级)。我想用LIBSVM对它进行分类。以下是我尝试过的,我对它们有一些疑问。
Method1(一对一):
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(一对比休息):
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
对于第二种方法,如何附加分类分数。我无法投票。
除此之外,这些是我尝试过的两种方法。哪种方法更好?
想听一些评论。如果我错了,请纠正我。
答案 0 :(得分:3)
关于'-b'参数,在LIBSVM自述文件中它说:
-b probability_estimates:是否训练SVC或SVR模型进行概率估计,0或1(默认为0)
因此,如果您希望训练的模型返回类概率,则应指定'-b 1',如果不希望,则指定'-b 0'。您只需拨打一次svmtrain
即可。此外,如果您为训练指定'-b 1',则还必须将其指定为预测。