我在MatLab中使用LIBSVM來嘗試對圖像進行分類。在MatLab中使用LIBSVM進行多類圖像分類
我知道SVM是一個二進制分類模型,但是我想知道如何使用它作爲多類分類模型。
是否可以訓練數據對(即汽車和非汽車,馬和非馬,人和非人),然後通過將圖像與所有三種模型進行比較來預測圖像屬於哪一類?如果是這樣,我怎麼能做到這一點?我的測試標籤向量是什麼?
我在MatLab中使用LIBSVM來嘗試對圖像進行分類。在MatLab中使用LIBSVM進行多類圖像分類
我知道SVM是一個二進制分類模型,但是我想知道如何使用它作爲多類分類模型。
是否可以訓練數據對(即汽車和非汽車,馬和非馬,人和非人),然後通過將圖像與所有三種模型進行比較來預測圖像屬於哪一類?如果是這樣,我怎麼能做到這一點?我的測試標籤向量是什麼?
由於@丹的補充答案,下面是我以前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);
感謝您的幫助。你能解釋一下爲什麼你使用'double(trainingLabel == k)'而不是'double(trainingLabel)'?另外 - 在生成模型時,我使用15個說汽車的實例(1個在訓練標籤的相應位置)和15個非汽車實例(-1在訓練標籤的相應位置)。我可以爲每個非實例的非實例使用相同的15個隨機對象 - 即非馬,非人? – Gwenji
謝謝格文吉。 trainingLabel == K表示您希望獲得模型預測您的實例屬於K的概率,然後選擇具有最大概率的K數。你的問題二,答案是肯定的。 – lennon310
最後一個問題 - 涉及到運行'svmpredict'時,我說我有一班20輛車,我想決定他們屬於哪三個班級 - 我可以使用20輛車和20個測試標籤矢量「1」 的?或者我必須使用20輛汽車和20輛非汽車才能使用40'1s和-1s'的測試標籤矢量?非常感謝您的幫助。 – Gwenji
是的,你的建議是一個好方法。它被稱爲one-vs-all strategy。
您需要爲每個班級分別訓練SVM。輸出數據將是一個二進制變量,如果在該類中則爲1,否則爲0。然後,爲了對新項目進行分類,請通過每個SVM進行分類,並選擇輸出最高的輸出(輸出最接近1)。
感謝您的答覆。在我上面提到的情況下 - 生成了3個模型後,我會對每個模型執行svmpredict三次,並接受預測準確度最高的模型? – Gwenji
是正確的 – Dan