在MatLab中使用LIBSVM进行多类图像分类

时间:2014-03-05 14:24:27

标签: matlab svm libsvm

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

我知道SVM是一个二进制分类模型,但是我想知道如何将它用作多类分类模型。

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

2 个答案:

答案 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);