MatLab中LIBSVM在多类图像分类中的应用

MatLab中LIBSVM在多类图像分类中的应用,matlab,svm,libsvm,Matlab,Svm,Libsvm,我在MatLab中使用LIBSVM尝试对图像进行分类 我知道支持向量机是一种二元分类模型,但我想知道我将如何使用它作为多类分类模型 是否可以训练成对的数据(即汽车和非汽车、马和非马、人和非人),然后通过将图像与所有三个模型进行比较来预测图像属于哪一类?如果是,我怎样才能做到这一点?我的测试标签向量是什么?是的,你的建议是一个很好的方法。它叫“世界杯” 您需要为每个类培训单独的支持向量机。输出数据将是一个二进制变量,如果在该类中,则等于1,否则等于0。然后,为了对一个新项目进行分类,在每个支持向量

我在MatLab中使用LIBSVM尝试对图像进行分类

我知道支持向量机是一种二元分类模型,但我想知道我将如何使用它作为多类分类模型


是否可以训练成对的数据(即汽车和非汽车、马和非马、人和非人),然后通过将图像与所有三个模型进行比较来预测图像属于哪一类?如果是,我怎样才能做到这一点?我的测试标签向量是什么?

是的,你的建议是一个很好的方法。它叫“世界杯”


您需要为每个类培训单独的支持向量机。输出数据将是一个二进制变量,如果在该类中,则等于1,否则等于0。然后,为了对一个新项目进行分类,在每个支持向量机中运行它,并选择输出最高的一个(输出最接近1)。

作为@Dan的补充答案,下面是我之前的相关代码:


谢谢你的回复。在我上面提到的例子中——生成了3个模型,然后我会对每个模型执行三次svmpredict,每次一次,并接受预测准确度最高的模型吗?谢谢您的帮助。您能解释一下为什么您使用的是
double(trainingLabel==k)
而不是
double(trainingLabel)
?另外-在生成模型时,我使用了15个汽车实例(1个在培训标签的相应位置)和15个非汽车实例(1个在培训标签的相应位置)。我可以对每个非aclass实例使用相同的15个随机对象吗?即非马、非人?谢谢Gwenji。trainingLabel==K表示您希望获得模型预测实例属于K的概率,然后选择概率最大的K数。你的第二个问题,答案是肯定的。最后一个问题-当涉及到运行
svmpredict
时,假设我有一个20辆车的类,我想确定它们属于三个类中的哪一个-我可以只使用20辆车和20个“1”的测试标签向量吗?或者我必须使用20辆汽车和20辆非汽车才能使用40个'1和-1'的测试标签向量?非常感谢您的帮助。我建议您使用其中的40个,因为您可能需要获得模型可预测性的假阳性/阴性。
model = cell(NumofClass,1);  % NumofClass = 3 in your case
for k = 1:NumofClass
    model{k} = svmtrain(double(trainingLabel==k), trainingData, '-c 1 -g 0.2 -b 1');
end

%% calculate the probability of different labels

pr = zeros(1,NumofClass);
for k = 1:NumofClass
    [~,~,p] = svmpredict(double(testLabel==k), testData, model{k}, '-b 1');
    pr(:,k) = p(:,model{k}.Label==1);    %# probability of class==k
end

%% your label prediction will be the one with highest probability:

[~,predctedLabel] = max(pr,[],2);