2014-02-06 2 views
1

하나의 VSS SVM을 평가하기 위해 MATLAB에서 libsvm을 사용하려고합니다. 유일한 문제는 내 데이터 세트가 특정 테스트 세트 선택을 보증하기에 충분하지 않다는 것입니다 . 따라서, leave-one-out을 사용하여 분류자를 평가하고 싶습니다.libsvm : leave-one-out을 사용하여 SVM 평가

나는 SVM을 사용하는 데 특별히 경험이 없으므로 무엇을해야할지 혼란 스러울 때 용서해주십시오. 정밀도 대 리콜 곡선을 생성해야하고, 분류자를위한 혼란 행렬이 필요하지만 어디서부터 시작해야할지 모르겠습니다.

나는 훈련을 떠나기위한 거친 출발로 다음을 생각해 냈지만 평가 방법을 모르겠습니다.

+0

http://www.csie.ntu.edu.tw/~cjlin/libsvm/#matlab의 libsvm을 사용하고 있습니까? – lennon310

+0

예 실제로 libSVM을 사용하고 있습니다. – NOP

답변

4

내가 관심을 가질만한 모듈을 제공하려고 노력 중이며,이를 사용자의 기능에 통합 할 수 있습니다. 희망이 도움이됩니다.

휴가-한 아웃 :

scrambledList = randperm(totalNumberOfData); 
trainingData = Data(scrambledList(1:end-1),:); 
trainingLabel = Label(scrambledList(1:end-1)); 
testData = Data(scrambledList(end),:); 
testLabel = Label(scrambledList(end)); 

그리드 검색 (듀얼 클래스의 경우) :

acc = 0; 
for log2c = -1:3, 
    for log2g = -4:1, 
    cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)]; 
    cv = svmtrain(trainingLabel, trainingData, cmd); 
    if (cv >= acc), 
     acc = cv; bestC = 2^log2c; bestG = 2^log2g; 
    end  
    end 
end 

모든 한 - 대 - (멀티 클래스의 경우에 사용) :

model = cell(NumofClass,1); 
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);