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



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

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

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

是的,您的建议是一个很好的方法。这就是所谓的一对一战略。

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

作为@Dan的补充答案,以下是我上一篇文章中的相关代码:

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

最新更新