2014-03-05 2 views
1

MatLab 내에서 LIBSVM을 사용하여 이미지를 시도하고 분류했습니다.멀티 클래스 이미지 분류를 위해 MatLab에서 LIBSVM 사용

나는 SVM이 바이너리 분류 모델이라는 것을 알고 있지만, 나는 그것이 다중 클래스 분류 모델로 어떻게 사용되는지 궁금해하고있다.

자동차와 비 자동차, 말과 말, 사람과 사람이 아닌 데이터 쌍을 훈련시킨 다음 이미지를 세 모델 모두와 비교하여 이미지가 속한 클래스를 예측할 수 있습니까? 그렇다면 어떻게해야합니까? 내 테스트 라벨 벡터는 무엇입니까?

+1

감사합니다. 위에서 언급 한 경우 - 3 개의 모델을 생성 한 경우 각 모델에 대해 세 번씩 svmpredict를 수행하고 예측 정확도가 가장 높은 모델을 승인합니까? – Gwenji

+0

정확 정확하게 – Dan

답변

1

댄 @의 보조 대답은 아래에있는 내 이전 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); 
+0

도움 주셔서 감사합니다. double (trainingLabel == k)을'double (trainingLabel)'과 반대로 사용하는 이유를 설명해 주시겠습니까? 도 - 모델을 생성 할 때 자동차 (연습용 레이블의 해당 위치에 1 개)와 자동차가 아닌 인스턴스 (연습용 레이블의 해당 위치에 -1)의 15 인스턴스를 사용합니다. 나는 비 aclass의 모든 비 인스턴스에 대해 동일한 15 개의 무작위 오브젝트를 사용할 수 있습니까? – Gwenji

+0

고웬 지 감사합니다. trainingLabel == K는 모델이 인스턴스가 K에 속한다고 예상 할 확률을 얻고 자하는 것을 나타내며, 가장 큰 확률로 K를 선택합니다. 당신의 질문 2, 대답은 '예'입니다. – lennon310

+0

하나의 마지막 질문 -'svmpredict'를 실행할 때 20 대가 있다고 말하면서 그들이 속한 세 클래스 중 어느 클래스에 속하는지 결정하려고합니다. 20 대와 테스트 라벨 벡터 20 개를 사용할 수 있습니까? "1"? 또는 40 대와 1 대 '의 테스트 라벨 벡터를 사용하려면 20 대의 자동차와 20 대의 비 자동차를 사용해야합니까? 모든 도움에 많은 감사드립니다. – Gwenji

2

예 제안은 좋은 접근 방법입니다. one-vs-all strategy이라고합니다.

각 클래스마다 별도의 SVM을 교육해야합니다. 출력 데이터는 해당 클래스에 있으면 1과 같고 그렇지 않으면 0과 같은 2 진 변수가됩니다. 그런 다음 새 항목을 분류하려면 각 SVM을 통해 실행하고 가장 높은 출력 (1에 가장 가까운 출력)이있는 SVM을 선택하십시오.