我在MatLab中使用LIBSVM来尝试对图像进行分类。
我知道SVM是一个二进制分类模型,但是我想知道如何将它用作多类分类模型。
是否可以训练成对的数据(即汽车和非汽车,马和非马,人和非人),然后通过将图像与所有三个模型进行比较来预测图像所属的类别?如果是这样,我怎么能实现这个目标?我的测试标签向量是什么?
答案 0 :(得分:2)
是的,你的建议是一个好方法。它被称为one-vs-all strategy。
您需要为每个班级培训单独的SVM。如果在该类中,则输出数据将是等于1的二进制变量,否则为0。然后,为了对新项目进行分类,在每个SVM中运行它,并选择输出最高的项目(输出最接近1)。
答案 1 :(得分:1)
作为@ Dan的补充答案,以下是我之前post的相关代码:
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);